我使用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工作正常。
答案 0 :(得分:6)
电话会导致AudioSession
中断,因此如果您使用AudioSession
回调,可能会更快发现。虽然我怀疑你的AVAssetWriter
可能已经被炸了。
设置AVAssetWriter.movieFragmentInterval
应该有助于减少您的损失 - 来自AVAssetWriter.h:
使用电影片段时,写入的部分书写资产 意外中断可以成功打开并播放 到指定时间间隔的倍数。