首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在后台运行AVAssetExportSession

在后台运行AVAssetExportSession
EN

Stack Overflow用户
提问于 2016-03-23 17:49:27
回答 1查看 1.4K关注 0票数 2

当应用程序处于后台时,我无法让AVAssetExportSession工作。

我的应用程序启用了后台模式“后台获取”。

当调用此UIApplicationDelegate方法时

代码语言:javascript
复制
func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)  

调用I使用AVAssetExportSession导出AVAsset,使用以下方法:

exportAsynchronouslyWithCompletionHandler

然后,我将收到以下错误:

代码语言:javascript
复制
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSUnderlyingError=0x147dae560 {Error Domain=NSOSStatusErrorDomain Code=-16980 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16980), NSLocalizedDescription=The operation could not be completed} 

然而,当我有背景模式“音频,空中播放和图片在图片”,出口作品。

这是伟大的,但我们的提交被拒绝,因为我们不播放任何音频在后台。

背景中还有什么其他的视频输出方式吗?

干杯,瑞德

复制的步骤我已经创建了一个示例项目来显示这个问题。

下载网址:http://up.red.to/WKo1MMstzD

  • 在设备上运行应用程序
  • 接受权限
  • 按下主页按钮
  • 在Xcode中,转到Debug ->模拟背景刷新
  • 请参阅错误(在控制台中打印并显示为本地通知)
EN

回答 1

Stack Overflow用户

发布于 2016-03-24 01:54:44

你的问题:

背景中还有什么其他的视频输出方式吗?

当然,有一些限制。

NSProcessInfo有一组API,用于在应用程序处于后台时请求更多的时间来完成任务。例如:

代码语言:javascript
复制
id activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityAutomaticTerminationDisabled reason:@"Good Reason"];
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    [[NSProcessInfo processInfo] endActivity:activity];
}];

这会给你更多的时间。还有其他用于同步操作的API,在这两种情况下,您的应用程序仍然应该为系统做好准备,以免有更多的时间。在WWDC 2015的会议上广泛讨论了这一问题。

您还必须确保您的后台活动没有写入文件系统的受保护部分。确保输出位置设置了正确的NSFileProtection属性,以便即使在设备被锁定时也允许访问。

现在,特别是使用后台提取,您有非常有限的时间来完成您的工作,并调用后台获取完成处理程序。背景获取API将与NSURLSession一起使用,用于调度从应用程序进程中执行的后台下载。在这里使用NSProcessInfo API可能不会为您带来更多的时间,而背景获取API对于编码/导出媒体是非常不合适的。即使是小型媒体文件完成所需的时间也将超过后台获取处理程序的时间限制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36185277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档