MP4(コンテナ) - 2.trak
前回の記事でMP4はBox(またはAtom)要素からなる木構造を持つということでBoxの定義自体について説明した。 albel06.hatenablog.com
今回はmp4ファイルの大枠のコンテナ構成を記述する。
chunk
MP4コンテナを説明する前に、メディアデータの記録方法について説明する。MP4に記録される動画や音声データは、全体のデータを一定の時間のデータに分割したchunkという状態で記録される。下記のようにvideoのデータとaudioのデータが交互に順番に記録される。1 chunkの大きさに規定はなく、メーカーやソフトによりまちまちである。
|video|audio|video|audio|...|video|audio|
moov Box
メタデータを記録するBox。ファイルのトップレベルに置かれ、通常ファイルの先頭の方か末尾の方に記録されるが、実際に記録する位置に関する決まりはない。ただしストリーミング配信するためにはvideoやaudioのメディアデータよりも前に記録されている必要がある(理由は後述)。
Sample.mp4 ├ ftyp ├ moov │ ├ mvhd │ ├ trak │ └ trak └ mdat
trak Box
1つのtrackに関する情報を記録するBox。videoやaudioのメディアデータがそれぞれ1 trackとなり、通常の動画ファイルではmoov以下にtrak(video)とtrak(audio)と2つのtrak Boxが記録される。
videoやaudioのデータはH.264やAACなど圧縮されているものが多い。圧縮されているということはデータ自体は可変長であり、chunkの大きさも一定ではなくなる。trak Boxにはvideoやaudioのメディアデータがどのように記録されているかを記述し、再生する側はtrakの情報からメディアデータをシークし再生する。
trak自体はmoov Boxの下に記録されており、上記のとおりtrakをparseして初めてvideoやaudioのデコードが可能になるため、ストリーミング配信をするためにはmoov(の下のtrak)がファイルの先頭に配置され、一番最初にダウンロードされる必要がある。
先にあげたコンテナ構成にtrak以下を少し追記したものが下記で、さらにmdia以下にchunkの詳細が記述されていくのだがそれはまた次回に。。
Sample.mp4 ├ ftyp ├ moov │ ├ mvhd │ ├ trak │ │ ├ tkhd │ │ ├ edts │ │ └ mdia │ └ trak └ mdat