MDN’s new design is in Beta! A sneak peek: https://blog.mozilla.org/opendesign/mdns-new-design-beta/

DASH Adaptive Streaming for HTML 5 Video

この翻訳は不完全です。英語から この記事を翻訳 してください。

Dynamic Adaptive Streaming over HTTP (DASH) は、アダプティブストリーミングプロトコルです。 これは動画の再生を維持するためにネットワークパフォーマンスに応じてビデオストリームのビットレートを切り替えることを可能にします。

ブラウザーサポート

Firefox 21 はHTML5 WebMのためのDASHの実装を含んでいますが、デフォルトでは無効になっています。これは "about:config" の "media.dash.enabled" 設定によって有効にすることができます。

Firefox 23 ではHTML5 WebMのためのDASHは削除されました。これは Media Source Extensions API の実装で置き換えられました。これはdash.jsのようなJavaScriptライブラリによるDASHのサポートを可能にするものです。詳しくはバグ 778617 を見てください。

DASHの使い方 - サーバーサイド

まずWebMビデオを複数のビットレートのファイル群を含むDASHマニフェストに変換する必要があります。これを行うためには次のものが必要です:

1. すでに存在するWebMファイルを使って一つの音声と複数の動画ファイルを作成する。

たとえば:

in.video というファイルがffmpegでデコード可能な一つ以上の音声と一つ以上の動画ストリームを含むなんらかのコンテナーであるとすると、

音声はこのように作ります:

ffmpeg -i in.video -vn -acodec libvorbis -ab 128k my_audio.webm

それぞれのビデオはこのように作ります。

ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1  -f webm -dash 1 \
-an -vf scale=160:190 -b:v 250k video_160x90_250k.webm 

ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1  -f webm -dash 1 \
-an -vf scale=320:180 -b:v 500k video_320x180_500k.webm

ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1  -f webm -dash 1 \
-an -vf scale=640:360 -b:v 750k  video_640x360_750k.webm

ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1  -f webm -dash 1 \
-an -vf scale=640:360 -b:v 1000k  video_640x360_1000k.webm

ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 -g 150 -tile-columns 4 -frame-parallel 1  -f webm -dash 1 \
-an -vf scale=1280:720 -b:v 1500k  video_1280x720_1500k.webm

もしくは全てを一つのコマンドで一度に行います。

ffmpeg -i in.video -c:v libvpx-vp9 -keyint_min 150 \
-g 150 -tile-columns 4 -frame-parallel 1  -f webm -dash 1 \
-an -vf scale=160:190 -b:v 250k video_160x90_250k.webm \
-an -vf scale=320:180 -b:v 500k video_320x180_500k.webm \
-an -vf scale=640:360 -b:v 750k  video_640x360_750k.webm \
-an -vf scale=640:360 -b:v 1000k  video_640x360_1000k.webm \
-an -vf scale=1280:720 -b:v 1500k  video_1280x720_1500k.webm

2. クラスター境界で切り替えられるようにクラスターを揃える

動画のために:

samplemuxer -i my_video-250kbps.webm -o my_video-250kbps-final.webm
etc.

Although we don't switch audio streams, it's still necessary to run it through samplemuxer to ensure a cues element is added. Note: to be compatible with playing on Chrome, it is suggested to change the track number to something other than the one in the video files, most likely 0.

samplemuxer -i my_audio.webm -o my_audio-final.webm -output_cues 1 -cues_on_audio_track 1 -max_cluster_duration 2 -audio_track_number

3. マニフェストファイルを作成する:

webm_dash_manifest -o my_video_manifest.mpd \
  -as id=0,lang=eng \
  -r id=0,file=my_video-250kbps-final.webm \
  -r id=1,file=my_video-100kbps-final.webm \
  -r id=2,file=my_video-50kbps-final.webm \
  -as id=1,lang=eng \
  -r id=4,file=my_audio-final.webm

マニフェストと関連する動画ファイルをWebサーバーやCDNに置いてください。DASHはHTTP上で動作するので、HTTPサーバーがバイトレンジリクエストをサポートしていて.mpdファイルが mimetype="application/dash+xml" で配信するように設定されていれば、これで全て完了です。

DASHの使い方 - クライアントサイド

ビデオファイルの代わりにDASHマニフェストを参照するようにWebページを修正します:

<video>
  <source src="movie.mpd">
  <source src="movie.webm">
  Your browser does not support the video tag.
</video>

これだけです!ブラウザーでDASHがサポートされていれば、動画はアダプティブストリーミングで再生されます。

WebM DASH Specification at The WebM Project

DASH Industry Forum

ドキュメントのタグと貢献者

 このページの貢献者: niusounds
 最終更新者: niusounds,