在后台启动AVAssetExportSession

9

我的应用在进行某些处理时需要调用 AVAssetExportSession。如果会话已经开始并且我将应用程序置于后台,一切都会正常完成。但是,如果在调用 exportAsynchronouslyWithCompletionHandler之前将应用程序置于后台,则会出现以下错误:

AVAssetExportSessionStatusFailed Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1e550db0 {NSLocalizedFailureReason=An unknown error occurred (-12985), NSUnderlyingError=0x1e574910 "The operation couldn’t be completed. (OSStatus error -12985.)", NSLocalizedDescription=The operation could not be completed}

是否可能在后台启动 AVAssetExportSession?


我无法让它完全在后台运行。即使会话在进入后台之前已经启动,它也会立即中断。您是否使用“_backgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{...”使其在后台运行? - eddy
@eddy 是的,我正在使用类似的东西。 - Dex
我有同样的问题。有没有解决方案? - Bagusflyer
3个回答

5

实际上这是不可能的,因为你无法在后台启动新线程。如果你想要在后台执行许多任务,你需要在应用程序进入后台之前全部以异步方式启动。


4
你可以在后台启动 AVAssetExportSession。在 AVFoundation 中仅有的限制是使用 AVVideoCompositions 或 AVMutableVideoCompositions 时需要在前台操作。AVVideoCompositions 使用 GPU,而 GPU 无法在后台使用。

我无法在后台导出音频,你有示例或链接吗? - Ryan Heitner

-1

我找到了一個對於音頻有效的解決方案,但我還沒有嘗試過視頻。

如果您在項目的功能中更新“背景模式”設置,並包括音頻,它將允許導出。

這是用於在背景中播放音樂的。


我认为iOS 8现在甚至允许GPU处理在后台进行。 - Dex
这个在IOS 7和8上都可以运行,我没有在之前的版本上进行测试。 - Ryan Heitner
当我打开这个问题时,它明显没有运行;) 这是多么的痛苦啊! - Dex
我发现了不一致的行为。似乎我可以在后台启动/完成导出会话。但是,如果应用程序在导出会话进行中被置于后台,则导出将失败。 - Alfie Hanssen
错误领域=AVFoundationErrorDomain 代码=-11847 "操作被中断" UserInfo=0x1974ff10 {NSLocalizedRecoverySuggestion=停止其他操作,然后重试。, NSUnderlyingError=0x1936a5d0 "无法完成此操作。(OSStatus错误-16101。)", NSLocalizedDescription=操作被中断} - Alfie Hanssen
Alfie,也许你应该开一个新的问题并附上更多的代码。我没有看到你的错误。 - Ryan Heitner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接