2013年12月19日木曜日

MPEG4コンテナのBox構造(Atom)について

MPEG4はBoxと呼ばれる単位を入れ子にした構造で表現される。
QuickTime時代の名残でAtomと呼ばれることもある。

入れ子と言ってもファイル中に親子関係が記述されているわけではなく
解析する側が仕様から各Boxの関係を把握して解析する。
Boxのヘッダー構造は以下であるとISO/IEC 14496-12で定義されている。

aligned(8) class Box (unsigned int(32) boxtype, optional unsigned int(8)[16] extended_type) {
    unsigned int(32) size;
    unsigned int(32) type = boxtype;
    if (size==1) {
        unsigned int(64) largesize;
    } else if (size==0) {
        // box extends to end of file
    }
    if (boxtype==‘uuid’) {
        unsigned int(8)[16] usertype = extended_type;
    }
}
基本的には頭4バイトがサイズ情報(この4バイトも含むバイト数)、次の4バイトにBoxの種類を識別するためのboxtype、ヘッダーの後はペイロード部分となる。
The standard boxes all use compact types
(32-bit) and most boxes will use the compact (32-bit) size.
仕様には上記のように書かれているので基本的には32bit空間で表せるサイズがBoxサイズの上限である。 ただし
 Typically only the Media Data Box(es) need the 64-bit size.
動画データを格納するMedia Dataボックスに限ってはサイズが大きいこともあり64bit空間がサイズ上限となる。64bitに統一しても良かったんじゃ?と思わないでもない。サイズ情報はヘッダーも含んだサイズである。

boxtypeはftypボックスならASCIIコードで直接0x66(f),0x74(t),0x79(y),0x70(p)と表現される。バイナリエディタで見たときに分かりやすい。boxtype=uuidの場合はうんたらと書いてあるがuuidはベンダ固有のオプション定義に使うBoxなので読み飛ばして構わない。中身が独自定義なのだから部外者には把握しようがない。


0 件のコメント:

コメントを投稿