繁体   English   中英

在后台使用 AVAssetExportSession 导出视频

[英]Exporting videos with AVAssetExportSession in background the background

我正在开发一个 iOS 8 应用程序,它记录视频,使用AVMutableVideoComposition修改它并使用调用exportAsynchronouslyWithCompletionHandlerAVAssetExportSession导出结果。

只要应用程序在前台,事情就可以正常工作。 但是,当用户在导出完成之前按下主页按钮并将应用程序发送到后台时,会引发以下错误:

Error Domain=AVFoundationErrorDomain Code=-11847 "Operation Interrupted"     
UserInfo=0x174271c40 {NSUnderlyingError=0x170246c90 "The operation couldn't 
be completed. (OSStatus error -12125.)", NSLocalizedRecoverySuggestion=Stop 
other operations and try again., NSLocalizedDescription=Operation 
Interrupted}

看起来其他人在使用 Audio: AVAssetExportSession 时遇到了同样的错误

我尝试了各种方法,例如使用beginBackgroundTaskWithExpirationHandler请求更多时间执行(不起作用,因为导出在时间用完之前被中断),在应用程序功能中添加音频作为后台模式(不起作用,可能是因为我使用 AVMutableVideoComposition?),在主线程外的自定义队列中开始导出,但没有任何效果。

即使在应用程序进入后台失败时尝试重新启动导出,以防它尚未完成。 我试图听UIApplicationDidEnterBackgroundNotification并在应用程序已经在后台后重新启动导出,但我得到了同样的错误。

该线程中的讨论暗示可能是因为AVMutableVideoComposition无法在后台使用:

在后台启动 AVAssetExportSession

对于 iOS 8,这仍然适用吗? 是否有任何解决方法或有人知道我如何完成所需的功能(编辑和导出用户刚刚录制的视频,即使他将应用程序发送到后台)?

非常感谢任何帮助,我在这个问题上花了很多时间。

iOS 13 已测试。 导出时播放静音。

音频会话应配置为:

try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
try AVAudioSession.sharedInstance().setActive(true)

需要后台模式。

不幸的是,iOS 8 仍然如此。当应用程序在后台时,您无法导出,但可以在应用程序进入前台时立即开始导出。 只需在您的应用程序进入后台之前保存AVMutableCompostion 这可以在applicationDidEnterBackground完成。 然后您可以在applicationDidBecomeActive再次开始导出。

注意:您必须重新开始导出。 如果在进入后台之前未完成,则无法恢复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM