さて、video/audio要素はIE、Safari、Chrome、Firefox、Operaといったメジャーなブラウザの、最新バージョン全てでサポートされています。しかし再生できる動画形式はブラウザごとに異なっており、注意が必要です。
サポートされている形式の差異は、特にvideo要素の場合大きな問題となります。なぜなら現時点では、全てのブラウザによって共通でサポートされている動画形式がないため、少なくとも2つ以上の動画形式にエンコードする必要が生じているからです。
動画ファイルの構造は、圧縮された動画・音声のデータと、それを包む「コンテナ」に分けて考えることができます。一般的には、動画や音声の圧縮形式のことを「コーデック」、コンテナの形式のことを「フォーマット」と呼び分けます。本来、ブラウザによる動画形式の対応状況はフォーマットとコーデックを分けて論じるべきですが、ここでは紙面の都合上、それらをいっぺんに論じることにします。
現在、メジャーブラウザがサポートする動画フォーマット/コーデックには、大きく分けて以下の3つがあります。
上記の動画フォーマット/コーデックが、各ブラウザによってどのようにサポートされているかを示すのが以下の表です。
ブラウザ | H.264 | WebM | Ogg |
---|---|---|---|
IE9 | ◯ | - | - |
Firefox4 | - | ◯ | ◯ |
Chrome10 | - | ◯ | ◯ |
Safari5 | ◯ | - | - |
Opera11 | - | ◯ | ◯ |
オープンソースのフォーマット(WebM、Ogg)をサポートするかどうかで見事に分かれています(Googleは今年1月、H.264のサポートを打ち切ると発表することで、オープンフォーマットのみをサポートするブラウザとなりました)。
また、GoogleはIE9向けに、WebMを再生可能にするプラグインを提供しています。WebMプラグインはSafari向けにも提供される予定であり、こうしたプラグインを前提にすることで、WebMのみに絞って動画を提供するという選択肢も考えられます。
1つの動画が複数の形式で配信されている状態で、力を発揮するのがsource要素です。
source要素は、video/audio要素の内側で使用し、複数の形式のメディアファイルを同時に指定できます。ブラウザはsource要素を上から順に走査し、自身が再生できるフォーマットの動画を見付けると、それをダウンロードして再生します。つまり、「どの形式の動画を利用するか」をブラウザが自動的に判定してくれるわけです。
source要素は以下の属性を持ちます。
ブラウザが、自身が再生できるメディアファイルを見付ける手掛かりとするのが、type属性です。type属性にはMIMEタイプを指定します。その際、通常のMIMEタイプ指定だけでは、動画の「フォーマットが何か」を表現することしかできません(例えば「video/mp4」だと、MPEG-4フォーマットであることしか分かりません)。動画のコーデックも併せて指定するには、MIMEタイプの後ろにcodecsパラメータを指定する必要があります。codecsパラメータについては、以下の利用例をご覧ください。
こうした知識を基に、source要素を利用して、複数の動画ファイルを指定する例を示します。以下のサンプルは、WebMとH.264の動画をsource要素で指定しているため、IE9、Safari5、Chrome10、Opera11、Firefox4の全てのブラウザで動画を視聴できます。動画ファイルは、マイクロソフトの「IE10 Test Drive」でホスティングされているものを使用しました(動画自体は、「Big Buck Bunny」のサイトにてクリエイティブ・コモンズ3.0に基づき配布されているものです)。
<!DOCTYPE html> <video width="300" height="150" controls> <!-- WebM対応ブラウザ用 --> <source type='video/webm' src="http://ie.microsoft.com/testdrive/Graphics/VideoFormatSupport/big_buck_bunny_trailer_480p.webm"> <!-- H.264対応ブラウザ用 --> <source type='video/mp4; codecs="avc1.64001E, mp4a.40.2"' src="http://ie.microsoft.com/testdrive/Graphics/VideoFormatSupport/big_buck_bunny_trailer_480p_high.mp4"> </video>
今回はvideo/audio要素のマークアップについてお話ししました。次回は、video要素やaudio要素をJavaScriptで操作する方法について解説します。
株式会社オープンウェブ・テクノロジー 代表
白石俊平(@Shumpei)
Google API Expert(HTML5)
HTML5開発者コミュニティ「html5-developers-jp」管理人
HTML5関連でいろいろ活動中。いまはHTML5をビジネスに活用すべく、日々奮闘中です。第1弾サービス、「DaVinciPad」は順調に稼働中。趣味は子どもたちと遊ぶこと
著書
・「HTML5&API入門」(2010 日経BP社)
・「Google Gearsスタートガイド」(2007 技術評論社)
Copyright © ITmedia, Inc. All Rights Reserved.