2016-12-08 40 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

更新我的代码,但仍然没有为我工作 –

相关问题