当CTCallStateIncoming时,AVAssetWriter完成写入失败

时间:2012-04-28 07:31:56

标签: recording avassetwriter

我使用AVAssetWriter AVCaptureSession来录制视频。工作得很好。我使用UIApplicationDidEnterBackgroundNotification和CTCallCenter.callEventHandler在应用程序进入后台或来电时停止录制.UIApplicationDidEnterBackgroundNotification工作正常。但是在CTCallCenter.callEventHandler中,[AVAssetWriter finishWriting]返回不。这是AVAssetWriter.error:

错误Domain = AVFoundationErrorDomain Code = -11800“这项操作无法完成”UserInfo = 0x6c0bc20 {NSLocalizedFailureReason =发生未知错误(-12785),NSUnderlyingError = 0x6c0fc80“操作无法完成。(OSStatus错误-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工作正常。

1 个答案:

答案 0 :(得分:6)

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

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

  

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