2016-12-08 44 views
0

我試圖捕獲視頻與AVAssetWriter,AVCaptureSession, AVCaptureOutputAVAssetWriterInputAVAssetWriter捕獲的視頻具有持續時間爲零

這裏是AVCaptureOutput委託方法在那裏我添加緩衝器:

- (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]; 
     }); 
    }]; 
} 

當我結束寫作視頻到文件中,我試圖通過MPMoviePlayerController播放它。數據可用,因爲文件的大小很大,但由於某些原因,視頻的持續時間爲零。我究竟做錯了什麼?

增加了帶測試代碼的repository。這是爲HLS流媒體,所以現在它應該製作15s視頻,然後在屏幕底部顯示播放器(現在播放器只是黑色,視頻持續時間爲0)。

回答

0

確保在完成後致電[AVAssetWriter finishWritingWithCompletionHandler:]

您應該打電話給startSessionAtSourceTime,其中包含您收到的第一個緩衝區的顯示時間戳。您可以刪除[self.assetWriter endSessionAtSourceTime:kCMTimeZero];

+0

更多信息更新的問題,任何其他建議? –

+0

增加了一些建議 –

+0

更新了我的代碼,但仍然沒有爲我工作 –

0
[self.assetWriter endSessionAtSourceTime:kCMTimeZero]; 

您設置會話結束時間爲零,使得記錄0秒長...

+0

我應該在那裏設置什麼?比方說,我有NSTimeInterval值與視頻持續時間。 –

+0

這取決於你的fps和持續時間。 [看看這裏的一些解釋](http://stackoverflow.com/a/13001917/312312),也[這裏](http://stackoverflow.com/questions/4001755/trying-to-understand-cmtime-and- cmtimemake) – Lefteris

+0

更新我的代碼,但仍然沒有爲我工作 –

相關問題