我试图捕获视频与AVAssetWriter
,AVCaptureSession
, AVCaptureOutput
和AVAssetWriterInput
。AVAssetWriter捕获的视频具有持续时间为零
这里是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)。
更多信息更新的问题,任何其他建议? –
增加了一些建议 –
更新了我的代码,但仍然没有为我工作 –