1

私は AVAssetWriter AVCaptureSession を使用してビデオを記録します。うまく機能します。UIApplicationDidEnterBackgroundNotification と CTCallCenter.callEventHandler を使用して、アプリケーションがバックグラウンドになるか、呼び出しが着信したときに記録を停止します。UIApplicationDidEnterBackgroundNotification はうまく機能します。ここにAVAssetWriter.errorがあります:

Error Domain=AVFoundationErrorDomain Code=-11800 "この操作は完了しました" 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 に答える