主流的基于HTTP的流媒体网络传输协议主要有四种:
- 苹果的HLS
- 微软的Smooth Streaming
- Adobe的HDS
- 国际标准MPEG-DASH
分别介绍一下。
苹果的HLS
全称HTTP Live Streaming。HLS是由苹果公司提出基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的备用源中以不同的速率下载同样的资源,允许流媒体会话适应不同的数据速率。在开始一个流媒体会话时,客户端会下载一个包含元数据的扩充 M3U (m3u8) 播放列表文件,用于寻找可用的媒体流。
HLS只请求基本的HTTP报文,与实时传输协议(RTP)不同,HLS可以穿过任何允许HTTP数据通过的防火墙或者代理服务器。它也很容易使用CDN来传输媒体流。
微软的Smooth Streaming
Smooth Streaming 是IIS的媒体服务扩展,用于支持基于HTTP的自适应流。
在2010年11月发布的 IIS Media Services 4.0 中,微软引入了一项使 Live Smooth Streaming H.264/AAC 视频动态封装成 Apple HLS 格式的功能,直接提供给 iOS 设备,而不需要再次编码。
MSS 的文件切帧式为 mp4,索引文件为ism/ismc,同时支持直播和时移。
Adobe的HDS
HDS通过HTTP向Adobe Flash Player或Adobe AIR提供多比特率内容。
HDS 的文件格式为 FLV/F4V/MP4,索引文件为 f4m,同时支持直播和时移。
国际标准MPEG-DASH
全称Dynamic Adaptive Streaming over HTTP,简称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等。
DASH是一项自适性流技术,其将多媒体文件分割为一个或多个片段,并使用超文本传输协议传递给客户端。媒体演示描述(MPD)描述片段信息(计时、统一资源定位符,以及媒体特征,例如视频分辨率和比特率),并且可以根据使用环境以不同的方式组织,例如SegmentList, SegmentTemplate, SegmentBase和SegmentTimeline。片段可以包含任何媒体数据,但是规范提供了与两种容器类型一起使用的特定指导和格式:ISO基础媒体文件格式(例如MP4文件格式)或MPEG-2传输流。
DASH不关心音频/视频的编解码器。多媒体文件通常有一种或多种表示(即不同分辨率或比特率版本),并可基于不同的网络条件、设备功能和用户偏好进行选择,达到自适性流和QoE (Quality of Experience) fairness。DASH也与底层的应用层协议无关,因此可以配合任何协议中使用。例如,基于CCN的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°视频的实时和按需的高效流式传输。