H.264 のサンプル バッファが与えられた場合、それが表すフレームを画像として抽出する方法はありますか?
QTKit を使用してカメラからビデオをキャプチャしQTCaptureMovieFileOutput
、を出力オブジェクトとして使用しています。
デリゲート メソッドCVImageBufferRef
にパラメーターとして渡されるものに似たものが必要です。QTCaptureVideoPreviewOutput
何らかの理由で、ファイル出力にCVImageBufferRef
.
私が取得するのは QTSampleBuffer です。圧縮オプションで設定したため、H.264 サンプルが含まれています。
iPhone では、CoreMedia と AVFoundation を使用してCVImageBufferRef
、与えられた からを作成できることを確認しました (これは、取得できる限り にCMSampleBufferRef
近いと思います) - しかし、これは iPhone ではなく Mac です。QTSampleBuffer
Mac には CoreMedia も AVFoundation もありません。同じタスクを実行する方法が見当たりません。
私が必要としているのは、Output オブジェクトのコールバックによって与えられた H.264 サンプルの現在のフレームからの画像 (CVImageBufferRef、CIImage、または NSImage であるかどうかは関係ありません) です。
拡張情報 (以下のコメントから)
元の問題に焦点を当てた関連する質問を投稿しました - QTKit を使用してビデオ サンプルのストリームを単純に再生しようとしています: Mac OS X で QTKit を使用してビデオ データのストリームを再生する
CVImageBufferRef
可能ではないように思われるため、画像データをスケーリング、圧縮、変換NSImage
し、ネットワーク経由でピアに送信することにより、フレームを画像として取得し、ビデオの外観を作成しようとしました。
QTCapturePreviewVideoOutput
(または解凍) を使用して、圧縮されていないフレーム画像を の形式で取得できますCVImageBufferRef
。
ただし、これらの画像参照は、使用する前に圧縮、スケーリング、および への変換を行う必要があるNSImage
ため、 を使用してフレームワークから既にスケーリングおよび圧縮されたフレームを取得しようとしますQTCaptureMovieFileOutput
(これにより、前に圧縮と画像サイズを設定できます)。キャプチャを開始する)、CPU を殺す高価な圧縮、スケーリング、および変換操作を実行する必要がなくなります。