web-dev-qa-db-ja.com

同期情報はコンテナ形式でどこに保存されますか?

複数のオーディオストリーム、ビデオストリーム、字幕が1つのコンテナに保存されます。これらは一緒に再生されます。

同期情報はコンテナ形式でどこに保存されますか?メタデータまたは他の場所で?

4
Omid Yaghoubi

コンテナ自体に依存します。コンテナが異なれば、同期の処理も異なります。違いは、データ自体の保存方法にあります。

たとえば、コンテナは、同時に提示する必要のあるパーツのみを格納するか、同期ポイントを時々挿入するか、すべてのデータチャンクにタイムスタンプを付けるかを選択できます。

一部のコンテナは時間ベースにすることができますが、他のコンテナは単なるデータのストリームです。もちろん、後者にはパフォーマンス上の利点がありますが、同期がオフになる可能性があり、特定のインデックスがないとシークはできません(AVIのように)。


たとえば、非常に初期のコンテナ形式である MPEG-2トランスポートストリーム は、パケット化されたエレメンタリストリームを使用してデータを格納します。たとえば、ビデオ用に1つ、オーディオ用に1つのパケット化されたストリームがあります。それらを同期するために、Program ClockReferenceフィールドがあります。

デコーダが関連するビデオに一致するオーディオトラックなどの同期コンテンツを提示できるようにするには、少なくとも100ミリ秒ごとに1回、プログラムクロックリファレンスまたはPCRがMPEG-2トランスポートストリームパケットの適応フィールドで送信されます。 MPEG-2プログラムのPCRを使用したPIDは、関連するプログラムマップテーブルのpcr_pid値によって識別されます。 PCRの値は、適切に使用されると、デコーダーでsystem_timing_clockを生成するために使用されます。 STCデコーダーは、適切に実装されると、オーディオとビデオのエレメンタリストリームを同期するために使用される非常に正確なタイムベースを提供します。


人気のあるMP4コンテナは QuickTimeファイル形式 に基づいているため、機能の共通ベースを共有しています。その仕様は ここにあります です。同期はメタデータの一部ではなく、実際のデータ自体の一部です。詳細についてはまだ調べていません。

RTP Hint Tracks )を使用する場合、どのパケットがメディアのどのタイムスタンプに関連付けられているかを示すことにより、MP4ファイルをストリーミング用に準備できます。ヒントトラックの内容:このパケットは、thisビデオデータとthatオーディオデータで構成されています。これらはローカル再生では無視されます。しかし。


[〜#〜] avi [〜#〜]コンテナは [〜#〜] riff [〜#〜] に基づいています=。個々のデータフレームを「チャンク」に格納します。データ自体は個々のフレーム(ビデオフレーム、オーディオフレームなど)に分割できるため、フレーム長は常に同じであるため、これは可変ビットレートコンテンツでも機能します。 このドキュメント AVI形式の詳細な説明があります。同期の重要な側面は、AVIが正しく多重化されていることです。


Matroskaコンテナ はMP4などに似ています。 この図 でわかるように、これは完全にタイムコードベースです。データ自体(動画、音声など)は、クラスターに分割されてからブロックに分割されます。タイムコードは、多かれ少なかれ、プレゼンテーションのタイムスタンプのように扱われます。

ただし、混乱を避けるために言及したいことの1つは、タイムコードです。クイックアイは、クラスターごとに1つのタイムコードが表示され、次にブロック構造自体の中に別のタイムコードが表示されていることに気付くでしょう。これが機能する方法は、クラスター内のタイムコードがファイル全体に関連していることです。通常、クラスターの最初のブロックを再生する必要があるのはタイムコードです。ブロック自体のタイムコードは、クラスターのタイムコードに関連しています。たとえば、クラスター内のタイムコードが10秒に設定されていて、そのクラスター内に、クリップの12秒後に再生されることになっているブロックがあるとします。これは、ブロック内のタイムコードが2秒に設定されることを意味します


Oggコンテナ 、これは人気がない次のようになります

グループ化は、同じ物理ビットストリーム内で複数の論理ビットストリームをページごとにインターリーブする方法を定義します。グループ化は、たとえば、異なる論理ビットストリームで異なるコーデックを使用して、ビデオストリームを複数の同期されたオーディオトラックとインターリーブするために必要です。

ただし、Oggはコーデックと「時間」の概念について何も知りません。

Oggには「時間」の概念がありません。それは、順次増加する単位のない位置マーカーについてのみ知っています。アプリケーションは、コーデックAPIにアクセスしてグラニュールの位置または時間を割り当ておよび変換する上位レイヤーを介してのみ時間情報を取得できます。

2
slhck