はじめに
MPEG-DASHによるアダプティブストリーミングについて、JavaScriptAPIとマニフェストファイル(MPD)を紹介します。
MPEG-DASHのデモ
dash.jsプレイヤーを使ってMPEG-DASHを再生することができます。手順は次の通りです。Stream
のURL欄にMPDファイルのURLを指定します。ここでは、上記のURLを指定してください。Load
ボタンをクリックすると動画の再生が始まります。
マニフェストファイル
- Meida Presentation Description(MPD)
- XMLのファイル
- セグメントファイルへのアクセス方法や再生方法が記述されている
MPEG-DASHのマニフェストファイルは、XMLフォーマットで記述されているMPDファイルです。MPD、Period、AdaptationSet、Representation、Segment の要素で構成されています。
MPD
MPDファイルのトップ要素はMPDタグです。複数のPeriodから構成されています。profiles
属性でライブ配信やオンデマンド配信のようにストリーミングの機能を指定します。プロファイル毎に指定する要素が異なります。
<MPD mediaPresentationDuration="PT14.414S" minBufferTime="PT8.34S" profiles="urn:mpeg:dash:profile:isoff-live:2011" xmlns="urn:mpeg:dash:schema:mpd:2011">
Profile:Live
profiles="urn:mpeg:dash:profile:isoff-live:2011"
を指定するとライブ配信を行うことができます。しかし、MPDのプロファイルを指定しただけではライブ配信はできず、WEBサーバー側にリアルタイムにセグメントファイルを生成する機能が必要です。ライブ配信時には、MPDの有効期限を指定して定期的にMPDの内容を更新します。
Profile:On-Demand
profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
を指定するとオンデマンド配信を行うことができます。
Period
-
start
...再生開始時刻 -
duration
...再生時間
Periodタグは、コンテンツの情報(映像+音声の1セット)を表しています。例えば、「番組+CM」のような組み合わせを1つのMPDファイルに記述することができます。Periodタグは、複数のAdaptationSetから構成されます。
<Period start="PT0S" duration="PT0H0M14.421S"></Period>
AdaptationSet
-
lang
...言語
AdaptationSetタグは、言語、字幕や吹替の情報を表しています。例えば、言語毎に、字幕や音声ファイルを指定することが可能です。AdaptationSetタグは、複数のRepresentationから構成されます。
<AdaptationSet lang="en" maxHeight="1080" maxWidth="1920" segmentAlignment="true" startWithSAP="1">
Representation
-
bandwidth
...帯域幅 mimeType
-
codecs
...コーデック -
Initial Segment
...初期のセグメントファイル -
Media Segment
...セグメントファイル
Representationタグは、映像や音声の帯域幅や解像度、コーデック指定を表します。
<Representation bandwidth="3992350" mimeType="video/mp4" codecs="avc1.4d401f" frameRate="216000/7207" height="1080" id="video/avc1" scanType="progressive" width="1920"/>
マルチビットレート
Representationタグは、ビットレートが異なるセグメントファイルと帯域幅が異なるbandwidth
を指定すると、ストリーミング再生時に帯域幅によって自動的に適切なビットレートのセグメントファイルを再生します。
<Representation bandwidth="4610934" codecs="avc1.4d401f" frameRate="216000/7207" height="1080" id="video/avc1/1" scanType="progressive" width="1920"/>
<Representation bandwidth="2272867" codecs="avc1.4d401f" frameRate="216000/7207" height="720" id="video/avc1/2" scanType="progressive" width="1280"/>
<Representation bandwidth="754112" codecs="avc1.4d401f" frameRate="216000/7207" height="360" id="video/avc1/3" scanType="progressive" width="640"/>
Segment
-
t
...開始時間 -
d
...時間が指定される(計算式=d
/timescape
) -
r
...長さが同じ場合は繰り返しが指定される
Segmentタグは、1つのセグメントファイルで1つのタグが指定されます。
<SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/seg-$Number%04d$.m4s" startNumber="1" timescale="1000">
<SegmentTimeline>
<S d="8342"/>
<S d="6072"/>
</SegmentTimeline>
</SegmentTemplate>
おわりに
今回、MPDについて纏めました。
メディアファイルの作成方法や再生方法は別の投稿で紹介していますので
是非ご覧ください。ありがとうございました。
関連リンク
- [MPEG-DASH] 初心者のためのWEBストリーミング入門
- [MPEG-DASH] Fragmented MP4のファイル構造
- [MPEG-DASH] MPDのファイル構造(本稿)
- [MPEG-DASH] DRMシステムの概要と種類
- [MPEG-DASH] Bento4でDRMパッケージを行う
- [MPEG-DASH] dashJSでアダプティブストリーミングを再生する
- [MPEG-DASH] videoJSでアダプティブストリーミングを再生する
- [MPEG-DASH] パフォーマンスチューニングを行う
参考リンク
以上です。