我試圖捕獲視頻與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)。
更多信息更新的問題,任何其他建議? –
增加了一些建議 –
更新了我的代碼,但仍然沒有爲我工作 –