2016-12-08 7 views
0

AVAssetWriter,AVCaptureSession,AVCaptureOutputおよびAVAssetWriterInputでビデオをキャプチャしようとしています。仕上げ書き込みのためAVAssetWriterでキャプチャされたビデオの再生時間がゼロ

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 


    if (self.assetWriter.status != AVAssetWriterStatusWriting) { 

     CMTime startTime = CMSampleBufferGetPresentationTimeStamp(sampleBuffer); 

     [self.assetWriter startWriting]; 

     [self.assetWriter startSessionAtSourceTime:startTime]; 
    } 
    if ([captureOutput isKindOfClass:AVCaptureVideoDataOutput.class] && self.videoWriterInput.isReadyForMoreMediaData) { 

     [self.videoWriterInput appendSampleBuffer:sampleBuffer]; 
    } 
    else if ([captureOutput isKindOfClass:AVCaptureAudioDataOutput.class] && self.audioWriterInput.isReadyForMoreMediaData) { 

     [self.audioWriterInput appendSampleBuffer:sampleBuffer]; 
    } 
} 

と方法:

- (void)finishCurrentWriting { 

    [self.videoWriterInput markAsFinished]; 
    [self.audioWriterInput markAsFinished]; 

    __weak ViewController *weakSelf = self; 

    [self.assetWriter finishWritingWithCompletionHandler:^{ 

     dispatch_async(dispatch_get_main_queue(), ^{ 

      [weakSelf runVideo]; 
     }); 
    }]; 
} 

私は、ファイルへの書き込みビデオを終了するよ、私はね、私はバッファを追加しているのはここ

AVCaptureOutputのためにデリゲートメソッドであります MPMoviePlayerControllerで再生しようとしています。ファイルはかなりのサイズを持っているためデータが利用可能ですが、何らかの理由でビデオの再生時間がゼロになっています。私は間違って何をしていますか?

repositoryをテストコードで追加しました。これはHLSストリーミングのためのものです。今のところ、15秒のビデオを作成し、それをプレイヤーの画面の下部に表示する必要があります(現在はプレーヤーは黒で、ビデオの継続時間は0です)。

答えて

0

終了したら必ず[AVAssetWriter finishWritingWithCompletionHandler:]に電話してください。

startSessionAtSourceTimeには、受信した最初のバッファのプレゼンテーションタイムスタンプが必要です。

[self.assetWriter endSessionAtSourceTime:kCMTimeZero]; を削除できます。

+0

...長い記録0秒を作り、ゼロにセッション終了時間を設定していますか? –

+0

いくつかの提案が追加されました –

+0

私のコードは更新されましたが、それでも私にとってはうまくいきませんでした –

0
[self.assetWriter endSessionAtSourceTime:kCMTimeZero]; 

あなたはより多くの情報、他の提案と質問を更新しました

+0

を追加しました。私は、ビデオの長さでNSTimeIntervalの値を持っていると言います。 –

+0

これはあなたのfpsと期間によって異なります。 [ここでいくつかの説明を参照してください](http://stackoverflow.com/a/13001917/312312)また[ここ](http://stackoverflow.com/questions/4001755/trying-to-understand-cmtime-and- cmtimemake) – Lefteris

+0

私のコードは更新されましたが、まだ動作しませんでした –

関連する問題