1

我使用 AVAssetWriter AVCaptureSession 来录制视频。它运行良好。我使用 UIApplicationDidEnterBackgroundNotification 和 CTCallCenter.callEventHandler 在应用程序进入后台或来电时停止记录。UIApplicationDidEnterBackgroundNotification 运行良好。但在 CTCallCenter.callEventHandler,[AVAssetWriter finishWriting] 返回 NO 。这是 AVAssetWriter.error:

Error Domain=AVFoundationErrorDomain Code=-111800 "这个操作无法完成" UserInfo=0x6c0bc20 {NSLocalizedFailureReason=发生未知错误(-12785), NSUnderlyingError=0x6c0fc80 "The operation could not be completed. (OSStatus error -12785.)", NSLocalizedDescription=本次操作无法完成}

来电时似乎 AVAssetWriter 立即失败。录制的文件未完成,无法播放。有人能告诉我怎么处理吗?

CTCallCenter 代码:

    m_callCenter = [[CTCallCenter alloc] init];
    m_callCenter.callEventHandler= ^(CTCall* call)
    {
        if (call.callState == CTCallStateDialing || call.callState == CTCallStateIncoming){
            [self stopRecording];
            //[self performSelectorOnMainThread:@selector(stopRecording) withObject:nil waitUntilDone:NO];
        }
    };

stopRecording 在其他情况下工作正常。

4

1 回答 1

6

电话会导致AudioSession中断,因此如果您使用AudioSession回拨,您可能会更快发现。虽然我怀疑你现在AVAssetWriter可能已经被炸了。

设置AVAssetWriter.movieFragmentInterval应该有助于最大限度地减少您的损失 - 来自 AVAssetWriter.h:

使用电影片段时,写入意外中断的部分写入资产可以成功打开并播放至指定时间间隔的倍数。

于 2012-04-28T22:58:02.567 回答