自适应流媒体传输(四)——深入理解MPD

这是本系列的第四篇文章
在前三篇文章中,我首先介绍了如何生成dash内容,然后对比了在自适应流媒体传输系统中所使用的两种封装格式fmp4和ts,都是从比较宏观的角度进行的介绍,链接如下:
自适应流媒体传输(一)——DASH媒体内容的生成
自适应流媒体传输(二)——为什么要使用fragmented MP4
自适应流媒体传输(三)——和TS格式说再见

在这篇文章中,我们从更细节的角度,深入来看一下DASH系统中的MPD结构。

MPD结构

在MPEG-DASH中将一组不同编码参数的媒体内容和相应的描述集合定义为媒体展示(presentation)。这里的媒体内容是由单个或多个时间上连续的媒体时段(period)组成的,这些媒体时段的内容相互之间可能完全独立,例如在正片中插入的广告内容。每一个媒体时段包含一个或多个媒体内容组件(media content component),比如不同语言的音频组件、为同一节目提供不同视角的视频组件、不同语言的字幕组件等。每一个媒体内容组件都有对应的媒体组件类型(media content component type)标识,比如音频(audio)或视频(video)。每一个媒体内容组件可能有多个编码的版本(encoded version),被称为媒体流(media streams)。每一个媒体流继承了媒体内容、媒体时段和媒体内容组件的属性,同时还拥有自己的编码参数属性,例如码率、分辨率、编码器类型等等。MPD文件就是用来描述上面所提到的抽象概念和它们之间的关系的元数据文件。一个典型的MPD文件结构如下图所示
自适应流媒体传输(四)——深入理解MPD_第1张图片

DASH系统中的MPD文件是用XML编写的,其中的关键元素和各元素之间的嵌套关系在上图中得到了展示。由上图可以看到,一个MPD文件包含了如下的关键元素:

  1. 媒体时段(Period):媒体时段的概念如前所述,需要说明的是,在传输直播流时,可能会随着MPD文件更新而移除旧Period并加入新Period,通过这种方法达到直播的效果。一个媒体时段内可用媒体内容的编码版本不会变更,即可选的码率集合、语言集合、字幕集合不会再改变。
  2. 自适应集合(Adaptation Set):在MPD文件中,一个媒体时段由一个或者多个自适应集合组成,每一个自适应集合对应前面所提到的媒体内容组件。
  3. 媒体文件描述(Representation):在MPD文件中,每个自适应集合由一个或多个媒体文件描述构成,具体来说,具有相同语言、内容类型、图像宽高比属性的媒体文件描述才会被组织到同一个自适应集合中。每个媒体文件描述对应一个可独立解码播放的媒体流(其概念如前所述)。MPEG-DASH中的自适应切换就是根据网络环境或其他因素在同一个自适应集合的不同媒体文件描述之间进行切换。媒体文件描述是MPD中最小的抽象集合概念。
  4. 切片(Segment):在MPD文件中,每个媒体文件描述由一个或多个一定时长的切片组成,每个切片都对应各自的URL,或对应同一URL的不同字节范围(byte range)。在MPEG-DASH中,一个切片就对应一次HTTP请求可以取回的最大数据单元。关于切片的时长,需要说明的是一个媒体文件描述中的切片往往具有完全相同或近似相同的时长,不同媒体文件描述之间的切片时长可能不同。切片时长可以任意定义,但是切片时长往往代表了端到端传输延时的下界,所以在直播应用时一般会选择比较短的切片时长。在前面提到所谓自适应切换就是在同一个自适应集合的不同媒体文件描述之间进行切换,更具体地说,就是在播放完一个媒体文件描述的一个切片之后紧接着播放另一个媒体文件描述的一个切片,在这样的切换机制下,可以避免在客户端同时下载、解码来自不同媒体文件描述的多个切片,使得切换动作的实现更加简单。
    此外,MPEG-DASH中还定义了一些可选的结构,比如子描述(Sub-Representation)、子切片(Sub-Segment)等

下面是一个MPD文件示例,通过该MPD可以了解到:这是一个点播服务流,包含一个媒体时段,该媒体时段包含四个媒体内容组件,对应四个自适应集合,分别是双声道音频、环绕声音频、字幕、视频。两个音频媒体内容组件又分别提供了一个编码的版本,而视频媒体内容组件则提供了四个编码的版本,对应四个媒体文件描述。

自适应流媒体传输(四)——深入理解MPD_第2张图片

下面我们来看一个更复杂的MPD,在这里我以xml注释的形式详细解释MPD的结构。



  
  
  
     
     ad/
     
     
         
         
             
             720p.mp4
             
          	
             
         
         
         
             1080p.mp4
             
          	
             
         
     
  
  
  
  
    
    
      	
      
      
      
      
	
		AAAAR3Bzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAACcIARIBMBoNd2lkZXZpbmVfdGVzdCIKMjAxNV90ZWFycyoFQVVESU8=	
	
      
      
	
        car_cenc-20120827-89.mp4
        
          
        
      
      
	
	SegmentListExample/
	
	   
           
	   
           
           
           
           
           
           
           
           
           
           
        
      
    
    
    
      
      
	
	
	
        
	     
	     
		
	     
	
      
      
        car_cenc-20120827-8b.mp4
        
          
        
      
    
    
    
	
	
	
	
	
				
		
	
    
  

以上就是关于DASH系统中MPD结构的详细解析。读者朋友们可以参考google exoplayer来了解对应的代码实现和其他细节。

关注公众号,掌握更多多媒体领域知识与资讯
自适应流媒体传输(四)——深入理解MPD_第3张图片

文章帮到你了?可以扫描如下二维码进行打赏,打赏多少您随意~
自适应流媒体传输(四)——深入理解MPD_第4张图片

你可能感兴趣的:(DASH)