基於HTTP的動態自適應流

基於HTTP的動態自適應流（Dynamic Adaptive Streaming over HTTP，縮寫DASH，也稱MPEG-DASH）是一種自適應比特率串流技術，使高質量流媒體可以通過傳統的HTTP網路伺服器以網際網路傳遞。類似蘋果公司的HTTP Live Streaming（HLS）方案，MPEG-DASH會將內容分解成一系列小型的基於HTTP的文件片段，每個片段包含很短長度的可播放內容，而內容總長度可能長達數小時（例如電影或體育賽事直播）。內容將被製成多種比特率的備選片段，以提供多種比特率的版本供選用。當內容被MPEG-DASH客戶端回放時，客戶端將根據當前網路條件自動選擇下載和播放哪一個備選方案。客戶端將選擇可及時下載的最高比特率片段進行播放，從而避免播放卡頓或重新緩衝事件。也因如此，MPEG-DASH客戶端可以無縫適應不斷變化的網路條件並提供高質量的播放體驗，擁有更少的卡頓與重新緩衝發生率。

MPEG-DASH是首個基於HTTP的自適應比特率串流解決方案，它也是一項國際標準。MPEG-DASH不應該與傳輸協議混淆——MPEG-DASH使用TCP傳輸協議。

MPEG-DASH使用現有的HTTP網路伺服器基礎設施。它允許如網際網路電視、電視機頂盒、桌上型電腦、智慧型手機、平板電腦等設備消費通過網際網路傳送的多媒體內容（如影片、電視、廣播等），並可應對變動的網際網路接收條件。自適應流解決方案的標準化是為向市場提供信心，使該解決方案可以用於通用部署，抗衡類似但更專有的解決方案，如微軟Smooth Streaming與Adobe的HDS。

不同於HLS、HDS和Smooth Streaming，DASH不關心編解碼器，因此它可以接受任何編碼格式編碼的內容，如H.265、H.264、VP9等。

## 標準化

MPEG-DASH技術在MPEG之下開發。對DASH的工作始於2010年。2011年1月，它成為一項國際標準草案，並在2011年11月成為國際標準。MPEG-DASH標準已於2012年4月發布為 ISO/IEC 23009-1:2012。

DASH是一項與Adobe Systems HTTP Dynamic Streaming、蘋果公司HTTP Live Streaming（HLS）微軟Smooth Streaming相關的技術。DASH基於3GPP第9版中的Adaptive HTTP streaming（AHS）和Open IPTV Forum Release 2中的HTTP Adaptive Streaming（HAS）。作為與MPEG協作的一部分，3GPP Release 10採用DASH（具有特定的編解碼器和操作模式）用於無線網絡。

DASH行業論壇（DASH-IF）進一步促進和催化了MPEG-DASH的採用，並幫助將其從規範轉變為實際業務。主要的流媒體和媒體公司，包括微軟、Netflix、Google、愛立信、三星、Adobe等都在實際業務中嘗試使用，並為不同使用環境創建了DASH使用指南。

MPEG-DASH也被集成在其他標準中，例如HbbTV中的MPEG-DASH支持（截至1.5版本）。

## 概述

DASH是一項自適性串流技術，其將多媒體文件分割為一個或多個片段，並使用超文本傳輸協議傳遞給客戶端。

媒體演示描述（MPD）描述片段信息（計時、統一資源定位符，以及媒體特徵，例如影片解析度和比特率），並且可以根據使用環境以不同的方式組織，例如SegmentList, SegmentTemplate, SegmentBase和SegmentTimeline。

片段可以包含任何媒體數據，但是規範提供了與兩種容器類型一起使用的特定指導和格式：ISO基礎媒體文件格式（例如MP4文件格式）或MPEG-2傳輸流。

DASH不關心音頻/影片的編解碼器。多媒體文件通常有一種或多種表示（即不同解析度或比特率版本），並可基於不同的網路條件、設備功能和使用者偏好進行選擇，達到自適性串流和。DASH也與底層的應用層協議無關，因此可以配合任何協議中使用。例如，基於的DASH。

2015年7月27日，MPEG LA宣布呼籲與MPEG-DASH相關的專利，以便為該技術創建一個專利池。

## 實現

通過ExoPlayer，MPEG-DASH在Android上可原生使用，如三星智能電視2012+、LG智能電視2012+、索尼電視2012+、飛利浦NetTV 4.1+、松下Viera 2013+和Chromecast。YouTube以及Netflix已經支持MPEG-DASH，並且可使用多種MPEG-DASH播放器。

中國大陸方面，bilibili已經支持MPEG-DASH。

雖然HTML5不直接支持MPEG-DASH，但是已有一些MPEG-DASH的JavaScript實現允許在網頁瀏覽器中通過HTML5 Media Source Extensions（MSE）使用MPEG-DASH。另有其他JavaScript實現，如bitdash播放器支持使用HTML5加密媒體擴展播放有DRM的MPEG-DASH。當WebGL結合使用，MPEG-DASH基於HTML5的自適應比特率流還可實現360°影片的實時和按需的高效流式傳輸。

### 客戶端和程序庫

- Dash.js是Dash行業論壇官方參考和生產播放器。
- Shaka是出自Google的開源dash播放器。
- VLC多媒體播放器3.0將為MP4/MPEG和實時流媒體發布一個新客戶端插件。
- 跨平台FOSS多媒體框架GStreamer自從至少1.4版本以來支持MPEG-DASH和WebM DASH。
- 開源程序庫libdash獨立於平台，可在Android、iOS、Windows Phone等移動平台上運行。
- bitmovin為HTML5和Flash提供了bitdash MPEG-DASH播放器。
- THEOplayer 目前正在尋找夥伴來測試他們的MPEG-DASH影片播放器。
- Viblast Player支持HTML5中的MPEG-DASH，並為iOS和Android提供SDK。
- 巴黎電信學院中GPAC的OSMO4支持MPEG-DASH。
- 克拉根福大學ITEC中的DASH-JS支持MPEG-DASH。
- Radiant Media Player支持HTML5中的MPEG-DASH（DASH264和WebM DASH）。
- Videogular是AngularJS面向桌面和移動平台提供的一個影片應用框架，AngularJS為HTML5提供的影片播放器
- libndash 是一個開源（Apache許可證）的C++程序庫，提供構建一個全功能MPEG-DASH媒體播放器所需的所有功能（不包括解碼/渲染幀到顯示器）。

### 伺服器

請注意，除了Live Streaming外，DASH內容不需要伺服器的特定支持。

- Brightcove Zencoder已支持MPEG-DASH transmuxing/transcoding。
- Elemental Technologies影片處理解決方案支持DASH。
- Helix Universal Server已支持各種模式下的DASH。
- nginx-rtmp-module支持生成MPEG-DASH實時流。但在1.2.0版本以前，只能使用dash.js的修改版本和bitdash播放。
- nginx-ts-module支持實時MPEG-DASH
- Nimble Streamer有實時和點播MPEG-DASH的支持。對點播來說，它支持H.265和H.264編解碼器
- Unified Origin支持MPEG-DASH。

### 服務

- Amazon Web Services Elastic Transcoder 已支持MPEG-DASH。
- Level 3通信 CDN支持DASH。
- Akamai CDN支持DASH。
- Amazon CloudFront CDN支持DASH。
- Azure Media Services平台已支持MPEG-DASH。
- bitmovin提供的雲轉碼服務bitcodin.com支持MPEG-DASH。
- Limelight Networks CDN支持DASH。
- Tata Communications CDN支持DASH。
- StreamRoot的混合CDN模型支持MPEG-DASH。
- ScaleEngine Video CDN支持DASH。

### 內容生成器

- ITEC的DASHEncoder。
- MP4Box及其來自Telecom ParisTech的GPAC的多媒體框架
- 巴黎電訊的dashcast支持MPEG-DASH實時流
- MediaGoom MPEG-DASH Packager
- Bento4開源工具和SDK

### 其他

- ITEC為MPEG-DASH媒體演示描述（MPD）文件提供驗證服務
- Alpen-Adria克拉根福大學的資訊技術研究所（ITEC）、巴黎電信學院GPAC小組和Digital TV Labs已提供多個DASH數據集。
- BBC有DASH測試流，包括基於HTTP/2的DASH。

## 外部連結

- MPEG-DASH Standard
- DASH subscription mailing list
- DASH research at Alpen-Adria Universität Klagenfurt
- Mailing list of the open-source DASH client library libdash