DASH
Dynamic Adaptive Streaming over HTTP(DASH)は、HTTP上でメディアコンテンツの高品質なストリーミングを可能にするアダプティブ・ビットレート・ストリーミング技術です。
Shaka Packager は DASH コンテンツのパッケージングをサポートしています。このチュートリアルでは、暗号化されていない VOD コンテンツの DASH パッケージングについて説明します。ライブコンテンツのパッケージングについては Live を、コンテンツの暗号化については DRM を、完全なドキュメントについては Packager Documentation をご覧ください。
概要
$ packager <stream_descriptor> ... \
--mpd_output <manifest_output_path> \
[Other DASH options] \
[Other options, e.g. DRM options, HLS options]
使用可能なDASH関連オプションについては、DASHオプションを参照してください。
ノート
DASHオプションとHLSオプションの両方を指定して、DASHマニフェストとHLSマニフェストを同時に出力できます。MP4出力でのみ機能することに注意してください。
例
以下の例では、Media Encodingで作成したH264のストリームを使用しています。VP9にも同じように適用できる。
オンデマンド:
$ packager \
in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \
in=input_text.vtt,stream=text,output=output_text.vtt \
in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4 \
in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4 \
in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4 \
in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4 \
--mpd_output h264.mpd
上記のパッケージングコマンドは、5つの単一トラックのフラグメント化されたMP4ストリーム(4つのビデオ、1つのオーディオ)、字幕ファイル、およびストリームを記述するマニフェストを作成します。
オンデマンドでトリックプレイ可能なトラック:
$ packager \
in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4 \
in=input_text.vtt,stream=text,output=output_text.vtt \
in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4 \
in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4 \
in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4 \
in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4 \
in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,trick_play_factor=1 \
in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,trick_play_factor=1 \
--mpd_output h264.mpd
上記のパッケージングコマンドでは、先のコマンドで生成されたファイルの他に、2つのトリックプレイトラックが追加で作成されます。
static-live:
$ packager \
'in=h264_baseline_360p_600.mp4,stream=audio,init_segment=audio/init.mp4,segment_template=audio/$Number$.m4s' \
'in=input_text.vtt,stream=text,init_segment=text/init.mp4,segment_template=text/$Number$.m4s' \
'in=h264_baseline_360p_600.mp4,stream=video,init_segment=h264_360p/init.mp4,segment_template=h264_360p/$Number$.m4s' \
'in=h264_main_480p_1000.mp4,stream=video,init_segment=h264_480p/init.mp4,segment_template=h264_480p/$Number$.m4s' \
'in=h264_main_720p_3000.mp4,stream=video,init_segment=h264_720p/init.mp4,segment_template=h264_720p/$Number$.m4s' \
'in=h264_high_1080p_6000.mp4,stream=video,init_segment=h264_1080p/init.mp4,segment_template=h264_1080p/$Number$.m4s' \
--generate_static_live_mpd --mpd_output h264.mpd
上記のパッケージングコマンドは、5つのストリーム用の5つのセグメントグループ(それぞれがinitセグメントと一連のメディアセグメントを持つ)と、ストリームを記述するマニフェストを作成します。
DASH + HLSによる単一MP4ファイルを出力:
$ packager \
in=h264_baseline_360p_600.mp4,stream=audio,output=audio.mp4,playlist_name=audio.m3u8,hls_group_id=audio,hls_name=ENGLISH \
in=h264_baseline_360p_600.mp4,stream=video,output=h264_360p.mp4,playlist_name=h264_360p.m3u8,iframe_playlist_name=h264_360p_iframe.m3u8 \
in=h264_main_480p_1000.mp4,stream=video,output=h264_480p.mp4,playlist_name=h264_480p.m3u8,iframe_playlist_name=h264_480p_iframe.m3u8 \
in=h264_main_720p_3000.mp4,stream=video,output=h264_720p.mp4,playlist_name=h264_720p.m3u8,iframe_playlist_name=h264_720p_iframe.m3u8 \
in=h264_high_1080p_6000.mp4,stream=video,output=h264_1080p.mp4,playlist_name=h264_1080p.m3u8,iframe_playlist_name=h264_1080p_iframe.m3u8 \
--hls_master_playlist_output h264_master.m3u8 \
--mpd_output h264.mpd
上記のパッケージングコマンドは、5つの単一ファイルのMP4ストリーム、およびHLSプレイリスト、さらにDASHマニフェストを作成します。
dash_only、hls_onlyオプションでDASH + HLSを出力:
$ packager \
'in=h264_baseline_360p_600.mp4,stream=audio,init_segment=audio/init.mp4,segment_template=audio/$Number$.m4s' \
'in=input_text.vtt,stream=text,init_segment=text/init.mp4,segment_template=text/$Number$.m4s,dash_only=1' \
'in=input_text.vtt,stream=text,segment_template=text/$Number$.vtt,hls_only=1' \
'in=h264_baseline_360p_600.mp4,stream=video,init_segment=h264_360p/init.mp4,segment_template=h264_360p/$Number$.m4s' \
'in=h264_main_480p_1000.mp4,stream=video,init_segment=h264_480p/init.mp4,segment_template=h264_480p/$Number$.m4s' \
'in=h264_main_720p_3000.mp4,stream=video,init_segment=h264_720p/init.mp4,segment_template=h264_720p/$Number$.m4s' \
'in=h264_high_1080p_6000.mp4,stream=video,init_segment=h264_1080p/init.mp4,segment_template=h264_1080p/$Number$.m4s' \
--generate_static_live_mpd --mpd_output h264.mpd \
--hls_master_playlist_output h264_master.m3u8
上記のパッケージングコマンドでHLSプレイリストとDASHマニフェストを作成し、dash_onlyでセグメント化されたWebVTTをmp4形式で、hls_onlyオプションでWebVTTをテキスト形式で作成します。
構成オプション
DASH固有のストリーム記述子フィールド
dash_accessibilities(アクセシビリティ):
DASH Accessibility 要素の値のオプションのセミコロン区切りリストです。値は scheme_id_uri=value という形式である必要があり、これは結果の DASH マニフェストの Accessibility 要素に伝搬します。詳細は DASH (ISO/IEC 23009-1) 仕様を参照してください。
dash_roles (役割):
DASH Role 要素の値をセミコロンで区切ったオプションのリスト。値は caption, subtitle, main, alternate, supplementary, commentary, dub のいずれかである必要があります。詳細は DASH (ISO/IEC 23009-1) 仕様を参照してください。
DASHオプション
--generate_static_live_mpd
このフラグを有効にすると、静的なmpdを生成します。ストリームディスクリプタに segment_template が指定されている場合、shaka-packager はデフォルトで dynamic mpd を生成しますが、このフラグが有効な場合、代わりに static mpd を生成します。segment_template が指定されていない場合、このフラグの値にかかわらず、shaka-packager は常に static mpd を生成することに注意してください。
--mpd_output <file_path>
MPD出力ファイル名。
--base_urls <comma_separated_urls>
MPDのカンマ区切りのBaseURL:
<url> [、<url>]…。
値は、<MPD>要素のすぐ下に<BaseURL>要素として追加されます。
--min_buffer_time <seconds>
MPD表現データレートの定義で使用される一般的な期間を秒単位で指定します。
--minimum_update_period <seconds>
メディアプレゼンテーションの説明を秒単位で更新する頻度をプレーヤーに示します。この値は、動的MPDにのみ使用されます。
--suggested_presentation_delay <seconds>
メディア表示時間に追加される遅延を秒単位で指定します。この値は、動的MPDにのみ使用されます。
--time_shift_buffer_depth <seconds>
動的メディアプレゼンテーション用のタイムシフトバッファーの保証期間(秒単位)。
--preserved_segments_outside_live_window <num_segments>
ライブウィンドウの外側のセグメント (上記の time_shift_buffer_depth で定義) は、このパラメータで定義された最新の X セグメントを除いて、自動的に削除されます。これは、コンテンツ配信パイプラインのさまざまな段階での遅延に対応するために必要なもので、プレーヤーがアクセスできる可能性があるセグメントを維持するためです。
値がゼロの場合、セグメントは削除されません。
--utc_timings <scheme_id_uri_value_pairs>
カンマ区切りのUTCTimingschemeIdUriとMPDの値のペア:
<scheme_id_uri> = <value> [、<scheme_id_uri>=<value>]…
この値は、動的MPDにのみ使用されます。
--default_language <language>
この言語でタグ付けされたオーディオ/テキストトラックには、マニフェストに<Role…value =”main”/>が含まれます。これにより、プレーヤーはコンテンツの正しいデフォルト言語を選択できます。
これは、オーディオトラックとテキストトラックの両方に適用されます。テキストトラックのデフォルト言語は、「default_text_language」で上書きできます。
--default_text_language <text_language>
上記と同じですが、これはテキストトラックにのみ適用され、テキストトラックのデフォルト言語を上書きします。
--allow_approximate_segment_timeline
ライブプロファイルのみ。
有効にすると、期間が近い(つまり、差が1サンプル未満の)セグメントは同じ期間であると見なされます。これにより、MPDジェネレーターが生成するSegmentTimelineエントリが少なくなります。最後のセグメントを除いてすべてのセグメントが同じ期間である場合は、代わりにSegmentTemplate @期間を使用して、SegmentTimelineを完全に省略するように、さらに最適化を行います。
$ Time $には正確なセグメントタイムラインが必要なため、セグメントテンプレートで$Time$が使用されている場合は無視されます。
–dash_only = 0 | 1
オプション。指定しない場合、デフォルトは0です。1に設定されている場合、ストリームがDASHのみであることを示します。
--allow_codec_switching
有効になっている場合、言語、メディアタイプ(オーディオ、ビデオなど)、およびコンテナタイプが同じである場合は、異なるコーデック間の適応切り替えを許可します。
セグメントテンプレートの書式
ISO/IEC 23009-1:2014 に記載されている Template-based Segment URL 構築に基づき実装されている。
対応する識別子
$<Identifier>$ | 置換パラメータ | Format |
---|---|---|
$$ | はエスケープシーケンスで、”$$”は”$”1個に置き換えられる。 | 該当事項はありません。 |
$Number$ | この識別子には、対応するセグメントの番号が代入される。 | format タグが存在しない場合、width=1 のデフォルトの format タグが使用される。 |
$Time$ | この識別子は、アクセスされるセグメントのSegmentTimeline@t属性の値で置き換えられる。Number$とTime$のどちらかを使用することができますが、両方を同時に使用することはできません。 | format タグが存在しない場合、width=1 のデフォルトの format タグが使用される。 |
このバージョンでは、$RepresentationID$と$Bandwidth$の識別子はサポートされていません。サポートされるようにしたい場合は、issueを提出してください。
各 URL において,識別子は上表の定義に従った置換パラメータで置換されなければならない。識別子のマッチングは,大文字と小文字を区別する。
各識別子は,’$’文字で囲まれた中に,IEEE 1003.1-2008 で定義された printf フォーマットタグに沿ったフォーマットタグを,このプロトタイプに続いて追加で付けることができる。
%0[width]d
widthパラメータは,印刷される最小文字数を示す符号なし整数である。width パラメータは,印字する最小文字数を示す符号なし整数である。印字する値 がこの値より短い場合は,印字結果に 0 を埋め込む。結果が大きくなっても,値は切り捨てられない。
識別子の外側の文字列は,RFC3986に従ってURL内で許容される文字のみを含まなければならない。
当記事について
当記事は下記URL先を翻訳し転載したものです。翻訳に間違いがある場合がありますので心配な方は下記URLまでアクセスをおすすめします。
Page Title: DASH — Shaka Packager documentation
コメント