DACエンジニアブログ:アドテクゑびす界

DACのエンジニアやマーケター、アナリストが執筆するアドテクの技術系ブログです。

profile?atom?mp4のよくわからないあれこれ(atom編)

どうもこんにちわ。

最近は長尺の動画広告が増えてきましたね。 youtubeでもインストリーム広告で1分以上の長尺の動画広告が流れているのをよく見ます。 (※インストリーム広告:動画コンテンツの中や前後に差し込まれる動画広告)

そうなると、ファイルサイズが大きくなるためファイルをダウンロードしながら再生する「プログレッシブダウンロード」が必須となってきます。

また、インストリームに限らず弊社のインリード広告のようなアウトストリーム広告でも再生開始までの時間を短縮するべく、プログレッシブダウンロードは必須の要素となります。 (※アウトストリーム広告:動画コンテンツのとは関係なく、ページ内で再生される動画広告)

となるとmp4入稿の際に「moov atomをファイルの先頭に設置してください」なんて言われることがあるのですが、恐らく「moov atom? なんだそれ?」ということが多いのではないかと思います。

そこで、今回はmp4でのプログレッシブダウンロードに必要なmoov atomとはなんぞや?というテーマで記事を書きたいと思います。

mp4の構造

そもそもの話ですが、mp4はboxというものから構成されています。

boxはmp4の元になったQuickTimeファイルフォーマットに倣いatomとも呼ばれ、代表的なatomは以下の3つとなります。

  • ftyp:ファイルタイプが記述されたatom
  • moov:メディア毎のヘッダ情報(サイズ、再生時間、etc.)などのメタデータが格納されたatom
  • mdat:ビデオやオーディオデータ自体が格納されたatom

[caption id="attachment_2554" align="aligncenter" width="300"]スクリーンショット 2015-11-01 23.21.30 mp4を構成するatomのイメージ[/caption]

これらのatomはさらにatomから構成され、木構造になっています。

mp4の解析ができるMP4Readerで見るとこのようになっています。

[caption id="attachment_2559" align="aligncenter" width="1273"]mp4reader_sample MP4Readerでmp4ファイルの構造を解析した結果[/caption]

 

atomの順序

各atomの順序は規格上どうなっていても問題ないようで、各メタデータを含むmoovはデータ本体を持つmdatができた後でしか作れないため、mdatよりも後ろに配置されることも多くあります。

しかし、mp4ファイルは先頭から順に読まれるので、データ本体であるmdatがメータデータのmoovよりも前にある場合は、mdat部分が読み込まれてからでないとメタデータを参照して、動画の再生を開始することができません。

そうなると、動画再生開始までに時間がかかるため、メタデータであるmoovをmdatよりも前にして再エンコードする必要があります。

これをfast startweb optimizedということがあります。

例えば、HandBrakeではweb optimazedというチェックボックスがあるので、ここにチェックを入れて再エンコードすることができます。

[caption id="attachment_2562" align="aligncenter" width="1894"]スクリーンショット 2015-11-03 23.05.18 HandBrakeでのweb optimized設定[/caption]

 

その他にはffmpegでエンコードする場合は、-movflags +faststart オプションをつけることで同様に対応可能です。

また、使ったことはないのですがfast startにしてくれる、MP4 Fast Startというツールもあるようです。

ただ、それぞれのツールを使う際はバックアップを取るなどして、自己責任の上でご利用をお願いします。

ストリーミングとプログレッシブダウンロードの違い

ちなみにですが、プログレッシブダウンロードはストリーミングと全く違います。

wikipediaにもあるように

ストリーミングの場合は再生後そのデータを破棄するように作られていることが多い(保存することができるクライアントも存在する)が、HTTPによるプログレッシブダウンロードの場合は破棄せず一時ファイルとして保存しつづけ、キャッシュが残っている限り次の再生時にもキャッシュが使われる。

そもそも、ストリーミングとは違いプログレッシブはデータはキャッシュに残ります。

ただ、プログレッシブはストリーミングサーバーは不要ということもあり、YouTubeなんかでも使われていたりします。

また重要な違いとしては、ストリーミングはSkypeやUstreamのようにリアルタイムでのデータ送信で利用されており、データが欠損した場合、動画の該当部分は飛んでしまうのです。

しかし、プログレッシブはあくまでダウンロードのため、完全な動画を視聴することができます。 (YouTubeで動画を見てたけど通信環境のせいで飛んだりはしませんからね)

最後に

動画については正直まだまだわからないことが多いのですが、本記事が誰かの参考になれば幸いです。

関連記事

profile?atom?mp4のよくわからないあれこれ(profile編)