MPEG DASHを知る


# はじめに
- 正式名称はMPEG-DASHだが、DASHと呼ばれる。呼んじゃう
- DASHはDynamic Adaptive Streaming over HTTPの略
- 2012年4月にISO国際標準規格(ISO/IEC 23001-6)としてリリース

# 背景
- HTTPプロトコルを使用した動画配信プロトコルはあるが、互換性がないためHTTPプロトコルを使った動画配信プロトコルの国際標準規格として策定された
    - HLS（HTTP Live Streaming）
        - Apple
    - SS（Smooth Streaming）
        - Microsoft
    - HDS（HTTP Dynamic Streaming）
        - Adobe

# DASHの特徴
- 最適な高品質ビデオストリームを提供できる
    - 再生が途切れない（再生中にバッファリング状態にならない）
    - 動画が途切れないように帯域などの環境に応じて動的にコンテンツ（ビットレートなど）を切り替える
- DASHは普通のHTTPサーバで実現できる
    - RTSP (Real Time Streaming Protocol)、RTMP (Real Time Messaging Protocol)ではない
    - MPD(Media Presentation Description)と呼ばれるメタ情報が定義されている
    - AkamaiなどのCDNがそのまま利用できる。
    - DASHは、コーデックに依存しない
   
# DASHの仕組み
![dash.png](https://qiita-image-store.s3.amazonaws.com/0/96231/8cce93d8-cb77-d56e-915e-3a4d672ffc24.png)

# DASHイメージ図（赤のボックス部分がMPEG-DASH仕様書に規定）
![dash_image.png](https://qiita-image-store.s3.amazonaws.com/0/96231/ef7eef98-6ee1-ed2e-0dcb-d54a30b45e8d.png)


# 構造
## MPD（The Media Presentation Description）
- XMLで記載されている
- MP4のmoov boxのイメージに近い
- ライブを主目的として有効期限が定義できる
- VODは静的だが、ライブは動的にアップデートされる
- Presentation、Period、AdaptationSet、Representation、Segmentで構成されている

### MPDの概要図
![dash_mpd_image.png](https://qiita-image-store.s3.amazonaws.com/0/96231/006fe002-d466-f6b9-762c-16e967ac6a6f.png)


### Presentation
- MPD構造のトップレベル
- Presentationは完結した１本のビデオを抽象化したものを定義
    - タイトル
    - 配信するメディアファイルのストリーミング種別（オンデマンドかライブ配信かの種別）
    - メディアファイルの種類
    - 長さ
    - MPDファイルの場所
- 言語や解像度やビットレートなどは定めていない
- Presentationは複数のPeriodから構成される
    
### Period
- 番組やコンテンツを構成する1つの単位
- Periodはビデオを時間で分割したもの
- Periodにはstart時刻とduration時間が定義される
- テレビ番組の本編とCM部分を別のPeriodで定義することができる
- Periodは複数のAdaptationSetから構成される

### AdaptationSet
- 映像・音声・字幕などの単位を表現
    - 例
        - MP4の日本語音声の場合には、「mimeType="audio/mp4" codecs="mp4a.40.2" lang="jp"」
        - 日本語字幕の場合は、「mimeType="text/mp4" codecs="3gp.text" lang="jp"」
        - MP4ビデオの場合は、「mimeType="video/mp4" codecs="avc1.4D401E"」
- 再生する際に選択する動画コンテンツの構成要素をもつ
- AdaptationSetは複数のRepresentationから構成される

### Representation
- 映像・音声のビットレートや解像度、アスペクト比などの情報
- インターネット回線の帯域や受信端末の種類によって切換えられるように、それぞれの情報を定義することができる
- RepresentationはSegmentから構成される

### Segment
- Segmentはメディアの最小単位
- SegmentにはHTTP range GETで取得できるようにバイト位置や時刻情報などが記述されている
- メディアファイルを分割したセグメントに関する情報
- Initialization SegmentとMedia Segmentから構成される

#### Segment File構成
![dash_segment.png](https://qiita-image-store.s3.amazonaws.com/0/96231/c2e207b4-3852-8a8f-1dc4-820a97c15eb8.png)

#### Initialization Segment
- クライアント側での複合処理の初期化情報
- MP4
    - ファイルタイプ（ftyp=”dash”）
    - セグメント全体のメタデータ
- MPEG-2 TS
    - PAT（Program Association Table）
    - PMT（Program Map Table）
    - CAT（Conditional Access Table）
    - EMM（Entitlement Management Message）
    - PSI情報
    
#### Media Segment
- 数秒〜数十秒程度の単位でセグメントに分割できる
- 1つまたは複数で構成することができる
- 一意のURLが付与されるため、クライアント側はHTTPによるアクセスが可能となる
- 動画の切替単位をalignmentと呼ぶ
    
### MPD構成イメージ
![dash_mpd_data_model.png](https://qiita-image-store.s3.amazonaws.com/0/96231/86c835fd-5aca-0189-af09-90af0cdad931.png)


### sample
![dash_mpd_sample.png](https://qiita-image-store.s3.amazonaws.com/0/96231/be1af64b-3787-d82f-2dc5-5b7a62ec6e7d.png)


## MPEG-DASHのProfile
- MP4
    - Main Profile
        - On-Demand Profile
        - Live Profile
- MPEG-TS
    - Main Profile
        - Simple Profile

# 関連リンク
- DASH Industry Forum http://dashif.org/
- Dynamic Adaptive Streaming over HTTP http://web.cs.wpi.edu/~claypool/mmsys-2011/Day2-1_3GPPPDynamic.pdf

# 参考
- http://itpro.nikkeibp.co.jp/article/COLUMN/20130409/469442/?ST=broadcast&P=2
- http://www.streamingmedia.com/Articles/Editorial/What-Is-.../What-is-MPEG-DASH-79041.aspx
- https://en.wikipedia.org/wiki/Dynamic_Adaptive_Streaming_over_HTTP
- https://www.jstage.jst.go.jp/article/itej/67/2/67_109/_pdf
- http://www.iij.ad.jp/company/development/tech/techweek/pdf/141127_4_1.pdf