Ios 在后台使用AVAssetExportSession导出视频

Ios 在后台使用AVAssetExportSession导出视频,ios,avfoundation,Ios,Avfoundation,我正在开发一个iOS 8应用程序,它录制视频,使用AVMutableVideoComposition修改视频,并使用avassetextortsession调用exportAsynchronouslyWithCompletionHandler导出结果 只要应用程序在前台,一切正常。但是,当用户在导出完成之前按下home按钮并将应用程序发送到后台时,会引发以下错误: Error Domain=AVFoundationErrorDomain Code=-11847 "Operation Interr

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

只要应用程序在前台,一切正常。但是,当用户在导出完成之前按下home按钮并将应用程序发送到后台时,会引发以下错误:

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}
看起来其他人在音频方面也遇到了同样的错误:

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

即使在应用程序进入后台时,如果导出尚未完成,尝试重新启动导出也会失败。我试图收听
uiapplicationidenterbackgroundnotification
,并在应用程序已经在后台后重新启动导出,但我收到了相同的错误

此线程中的讨论提示可能是因为
AVMutableVideoComposition
不能在后台使用:

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


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

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


注意:您必须重新开始导出。如果在进入后台之前未完成,则无法恢复。已测试iOS 13。导出时播放静音

音频会话的配置应如下所示:

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

需要后台模式。

太糟糕了,我真的希望有一种方法可以在后台运行导出。我想我将不得不求助于你提出的解决办法。谢谢你的帮助!任何官方文档链接指定此代码在GPU上工作,不能在后台工作?@SalmanKhakwani:不幸的是,即使我在官方文档中也找不到它。但一定要经历这一点:。它在stackoverflow中包含更多的源和链接,这表明它是相同的。