基于HTTP的动态自适应流

**基于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）和 Release 2中的HTTP Adaptive Streaming（HAS）。作为与MPEG协作的一部分，3GPP Release 10采用DASH（具有特定的编解码器和操作模式）用于无线网络。

DASH行业论坛（）进一步促进和催化了MPEG-DASH的采用，并帮助将其从规范转变为实际业务。主要的流媒体和媒体公司，包括微软、Netflix、Google、爱立信、三星、Adobe等都在实际业务中尝试使用，并为不同使用环境创建了DASH使用指南。

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

## 概述
DASH是一项自適性串流技术，其将多媒体文件分割为一个或多个片段，并使用超文本传输协议传递给客户端。
媒体演示描述（）描述片段信息（计时、统一资源定位符，以及媒体特征，例如视频分辨率和比特率），并且可以根据使用环境以不同的方式组织，例如SegmentList, SegmentTemplate, SegmentBase和SegmentTimeline。
片段可以包含任何媒体数据，但是规范提供了与两种容器类型一起使用的特定指导和格式：（例如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内容不需要服务器的特定支持。

*  已支持MPEG-DASH transmuxing/transcoding。
* 视频处理解决方案支持DASH。
* 已支持各种模式下的DASH。
* nginx-rtmp-module支持生成MPEG-DASH实时流。但在1.2.0版本以前，只能使用dash.js的修改版本和bitdash播放。
* nginx-ts-module支持实时MPEG-DASH
* 有实时和点播MPEG-DASH的支持。对点播来说，它支持H.265和H.264编解码器
* 支持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。
* 提供的云转码服务bitcodin.com支持MPEG-DASH。
*  CDN支持DASH。
*  CDN支持DASH。
* 的混合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