.mp4のファイル構造をバイナリから見てみる【YouTubeのセグメントファイルの仕組み】
MP4のファイル構造はググるとqiitaですぐ見つかりますね。
ここではMP4ファイルを実際に見てみたときの覚え書きを残すということで。
MP4のファイル構造
を参考にしながらMP4を見ていきます。
MP4ではAtomという単位でデータが書かれているようです。
(上のサイトにはBOXが単位と書いてありますが、そのBOXをAtomというらしい)
4バイト Atomのサイズ(この4バイトも含む)
4バイト Atomの名前(type)
サイズ 中身
この中身の中にさらにAtomがある場合もあるみたいです。
そしてサイズが4バイトで収まらない位めっちゃ大きいときはAtomのサイズを表す最初の4バイトに1が入っていて、名前の後に8バイトでサイズが書かれるらしい。
あとはAtomの種類がいろいろあるみたいですが、実際に見ながら調べてみようと思います。
こんな感じの構造らしいです。実際に見る
YouTubeで動画を見たときの一番最初のセグメントファイルを見ると上図のようなデータが得られました。
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のセグメントファイルは一番最初のもの以外は単体では再生できなかったのですが、その理由がこのようにヘッダーが欠けているというわけでした。
最初のセグメントに次のセグメントをくっつけて再生するとちゃんとその分再生されました。
コメント
0 件のコメント :
コメントを投稿