17
12

More than 3 years have passed since last update.

[MPEG-DASH] MPDのファイル構造

Last updated at Posted at 2020-05-24

はじめに

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ファイルです。MPDPeriodAdaptationSetRepresentationSegment の要素で構成されています。
MPD

MPD

  • profiles...ライブ配信とオンデマンド配信
  • minBufferTime...必要な最小の初期バッファリング時間

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について纏めました。
メディアファイルの作成方法や再生方法は別の投稿で紹介していますので
是非ご覧ください。ありがとうございました。

関連リンク

参考リンク

以上です。

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12