Skip to content

MP4 Sample, Chunk, Table

uupaa edited this page Sep 11, 2018 · 1 revision

MP4 Sample, Chunk, Table

MP4 Box 構造から、ビデオとオーディオの切れ目を知るためには、stsc と stco を参照します。 さらに stsz の内容からフレームごとのデータの位置とサイズを知る事ができます。 再生時にビデオとオーディオの同期を取るには stts を参照してビデオの各フレーム、オーディオフレーム(格納単位)ごとの再生時間、さらに再生すべき時刻を取得します。

  • Sample
    • Sample は 1つのピクチャを構成する最小の単位のことです
    • IDR, Iピクチャなどの KeyFrame を構成する AccessUnit が含まれています
    • Sample のサイズ, 表示時刻などのヘッダ情報は、moov に格納されます
    • Sample のデータ(Stream)は mdat に格納されます
    • MP4 においては映像のヘッダとデータは別々の場所に格納されます
  • Chunk は複数の Sample をグループとしてまとめた単位のことです。
    • Chunk のデコード方法は stsd (Sample Description) で定義します
    • Sample Description は Chunk のデコード方法を記したもので、avc1avcC を総称したものです
  • avc1
    • avc1 にはピクチャを復元するために必要となる width, heightframe_count` が記載されています
  • avcC
    • avcC にはピクチャを復元するために必要となる SPS と PPS が格納されています
  • stts はサンプルの再生時間のリストです
  • stco はチャンクがファイルの何処に配置されているか(offset)のリストです
    • stco.chunk_offset に指定する値はファイルの先頭からのオフセット値ではなくmdat + 4 byte からのオフセット値です
    • stco.chunk_offset = 0 なら mdat の先頭にチャンクがあるという意味になります
 mdat Stream

| mdat         | | stsc         | | stsz         | | stsd          |

+--------------+ +--------------+ +--------------+ +---------------+
|              | |              | | Sample 1     | | Sample        |
|              | |              | +--------------+ | Description   |
|              | | Chunk 1      | | Sample 2     | |               |
|              | |              | +--------------+ |               |
|              | |              | | Sample 3     | |               |
|              | +--------------+ +--------------+ +---------------+
|              | +--------------+ +--------------+ +---------------+
|              | |              | | Sample 4     | | Sample        |
|              | |              | +--------------+ | Description   |
|              | | Chunk 2      | | Sample 5     | |               |
|              | |              | +--------------+ |               |
|              | |              | | Sample 6     | |               |
|              | +--------------+ +--------------+ +---------------+
|              | +--------------+ +--------------+ +---------------+
|              | | Chunk 3      | | Sample 7     | | Description   |
|              | +--------------+ +--------------+ +---------------+
|              | +--------------+ +--------------+ +---------------+
|              | | Chunk 4      | | Sample 8     | | Description   |
+--------------+ +--------------+ +--------------+ +---------------+

Sample Description: width, height, frame_count, profile, level, SPS, PPS