DASH协议及各种码率自适应协议的对比

一、DASH协议

官方文档,包括一些白皮书啊之类的各种:

MPEG-DASH标准第一部分2012版和2014版,英文版

MPEG-DASH官网白皮书

标准文档:

这些白皮书没找到中文版,所以我自己翻译了一下:

MPEG-DASH白皮书第一版翻译

MPEG-DASH白皮书第一部分第二次修订版翻译

MPEG-DASH新功能白皮书翻译

一个比较系统的综述文档MPEG-DASH An Overview

二、DASH相关工具

  • Dataset、DashJS、Bitmovin等很多。有生成MPD文件的,有播放的。

ITEC给出的一些播放工具和插件

三、DASH协议基本点

  • 简述:MPEG-DASH协议是MPEG委员会提出,各大流媒体公司和组织共同制定的标准,全名Dynamic Adaptive Streaming over HTTP。目的是为Apple/Adobe/Microsoft等公司的码率自适应协议提供统一标准。大致内容可以看下第一部分中给出的三份白皮书。
  • DASH的分片(Segment)中可以包含mp4文件(fMP4),也可以包含TS文件,但整个标准更加prefer使用分片的mp4文件, 新标准中好像对3GPP协议也有支持,这个等看完再说。对于编码标准无指定。
  • 与HLS协议的m3u8索引文件类似,DASH协议也提供了MPD(Media Presentation Description)描述文件(XML格式)来对媒体流的下载地址、分辨率、码率、时长、各个分片、编码方式等进行了规定。
图一、MPD文件格式示意图

图二、MPD分层数据模型
MPD文件中的一些关键名词定义(参考白皮书):Periods(区段)、Adaptation Set(AS,自适应子集)、Representation(表示)、Segment(分片)、Subsegment(子分片)。其中一个MPD中包含一个或多个Periods,每个Periods包含一个或多个AS(每个AS对应一组可供切换的码流),一个AS包含一组Representation(每个Representation对应不同的分辨率或码率,保持不变),一个Representation内的内容被切分为多个Segment(方便在不同Segment间切换,粒度小),Segment可以进一步被切分为Subsegment。
  • 以下是某MPD文件中一个分片列表的示例:
"video/mp4" 
                   frameRate="24"
                   bandwidth="1558322"
                   codecs="avc1.4d401f" width="1277" height="544">
    "10">
        sourceURL="http://cdn.bitmovin.net/bbb/video-1500/init.mp4"/>
        "http://cdn.bitmovin.net/bbb/video-1500/segment-0.m4s"/>
        "http://cdn.bitmovin.net/bbb/video-1500/segment-1.m4s"/>
        "http://cdn.bitmovin.net/bbb/video-1500/segment-2.m4s"/>
        "http://cdn.bitmovin.net/bbb/video-1500/segment-3.m4s"/>
        "http://cdn.bitmovin.net/bbb/video-1500/segment-4.m4s"/>
  

复制代码
  • 以下是一个完整的MPD文件结构示例:

图三、MPD文件示例
  • MPD可以以不同的方式,例如SegmentList,SegmentTemplate,SegmentBase和SegmentTimeline,根据使用情况下进行组织。以下是转载了别人一个带有注释的MPD文件示例:

转载文章


"urn:mpeg:DASH:schema:MPD:2011" xmlns:ytdrm="http://youtube.com/ytdrm" mediaPresentationDuration="PT0H3M1.63S" minBufferTime="PT1.5S" profiles="urn:mpeg:dash:profile:isoff-on-demand:2011"
type="static">
  
  
  "PT30S" start="PT0S">
     
     ad/
     
     "video/mp4" minWidth="1280" par="16:9" contentType="video" maxWidth="1920" minHeight="720" segmentAlignment="true" startWithSAP="1" maxHeight="1080">
         
         "AD720p" bandwidth="3200000" width="1280" height="720" codecs="avc1.640028" mimeType="video/mp4">
             
             720p.mp4
             "2789-3264">
          	"0-2788" />
             
         
         
         "AD1080p" bandwidth="6800000" width="1920" height="1080" codecs="avc1.640028" mimeType="video/mp4">
             1080p.mp4
             "2755-3230">
          	"0-2754" />
             
         
     
  
  
  
  "PT0H3M1.63S">
    
    "video/mp4" minWidth="1280" par="16:9" contentType="video" maxWidth="1920" minHeight="720" segmentAlignment="true" startWithSAP="1" maxHeight="1080">
      	
      "video" id="1" />
      
      "cenc" schemeIdUri="urn:mpeg:dash:mp4protection:2011" cenc:default_KID="7862029a-3d0d-58ea-a4f6-5bdf308646a9"/>
      "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed">
	
		AAAAR3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAACcIARIBMBoNd2lkZXZpbmVfdGVzdCIKMjAxNV90ZWFycyoFQVVESU8=	
	
      
      "4190760" codecs="avc1.4d401f" height="1080" id="1" mimeType="video/mp4" width="1920">
	
        car_cenc-20120827-89.mp4
        "2755-3230">
          "0-2754" />
        
      
      "2073921" codecs="avc1.4d401f" height="720" id="2" mimeType="video/mp4" width="1280">
	
	SegmentListExample/
	"2">
	   
           sourceURL="car_cenc-20120827-88.mp4"/>
	   
           "segment-1.m4s"/>
           "segment-2.m4s"/>
           "segment-3.m4s"/>
           "segment-4.m4s"/>
           "segment-5.m4s"/>
           "segment-6.m4s"/>
           "segment-7.m4s"/>
           "segment-8.m4s"/>
           "segment-9.m4s"/>
           "segment-10.m4s"/>
        
      
    
    
    "audio/mp4" lang="en" startWithSAP="1" contentType="audio" segmentAlignment="true">
      "audio" id="2" />
      "255236" codecs="mp4a.67.02" id="3" mimeType="audio/mp4" audioSamplingRate="44100" startWithSAP="1">
	
	"urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
	
        "audio/en/init.mp4" media="audio/en/seg-$Number$.m4f" startNumber="1" timescale="90000">
	     
	     
		"0" r="10" d="5400000"/>
	     
	
      
      "31749" codecs="mp4a.67.02" id="4" mimeType="audio/mp4" audioSamplingRate="22050" startWithSAP="1">
        car_cenc-20120827-8b.mp4
        "2673-2932">
          "0-2672" />
        
      
    
    
    "fr" mimeType="audio/mp4" contentType="audio" segmentAlignment="true" startWithSAP="1">
	"urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
	
	
	"audio/fr_init.mp4" duration="0"/>
	"5" mimeType="audio/mp4" codecs="mp4a.67.02" audioSamplingRate="48000" startWithSAP="1" bandwidth="63008">
				
		"1000" duration="9941" media="audio/64kbps/redbull_audio_64kbps_segment$Number$.m4s" startNumber="1"/>
	
    
  

复制代码
  • MPEG-DASH使用:当前国内使用dash协议的公司并不多,主要是国内的流服务供应商及CDN供应商对此不够重视,此外真正关心码率自适应功能的公司也不多(坦诚来说,目前国内的直播公司大多没什么技术积累,传统视频公司都已经形成了自己的CDN+P2P甚至私有协议体系,当然也有使用DASH的,整体来说DASH的渗透率很低)。国外主要有youtube,hulu,netflix之类的大型视频网站使用。

四、码率自适应协议对比

目前有HLS/DASH/HDS/SSTR(MSSTR/MSS)

协议 HLS HDS MSS DASH
公司或组织 Apple Adobe Microsoft MPEG
索引文件 m3u/m3u8 f4m mr mpd
分片文件 ts mp4/f4f mp4 mp4/ts
使用 Apple及国内很多大型直播 国外视频及直播
编码标准 H264/AAC,似乎也支持HEVC 各种编码方式
延迟 相对较小
加密 AES-128加密 各种加密方式
可伸缩编码 支持
分片下载方式 单一 灵活多样

待补充

你可能感兴趣的:(DASH协议及各种码率自适应协议的对比)