Я пытаюсь записать видео с 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, поэтому на данный момент он должен сделать 15-секундное видео и после этого отобразить его в проигрывателе в нижней части экрана (теперь игрок просто черный, а длительность видео - 0).
Обновленный вопрос с дополнительной информацией, любые другие предложения? –
добавил некоторые предложения –
Обновил мой код, но все еще не работал для меня –