2012-04-28 71 views
1

當我使用AVAssetWriter AVCaptureSession錄製video.it工作well.I使用UIApplicationDidEnterBackgroundNotification時和CTCallCenter.callEventHandler當應用進入後臺或打電話來in.UIApplicationDidEnterBackgroundNotification工作well.But在CTCallCenter.callEventHandler停止記錄, [AVAssetWriter finishWriting]返回NO。這裏是AVAssetWriter.error:AVAssetWriter finishWriting失敗CTCallStateIncoming

錯誤域= AVFoundationErrorDomain代碼= -11800 「這項操作無法完成」 的UserInfo = 0x6c0bc20 {NSLocalizedFailureReason =發生未知錯誤(-12785),NSUnderlyingError = 0x6c0fc80「該操作不能完成(OSStatus錯誤-12785)」,NSLocalizedDescription =這項操作無法完成}

看來AVAssetWriter立即失敗當一個呼叫coming.The記錄的文件沒有完成,不能played.Can有人告訴我如何用它做?

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做工精細。

回答

5

電話通話造成干擾AudioSession,所以你可能會發現越早,如果你使用AudioSession回調。雖然我懷疑你的AVAssetWriter可能已經在此刻被炒了。

設置AVAssetWriter.movieFragmentInterval應該幫助減少你的損失 - 從AVAssetWriter.h:

When movie fragments are used, a partially written asset whose writing is unexpectedly interrupted can be successfully opened and played up to multiples of the specified time interval.

+0

我在我的代碼中加入這一行:\t \t _videoWriter.movi​​eFragmentInterval = CMTimeMakeWithSeconds(1.0,1000000000); 和它的作品fine.Although finishWriting返回NO,但電影文件可以played.Thank你。 – user1362527 2012-05-02 01:57:32

+0

這是一個非常小的片段間隔,我個人會嘗試一些更大的,比如1s或更多。附:接受回答您的問題的答案是一種很好的做法。 – 2012-05-02 08:43:19