2

AC3 オーディオをデコードするために、directshow オーディオ デコーダ フィルタを開発しています。フィルターはライブ グラフで使用され、TS マルチキャストをデコードします。demuxer (mainconcept) は、分離されたオーディオ データを提供しますが、サンプルのタイムスタンプは提供しません。

オーディオの正しいタイムスタンプを取得/計算するにはどうすればよいですか?

4

2 に答える 2

2

このフォーラムの投稿を見つけました:

http://www.ureader.com/msg/14712447.aspx

その中で、メンバは、形式 (サンプル レート、チャネル数、サンプルあたりのビット数) が与えられると、オーディオのタイムスタンプを計算するための次の式を提供します。

PCM オーディオの場合、duration_in_secs = 8 * buffer_size / wBitsPerSample / nChannels / nSamplesPerSec または duration_in_secs = buffer_size / nAvgBytesPerSec (PCM オーディオの場合、nAvgBytesPerSec = wBitsPerSample * nChannels * nSamplesPerSec / 8 であるため)。

追加する必要があるのは、ストリーム内の現在のサンプル番号を示す追跡変数だけです。これを使用して、線形ストリーミングを行うときに開始時間と終了時間を期間 (duration_in_secs) だけオフセットできます。シーク操作の場合、もちろん、ストリームへのサンプル数を知るか計算する必要があります。

DirectShow のタイムスタンプの単位は、REFERENCE_TIME、長整数、または Int64 として入力されることを忘れないでください。各単位は 100 ナノ秒に相当します。これが、REFERENCE_TIME 変数で 10,000,000 が 1 秒に等しいため、ビデオ フィルターで値 10,000,000 を関連するフレーム/秒 (FPS) 数で割って各フレームのタイムスタンプを計算する理由です。

于 2011-10-27T03:54:33.527 に答える
1

各 AC-3 フレームには、6 * 256サンプルのデータが埋め込まれます。サンプリング レートは、32 kHz、44.1 kHz、または 48 kHz です (AC-3 仕様のデジタル オーディオ圧縮規格 (AC-3、E-AC-3) で定義)。フレーム自体にはタイムスタンプがないため、連続ストリームとインクリメント タイムスタンプをそれぞれ想定する必要があります。ソースがライブであると述べたように、データ不足のタイムスタンプを再調整する必要があるかもしれません。

各 AC-3 フレームは固定長 (ビットストリーム ヘッダーから識別できます) であるため、デマルチプレクサが 1 つの AC-3 フレームを提供しているか、バッチでいくつかのフレームを提供しているかを確認することもできます。

于 2011-10-27T05:59:20.500 に答える