【问题标题】:Running AVAssetExportSession in the background在后台运行 AVAssetExportSession
【发布时间】:2016-03-23 17:49:27
【问题描述】:

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

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

当这个 UIApplicationDelegate 方法被调用时

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void)  

被称为我使用 AVAssetExportSession 导出一个 AVAsset,使用方法:

exportAsynchronouslyWithCompletionHandler

然后我收到此错误:

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} 

但是,当我有背景模式“音频、Airplay 和画中画”时,导出工作正常。

这很好,但是我们的提交被拒绝了,因为我们没有在后台播放任何音频。

还有其他方法可以在后台导出视频吗?

干杯,红

复制步骤 我创建了一个示例项目来展示这个问题。

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

  • 在设备上运行应用程序
  • 接受权限
  • 按主页按钮
  • 在 Xcode 中,转到调试 -> 模拟后台刷新
  • 查看错误(在控制台中打印并显示为本地通知)

【问题讨论】:

  • 嗨@Red,您找到解决问题的方法了吗?
  • 嗨@Red,您是否找到了解决他或错误根本原因的方法?我们的应用也因此被拒绝。
  • @DennisA 嘿!不幸的是,我没有。我们决定只在应用重新打开时执行导出。我们确实考虑过添加一项功能,让我们有理由使用“音频、Airplay 和画中画”权限,但最终没有这样做。

标签: ios background avassetexportsession


【解决方案1】:

你的问题:

还有其他方法可以在后台导出视频吗?

当然,有一些限制。

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

id activity = [[NSProcessInfo processInfo] beginActivityWithOptions:NSActivityAutomaticTerminationDisabled reason:@"Good Reason"];
[exportSession exportAsynchronouslyWithCompletionHandler:^{
    [[NSProcessInfo processInfo] endActivity:activity];
}];

这会让你有更多的时间。还有其他用于同步操作的 API,在任何一种情况下,您的应用程序仍应为系统做好准备,以允许更多时间。这在 WWDC 2015 的会议中得到了广泛的介绍。

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

现在,特别是使用后台提取,您完成工作并调用后台提取完成处理程序的时间非常有限。后台获取 API 旨在与 NSURLSession 一起使用,以安排在您的应用程序进程之外执行的后台下载。在这里使用NSProcessInfo API 可能不会为您争取更多时间,而且后台获取 API 非常不适合编码/导出媒体。即使是很小的媒体文件,完成所需的时间也会超过后台提取处理程序的时间限制。

【讨论】:

  • 嘿!感谢您的答复。我会试试你的 NSProcessInfo 想法。虽然我不确定问题是否与我需要的时间有关,因为我们还会发送静默通知来触发后台进程,大约需要 5 分钟。
  • 嘿!我已经尝试过您的解决方案,但不幸的是,如果我没有启用音频权限,仍然会收到相同的错误。我们触发导出的另一种方式是通过静默推送通知,但我也收到了错误消息。
猜你喜欢
  • 1970-01-01
  • 2021-04-06
  • 2011-08-19
  • 2011-12-28
  • 2015-10-18
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多