Spitfire
Spitfire 是一个简单的工具,可以将图像数组转换为视频。
示例
要运行示例项目,请克隆存储库,然后从 Example 目录运行 pod install
。
以下代码可在示例项目中找到,但演示了如何调用它以及如何处理它支持的各个回调。
要初始化 Spitfire 实例,您必须提供一个代理。在 UIViewController
中,这种方法通常使用懒加载属性来实现,如下所示
lazy var spitfire: Spitfire = {
return Spitfire(delegate: self)
}()
还有一个用于创建视频的功能,使用 [UIImage]
调用 images,帧率为 30 fps
spitfire.makeVideo(with: images, fps: 30)
Spitfire 会通过一系列的代理函数返回反馈。这包括以下内容
- 进度状态 - 将包含一个
Progress
对象,可以用来更新您的 UI 以显示视频写入的进度 - 完成,包括 URL - 当视频写入完成后,将包含文件系统中的
URL
- 失败,包括错误 - 将包含一个突出显示失败部分的
SpitfireError
Spitfire 代理协议
public protocol SpitfireDelegate: class {
func videoProgress(progress: Progress)
func videoCompleted(url: URL)
func videoFailed(error: SpitfireError)
}
性能考虑因素
请注意,用于喂送到作者的图像数组可能会变得非常大,轻易超过1GB的RAM。在创建视频时要特别注意这一点,否则由于内存使用可能会崩溃。一般规则是保持视频段不超过一分钟,但这个值会基于图像大小和设备而变化。
需求
- iOS 11.0+
- Xcode 10.2+
- Swift 5.0+
安装
Spitfire可以通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中即可。
pod "Spitfire"
使用
import Spitfire
确保在类级别声明 Spitfire
属性,以避免在执行期间超出作用域
class MyClass {
lazy var spitfire: Spitfire = {
return Spitfire(delegate: self)
}()
...
}
调用 makeVideo
函数,接受帧率的默认值 30
spitfire.makeVideo(with: images)
调用 makeVideo
函数并指定介于 1 到 60 之间的帧率
spitfire.makeVideo(with: images, fps: 60)
如果以 1-60 以外的值调用 makeVideo
函数,将导致 invalidFramerate
错误。
错误
Spitfire通过枚举提供了一系列相对丰富的错误,这些错误应该能够解决应用中可能出现的所有潜在失败情况。这些错误包括
public enum SpitfireError: Swift.Error {
case imageArrayEmpty
case invalidFramerate(String)
case imageDimensionsMatchFailure
case imageDimensionsMultiplierFailure(String)
case videoWriterFailure
case pixelBufferPointeeFailure
case invalidStatusCode(Int)
case pixelBufferApendFailure
}
致谢
这项工作基于最初由 acj 执行的工作,相关信息请参见这里。
许可协议
Spitfire 在 MIT 许可证下可用。更多信息请参阅 LICENSE 文件。