MP4のファイル構造はググるとqiitaですぐ見つかりますね。

ここではMP4ファイルを実際に見てみたときの覚え書きを残すということで。 


MP4のファイル構造

MP4のファイル構造を解説 @satken2 Qiita

を参考にしながらMP4を見ていきます。

MP4ではAtomという単位でデータが書かれているようです。

(上のサイトにはBOXが単位と書いてありますが、そのBOXをAtomというらしい)

4バイト Atomのサイズ(この4バイトも含む)

4バイト Atomの名前(type)

サイズ 中身


この中身の中にさらにAtomがある場合もあるみたいです。

そしてサイズが4バイトで収まらない位めっちゃ大きいときはAtomのサイズを表す最初の4バイトに1が入っていて、名前の後に8バイトでサイズが書かれるらしい。

あとはAtomの種類がいろいろあるみたいですが、実際に見ながら調べてみようと思います。

こんな感じの構造らしいです。


実際に見る


YouTubeで動画を見たときの一番最初のセグメントファイルを見ると上図のようなデータが得られました。
青がサイズ、赤が名前、緑が中身です。
Atomについてこれを参考にしてみてみます。

ftyp part-IDとかいうやつ

moov Movie Atom。必要なコーデックや最大ビットレートなど

mvhd タイムスケールやdurationなど

mvex のってない

trex のってない

trak Trak Atom。著作権情報やQuickTimeの情報など

tkhd トラックの幅や音量など

mdia Media Atom。メディアのタイムスケールやトラック期間など

mdhd メディアのタイムスケールやdurationなど

hdlr メディアのコンポーネントについて

minf video media information atom。

dinf ビデオメディアデータの特性の定義など

dref メディアデータにアクセスする方法など

stbl Sample table atom。メディアサンプルの時間やインデックスなど

・・・


あんまりよくわかりませんが、どんな感じでatomが並んでいるのかがわかりました。


動画本体のデータはmdatというAtomにあるらしいです。

そのmdatの部分をみてみましょう。


mdatのサイズは0x2c039とあり、0xb5f+0x2c039=0x2cb98まで続きます。

しかしこのファイルの最後を見てみると

0x10efdまでしかありません。

そのため次のファイルに続いていくと思われます。

次のセグメントファイルを見てみるとAtom typeなどはなく、いきなりmdatのデータが続いている感じでした。

YouTubeのセグメントファイルは一番最初のもの以外は単体では再生できなかったのですが、その理由がこのようにヘッダーが欠けているというわけでした。

最初のセグメントに次のセグメントをくっつけて再生するとちゃんとその分再生されました。


参考

MP4 FILE FORMAT

MP4のファイル構造を解説

QuickTime File Format Specification

MP4のデータ構造