【问题标题】:AVAsset writer failed when app goes to background应用程序进入后台时 AVAsset 编写器失败
【发布时间】:2016-02-17 00:20:24
【问题描述】:

我的 [AVAssetWriter startWriting] 在应用程序进入后台时被调用,但它失败并出现以下错误:

Error Domain=AVFoundationErrorDomain Code=-11800 "操作无法完成" UserInfo={NSUnderlyingError=0x13c6cac20 {Error Domain=NSOSStatusErrorDomain Code=-16980 "(null)"}, NSLocalizedFailureReason=发生未知错误 (-16980 ), NSLocalizedDescription=操作无法完成}

这甚至可能在 applicationDidEnterBackground 被调用之前发生。我只需要在应用程序进入后台时暂停视频录制,然后在应用程序进入前台时恢复录制。

我还尝试在我的 [AVAssetwriter startWriting] 周围购买 beginBackgroundTaskWithExpirationHandler,但它仍然失败。

当应用程序进入后台并稍后进入前台时,处理视频录制的正确方法是什么。

谢谢。

【问题讨论】:

  • 您确定视频实际上是正确合成的吗?当 AVFoundation 的设置出现问题时(可能是重叠的时间范围?),此错误非常常见。我会先在前台对其进行测试,并 100% 确定视频正在正确构建,然后再查看后台问题。
  • 是的。它始终在前台正确工作。请注意,在添加任何视频缓冲区之前,开始写入失败。
  • 您能否包含更多代码,以便我们复制问题?
  • 你解决了这个问题吗?在我的应用程序中,当应用程序处于前台时一切正常。一旦用户在后台放下应用程序并再次移动到前台,则 appendPixelBuffer 方法返回 false。请建议我如何解决它。

标签: ios avfoundation avassetwriter


【解决方案1】:

在 iOS 上,如果在客户端应用程序进入后台时 AVAssetWriter 的状态为 AVAssetWriterStatusWriting,则其状态将更改为 AVAssetWriterStatusFailed 并且附加到其任何输入都将失败。

您可能希望使用-[UIApplication beginBackgroundTaskWithExpirationHandler:] 以避免在写入会话中间被打断并完成写入已附加的数据。

有关在后台执行代码的更多信息,请参阅 iOS 应用程序编程指南。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多