AVAssetWriter
,AVCaptureSession
,AVCaptureOutput
およびAVAssetWriterInput
でビデオをキャプチャしようとしています。仕上げ書き込みのためAVAssetWriterでキャプチャされたビデオの再生時間がゼロ
- (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];
});
}];
}
私は、ファイルへの書き込みビデオを終了するよ、私はね、私はバッファを追加しているのはここ
はAVCaptureOutput
のためにデリゲートメソッドであります
MPMoviePlayerController
で再生しようとしています。ファイルはかなりのサイズを持っているためデータが利用可能ですが、何らかの理由でビデオの再生時間がゼロになっています。私は間違って何をしていますか?
repositoryをテストコードで追加しました。これはHLSストリーミングのためのものです。今のところ、15秒のビデオを作成し、それをプレイヤーの画面の下部に表示する必要があります(現在はプレーヤーは黒で、ビデオの継続時間は0です)。
...長い記録0秒を作り、ゼロにセッション終了時間を設定していますか? –
いくつかの提案が追加されました –
私のコードは更新されましたが、それでも私にとってはうまくいきませんでした –