[MPEG-DASH] Fragmented MP4のファイル構造


はじめに

MPEG-DASHのセグメントファイル(Fragmented MP4)についてファイル構造を紹介します。

MP4

  • Moving Picture Experts Group(MPEG)で規格化
  • 国際標準機関 ISO/IEC で 14496-14 として標準化されている
  • AppleのQuickTimeを流用したもの
  • BOX(ATOM)と呼ばれるバイナリブロックから構成される

MP4は、MPEG-4の1つで映像・音声の記録に用いられているフォーマットです。もともとはMPEG-4動画を再生するためのフォーマットでありましたが、MPEG-4動画だけでなく、様々な映像/音声コーデックに対応しています。
MP4はBOXと呼ばれるバイナリブロックから構成されています。BOXは木構造になっています。このBOXは、AppleのQuickTimeがベースに作られたため、ATOMとも呼ばれることがあります。

BOX

  • BoxType
    • 4文字のASCIIで表される型を持っている
  • BoxSize
    • 4バイト(32bit)の長さ情報を持っている。
    • 子ノードのBOXの長さを含む(ツリー構造)
  • BoxData
    • バイナリデータ

BOXは、BoxTypeBoxSizeBoxDataの3つから構成されています。BOXの種類はBoxTypeで表されます。

BOXの種類

  • ftyp (FileTypeBox)
  • moov (MovieBox)
    • メディア毎のヘッダ情報(サイズ、再生時間、etc.)などのメタデータが格納されている
  • mdat (MovieDataBox)
    • メディアデータ自体が格納されている

上記以外にも、iods (ObjectDescriptorBox)、mvhd (MovieHeaderBox)、mvex (MovieExtendsBox)、trak (TrackBox)などがあります。

BOXのダンプ方法

実行例
MP4Box -std -diso Bullfinch.mp4 > output.xml
出力例
<?xml version="1.0" encoding="UTF-8"?>
<!--MP4Box dump trace-->
<IsoMediaFile xmlns="urn:mpeg:isobmff:schema:file:2016" Name="Bullfinch.mp4">
<FileTypeBox Size="32" Type="ftyp" Specification="p12" Container="file" MajorBrand="isom" MinorVersion="512">
<BrandEntry AlternateBrand="isom"/>
<BrandEntry AlternateBrand="iso2"/>
<BrandEntry AlternateBrand="avc1"/>
<BrandEntry AlternateBrand="mp41"/>
</FileTypeBox>
...

MP4Boxというソフトウェアを使うと、MP4のBOX構造をXML形式にダンプすることができます。

MP4の情報取得

実行例
ffprobe -i Bullfinch.mp4
出力例
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf56.4.101
  Duration: 00:00:14.44, start: 0.000000, bitrate: 4237 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 4106 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 129 kb/s (default)
    Metadata:
      handler_name    : SoundHandler

FFmpegというソフトウェアに同梱されているffprobを使うと、MP4のコーデックや再生時間などの情報を取得することができます。

Fragmented MP4

  • 国際標準機関 ISO/IEC で 14496-12 として標準化されている
  • フラグメント
    • Fragmented MP4 で分割したもの
  • セグメント
    • MPEG-DASHで使用されているメディアファイルを分割したもの
    • 1つまたは複数のフラグメントから構成される

Fragmented MP4では、1つの「初期セグメントファイル」と複数の「セグメントファイル」に分かれた構造になります。MPEG-DASHHLSで扱うメディアファイルは、Fragmented MP4である必要があります。

おわりに

今回、Fragmented MP4について纏めました。
メディアファイルの作成方法や再生方法については別の投稿で紹介していますので
是非ご覧ください。ありがとうございました。

関連リンク

参考リンク

以上です。