キャプチャしたカメラ データをファイルに保存する iOS アプリケーションを開発し、使用しました。
(void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
CMSampleBufferRef をキャプチャすると、これが H264 形式にエンコードされ、フレームは を使用してファイルに保存されますAVAssetWriter
。
サンプル ソース コードに従って、このアプリを作成しました。
ここで、保存されたビデオ フレームのタイムスタンプを取得して、新しいムービー ファイルを作成したいと考えています。このために、私は次のことをしました
ファイルを見つけて作成
AVAssestReader
し、ファイルを読み取りますCMSampleBufferRef sample = [asset_reader_output copyNextSampleBuffer]; CMSampleBufferRef buffer; while ([assestReader status] == AVAssetReaderStatusReading) { buffer = [asset_reader_output copyNextSampleBuffer]; // CMSampleBufferGetPresentationTimeStamp(buffer); CMTime presentationTimeStamp = CMSampleBufferGetPresentationTimeStamp(buffer); UInt32 timeStamp = (1000 * presentationTimeStamp.value) / presentationTimeStamp.timescale; NSLog(@"timestamp %u", (unsigned int) timeStamp); NSLog(@"reading"); // CFRelease(buffer); }
印刷された値は間違ったタイムスタンプを与え、フレームのキャプチャ時間を取得する必要があります。
フレームキャプチャのタイムスタンプを取得する方法はありますか?
タイムスタンプを取得するための回答を読みましたが、上記の質問を適切に詳しく説明していません。
アップデート:
ファイルに書き込む前にサンプルのタイムスタンプを読んだところ、xxxxx
値が得られました ( 33333.23232
)。ファイルを読み取ろうとした後、別の値が得られました。これには具体的な理由はありますか??