-
Notifications
You must be signed in to change notification settings - Fork 9
MP4 Sample, Chunk, Table
uupaa edited this page Sep 11, 2018
·
1 revision
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 のデコード方法を記したもので、
avc1
とavcC
を総称したものです
- Chunk のデコード方法は
-
avc1
-
avc1
にはピクチャを復元するために必要となるwidth,
heightと
frame_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