0

libav のラッパーである ffms2(ffmpegsource) を使用して、ファイルからビデオとオーディオのフレームを取得しています。ビデオのデコードは正常に機能しています。ただし、オーディオのデコードでいくつかの問題に直面しています。FFMS2 はFFMS_GetAudio(FFMS_AudioSource *A, void *Buf, int64_t Start, int64_t Count, FFMS_ErrorInfo *ErrorInfo);、デコードされたバッファを取得するための単純な関数 API を提供します。デコードされたデータは、ユーザーが提供するバッファに返されます。

単一チャネルの場合、データの解釈は、ユーザー バッファの最初の位置から始まるデータ バイトで簡単に行われます。ただし、2 チャンネルになると、FFMS_GetAudioProperties によって返されるサンプル形式に応じて、デコードされたデータが平面またはインターリーブされる可能性が 2 つあります。私の場合、サンプル形式は常に平面です。つまり、デコードされたデータは、データ [0] とデータ [1] の 2 つの別個のデータ プレーンになります。これは libav/ffmpeg と portaudio によって説明されており、平面データは 2 つの別個のデータ プレーンにあると見なされます。

ただし、FFMS_GetAudio はユーザーから単一のバッファーを取得するだけです。したがって、平面データの場合、data[0] = buf、data[1] = buf + offset と仮定できます。ここで、offset は、FFMS_GetAudio によって返されるバッファーの長さの半分です。

FFMS は、この解釈に関する適切な文書を提供していません。これについてより多くの情報を提供できる人がいれば、それは大きな助けになるでしょう。

4

1 に答える 1

1

FFMS2 は現在、平面オーディオの出力をサポートしていません。最近のリビジョン (2.17 以降) は自動的に平面オーディオをインターリーブしますが、libav が平面オーディオのサポートを追加する前の古いバージョンは、最初の平面以降のすべての平面を単純に無視します。

于 2013-05-01T20:04:31.613 に答える