あるべるのIT関連メモ

素人エンジニアが何かするときに困ったものなどを参考程度にメモっておこうかと

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.264AACなど圧縮されているものが多い。圧縮されているということはデータ自体は可変長であり、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