objective-c - 应用程序在渲染期间进入后台时 AVAssetWriter 失败

标签 objective-c ios video-processing

在我的应用程序中,我正在渲染从用户照片中检索到的图像生成的视频。我已经设置了一个 AVAssetwriter 和一个 AVAssetwriterInput 有一个 AVAssetWriterInputPixelBufferAdaptor。我能够将从用户库中检索到的 ALAsset 对象转换为 CVPixelBuffers,并将它们添加到视频中,然后将其保存为 mp4。将所有图像添加到视频是在后台线程上完成的,该线程每帧向主线程发送一个通知,因此可以更新界面。所有这一切都很好,我从应用程序中得到了一个可用的电影文件。

我现在的问题是,当用户进入另一个应用程序时,在再次激活后,ALAssetWriter 的状态变为“失败”,我无法再向电影文件添加任何图像。首先,我想我可能必须结束当前的 writer session 并重新打开一个新 session ,一旦应用程序再次激活,但这似乎没有帮助。

我只是想知道当我希望用户进入其他应用程序时一般的方法是怎样的。最好的解决方案是,如果渲染可以在后台继续进行。我想我需要来自 UIApplication 的后台线程。但就目前而言,如果渲染可以在恢复我的应用程序后继续进行,我会很高兴。

我暂时不会发布任何代码,因为它真的很多,而且我的问题可能是概念性的。如果您需要查看代码,我会发布它。

编辑 1: 在 iOS 4.3 和 iOS 5 上测试过。我在 iTimelapse 等其他应用程序上看到过后台渲染,但我不确定它们使用的是哪些框架。

编辑2: 我现在有一个 apple devforum 成员的信息,AVAssetWriter 在后台不起作用。那么是否有任何其他框架能够渲染 quicktime 视频?

最佳答案

事实证明,AVAssetWriter 将无法在应用程序被暂停后继续存在。您可以通过请求后台时间来额外添加 10 分钟的渲染时间,但之后 AssetWriter 会失败。如果您在电话上使用某些服务,也会发生同样的情况。例如调用或接听电话也会使 AVAssetWriter 失败。

关于objective-c - 应用程序在渲染期间进入后台时 AVAssetWriter 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7638078/

相关文章:

objective-c - NSDictionary 中的键可以重复吗?

objective-c - UIPrintInteractionController - 限制打印份数/获取打印份数

ios - 应用内购买恢复功能

iOS 11 自定义导航栏中的搜索栏

ios - 为什么我设置后 UITabBarControllerDelegate 就为零?

python - Tensorflow 的对象检测 API 的输出是什么?

objective-c - 如何获取访问 token Dropbox 用户 IOS

c++ - OpenCV 2.3 中的 VideoCapture 问题

opencv - 如何将视频(帧)输入 GLSL 着色器

iphone - 如何阻止 UITextField 响应摇动手势?