7

MPEG2 TS ファイルがあり、各画像フレームから PTS 情報を抽出することに関心があります。PTSはマーカー3ビットを含む33ビットで記述されていることは知っています。しかし、このビットフィールドをよりわかりやすい形式 (秒、ミリ秒) に変換する方法がわかりません。誰でも私を助けてくれませんか

4

2 に答える 2

18

MPEG2 トランスポート ストリーム クロック (PCR、PTS、DTS) はすべて 1/90000 秒単位です。PTS と DTS には、スキップする必要がある 3 つのマーカー ビットがあります。パターンは常に (最上位ビットから最下位ビットまで) 3 ビット、マーカー、15 ビット、マーカー、15 ビット、マーカーです。マーカーは 1 に等しくなければなりません。C では、マーカーを削除すると次のようになります。

uint64_t v; // this is a 64bit integer, lowest 36 bits contain a timestamp with markers
uint64_t pts = 0;
pts |= (v >> 3) & (0x0007 << 30); // top 3 bits, shifted left by 3, other bits zeroed out
pts |= (v >> 2) & (0x7fff << 15); // middle 15 bits
pts |= (v >> 1) & (0x7fff <<  0); // bottom 15 bits
// pts now has correct timestamp without markers in lowest 33 bits 

また、9 ビットの拡張フィールドもあり、拡張が最下位ビットである 42 ビット整数を形成します。ベース+エクステンションの単位は1/27000000秒です。多くの実装では、拡張子はすべてゼロのままです。

于 2012-11-30T13:44:02.477 に答える
7

24 時間/日 * 60 分/時間 * 60 秒/分 * 90k/秒 (クロック) = 7962624000、これを表すには 33 ビットが必要です。この情報を使用して、時計から時間を抽出できます。

于 2013-05-16T23:59:27.777 に答える