MediaPlayerを作ろうMW編.3:データの仕分け人!Demuxerの華麗なる仕事

MediaPlayer

はじめに:Demuxerはパイプラインの「交通整理係」

こんにちは!前回は、データの旅の始まりであるDataSourceについて詳しく見てきました。ファイルから、ネットワークから、メモリから、様々な場所にあるデータを抽象化して、パイプラインに流し込む役割でしたね。

今回は、そのDataSourceから流れてきたデータを受け取り、次のステップへと送り出すDemuxer(デマルチプレクサ)に焦点を当てます。

Demuxerは、例えるなら「交通整理係」であり、「仕分け人」です。

DataSourceから届くデータは、映像、音声、字幕など、すべてがごちゃ混ぜになった「コンテナ」という大きな箱に入っています。Demuxerの仕事は、この箱を開けて、中身を種類ごとに正しく仕分け、次の担当者(Decoder)に渡すことです。

1.コンテナフォーマットという「大きな箱」

 

動画ファイル(MP4、MKV、AVIなど)は、単なる映像データではありません。これらはすべてコンテナフォーマットと呼ばれ、以下の要素を一つにまとめた「箱」のようなものです。

    1. 映像ストリーム: 圧縮された映像データ(例: H.264, H.265)
    2. 音声ストリーム: 圧縮された音声データ(例: AAC, MP3)
    3. メタデータ: ファイルの情報(作成日時、タイトル、著作権情報など)
    4. 同期情報: 映像と音声のタイミングを合わせるための情報(PTS/DTSなど)

Demuxerは、まずこのコンテナフォーマットのヘッダー情報を読み取り、この箱が「MP4」なのか「MKV」なのかを識別します。

2.Demuxerの3つの重要な仕事

Demuxerの仕事は、単にデータを分けるだけではありません。次の3つの重要な役割を担っています。

2.1.ストリームの分離(Demultiplexing)

これがDemuxerの最も主要な仕事です。

DataSourceから流れてくるデータは、映像の断片、音声の断片、そしてまた映像の断片…というように、時間軸に沿って順番に並んでいます。Demuxerは、この流れの中から、「これは映像のデータだ」「これは音声のデータだ」と識別し、それぞれのストリーム(流れ)に分離します。

例えるなら、一本のベルトコンベアに流れてくるリンゴとミカンを、それぞれの専用レーンに仕分ける作業です。

2.2.メタデータの抽出

コンテナフォーマットには、動画の再生には直接関係ないけれど、非常に重要な情報が含まれています。それがメタデータです。

  • 動画の解像度(1920×1080など)
  • フレームレート(30fpsなど)
  • 使用されているコーデック(H.264, AACなど)
  • 再生時間タイトル

Demuxerはこれらの情報を抽出し、Player(制御役)に渡します。Playerは、この情報を使って、適切なDecoder(復号化器)を準備したり、再生バーの長さを決めたりします。

2.3.同期情報の管理(PTS/DTS)

動画再生において、「音ズレ」は致命的です。Demuxerは、この音ズレを防ぐための同期情報を管理します。

  • PTS (Presentation Time Stamp): 「このフレームは、動画の開始から XX秒後 に表示してね!」という、表示時刻のタイムスタンプです。Rendererは、このPTSを頼りに、映像と音声を正しいタイミングで再生します。
  • DTS (Decode Time Stamp): 「このフレームは、動画の開始から YY秒後 にデコード(復号化)してね!」という、復号化時刻のタイムスタンプです。通常、PTSとDTSは同じですが、一部の圧縮技術(例: Bフレーム)では、表示順とデコード順が異なるため、このDTSが必要になります。

Demuxerは、分離した映像と音声の各フレームに、このPTS/DTSを正確に付与します。これにより、後続のDecoderやRendererは、このタイムスタンプを頼りに、映像と音声を正確なタイミングで同期させることができるのです。

3.DemuxerからDecoderへ

Demuxerによって分離され、PTS/DTSが付与された映像と音声のデータは、それぞれのDecoder(復号化器)へと送られます。

Demuxerの仕事はここまでです。次に待っているDecoderは、この圧縮されたデータを、実際に画面に表示できる「生データ」に戻すという、また別の重要な役割を担っています。

まとめ:Demuxerは縁の下の力持ち

Demuxerは、派手な処理(映像を美しくしたり、音を出したり)はしませんが、パイプライン全体がスムーズに機能するための土台を作る、非常に重要な「縁の下の力持ち」であることが分かりました。

次回は、Demuxerから送られてきた圧縮データを、私たちが目で見たり耳で聞いたりできる形に戻すDecoder(復号化器)の仕事に迫ります。お楽しみに!

コメント

タイトルとURLをコピーしました