2013年12月19日木曜日

MPEG4コンテナのftypボックスについて

boxtypeがftypでFile TYPeを意味する。
初めに断っておくが、必須フィールドである割にあまり重要なフィールドではない。
ファイル中に最初に出現するBoxである。
This box must be placed as early as possible in the file.
と定義されているのでBoxとして一番前に配置されるが「ファイルの先頭に来る」とは書いてないので注意。
もしftypボックスの前にゴミデータが付いていても読む側は読み飛ばさなければならない。
(MPEG4に限らずパーサーを作る際にファイル先頭にヘッダがあることを前提に組んじゃう人が結構いる。まあ殆どのケースではファイル先頭にあるんだろけど。)

aligned(8) class FileTypeBox extends Box(‘ftyp’) { 
    unsigned int(32) major_brand; 
    unsigned int(32) minor_version; 
    unsigned int(32) compatible_brands[]; // to end of the box 
}

major_brandは広範囲なMPEG4規格の中で例えばモバイル向けのファイルであること等をprofileとして知らせる識別子である。
別にここにデタラメを書いたところで読み込み側は処理を諦めるべきではないし、処理を切り替える必要も無い。
brandの一覧はこのサイトなどで見ることができるが大手ベンダーの自己アピールが鬱陶しいことが分かるくらいだ。
多くの場合はmp42とでもしておけばいいだろう。

minor_versionはこのフィールドを活用される事自体が無さそうだ。
現状全部0で埋めとけばいいだろう。

compatible_brandsは互換性のあるmajor_brandを複数並べられるが、
どうでもいい情報なので空欄でも構わないだろう。
TMPGEncに出力させた例ではmp42,isom,avc1の3つが定義されていた。

参考までにMP4 Readerでの解析例を載せておく。

0 件のコメント:

コメントを投稿