SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

japan.internet.com翻訳記事

HTML 5のマルチメディア(オーディオ/ビデオ)サポート紹介

Webページへのビデオやオーディオの埋め込み

 複数の<source>要素が存在する場合、Webブラウザは、最初のコーデックが(サポート対象外のため)利用できなくても、使えるものが見つかるまでそれらの要素を順に試していきます。

 例えば、次のHTML 5コードでは、1つの<video>要素に3種類のコーデックを指定しています。

<video width="320px" height="240px" autobuffer="autobuffer" autoplay="autoplay">
    <source src='video.mpg' type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'>
    <source src='video.mp4' type='video/mp4; codecs="amp4v.20.8, mp4a.40.2"'>
    <source src='video.ogv' type='video/ogg; codecs="theora, vorbis"'>
</video>

 最初の<source>要素には、mp4リソース(MPEGビデオの最も一般的なタイプで、単に"mpg"拡張子が付けられていることも多い)が記述されています。この場合は、ベースラインプロファイルのビデオコーデックが使用されます。2番目は単純なプロファイルビデオコーデックでエンコードされたビデオ、3番目はOgg-vorbisコーデックでエンコードされたビデオです。ほとんどの場合、@type属性には関連するMIMEタイプが含まれます。そうでない場合は、同様の情報を@media属性によって与えることができます。@src属性に関しては、次のような二者択一的な状況を扱うことになります。この属性はたとえ<source>要素が存在しても優先的に使用されますが、メディア要素内にはどちらか一方が存在しなければなりません。

 建前上は、現在使用されているコーデックのほとんどが<video>および<audio>要素で処理できるはずです。しかし、現在これらの要素に対応しているブラウザでも、実際にサポートされているのはOgg VorbisとTheoraというオープンソースの両規格だけです。どちらも聞き慣れない名前かもしれませんが、Terry Pratchett作のDiscworldシリーズのファンなら、『Small Gods』のキャラクターExquisitor Vorbisと、彼の多くの作品に登場するキャラクターNanny Oggの名前をきっと思い浮かべるでしょう。また、Theora(Jones)は、「Max Headroom」というテレビ番組シリーズに登場するCGキャラクターMax Headroomの誘導員の名前です。

 Ogg Vorbis規格はオープンソースで信頼性が高いという点で、より有名なMPEGフォーマットに匹敵する存在です。そのため、Ogg Vorbisはゲームおよびオンラインアプリケーション向けのオーディオトラックの記録によく利用されます。Ogg Vorbis/Theoraは、HTML 5仕様において他のフォーマットよりも優先されているわけではなく、Firefoxによって(現時点では独占的に)サポートされているフォーマットの1つに過ぎません。これらの規格については、ChromeとSafariの開発チームも、サポート対象のフォーマットとして追加する意向を表明しています。

オーディオとビデオとDOM

 <video>要素と<audio>要素は、どちらも同じDOMインターフェースを使用しており、抽象インターフェースHTMLMediaElementに基づいています(つまり、正式な<media>要素というものは存在しません)。そのため、このインターフェースを使用すれば、さまざまなビデオおよびオーディオストリームをページ内で制御できます。リスト1に、このインターフェースのIDLを示します。

リスト1 HTMLMediaElementインターフェースのIDLコード
interface HTMLMediaElement : HTMLElement { // error state
readonly attribute MediaError error;
// network state
attribute DOMString src;
readonly attribute DOMString currentSrc;
const unsigned short NETWORK_EMPTY = 0;
const unsigned short NETWORK_IDLE = 1;
const unsigned short NETWORK_LOADING = 2;
const unsigned short NETWORK_NO_SOURCE = 3;
readonly attribute unsigned short networkState;
attribute boolean autobuffer;
readonly attribute TimeRanges buffered;
void load();
DOMString canPlayType(in DOMString type);
// ready state
const unsigned short HAVE_NOTHING = 0;
const unsigned short HAVE_METADATA = 1;
const unsigned short HAVE_CURRENT_DATA = 2;
const unsigned short HAVE_FUTURE_DATA = 3;
const unsigned short HAVE_ENOUGH_DATA = 4;
readonly attribute unsigned short readyState;
readonly attribute boolean seeking; // playback state
attribute float currentTime;
readonly attribute float startTime;
readonly attribute float duration;
readonly attribute boolean paused;
attribute float defaultPlaybackRate;
attribute float playbackRate;
readonly attribute TimeRanges played;
readonly attribute TimeRanges seekable;
readonly attribute boolean ended;
attribute boolean autoplay;
attribute boolean loop;
void play();
void pause(); // controls
attribute boolean controls;
attribute float volume;
attribute boolean muted;
};

 IDLの観点から見ると、メディア要素のAPIは次のようなタスクに明確に分類されます。

  • リソースのネットワーク取得の制御
  • バッファリングの制御
  • 再生の制御
  • 各種コントロールの属性の設定

 srcプロパティはメディアの@src属性を設定するためのものですが、srcを変更しても現在のビデオが自動的に変更されることはありません。それどころかsrcの変更後は、新しいメディアの要素を読み込むためにload()関数を呼び出し、さらにビデオの読み込みとバッファリングが済んだ時点でplay()を実行する必要があります。完全に同期が取れた世界であれば、こうした面倒な作業も比較的容易に行えます。Webページがローカルで実行されている状況でローカルファイルからメディアを取得する場合は、次のようなコードを書くだけで済みます。

myMedia.src="http://www.mymedia.com/mediasrc.ogg";
myMedia.load();
myMedia.play();

次のページ

この記事は参考になりましたか?

japan.internet.com翻訳記事連載記事一覧

もっと読む

この記事の著者

japan.internet.com(ジャパンインターネットコム)

japan.internet.com は、1999年9月にオープンした、日本初のネットビジネス専門ニュースサイト。月間2億以上のページビューを誇る米国 Jupitermedia Corporation (Nasdaq: JUPM) のニュースサイト internet.comEarthWeb.com からの最新記事を日本語に翻訳して掲載するとともに、日本独自のネットビジネス関連記事やレポートを配信。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

Kurt Cagle(Kurt Cagle)

ライター、情報アーキテクト、XML News NetworkとMetaphorical Webのウェブマスター。カナダ、ブリティッシュコロンビア州のビクトリア在住。XMLToday.orgの編集長、O'Reilly Mediaの寄稿編集者。現在、XBRLに関する著書を執筆中。彼のTwitterはtw...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/4817 2010/02/10 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー