DASH(Dynamic Adaptive Streaming over HTTP) ,是一种在互联网上传送动态码率的Video Streaming技术,类似于苹果的HLS,
DASH会通过media presentation description (MPD)将视频内容切片成一个很短的文件片段,每个切片都有多个不同的码率,DASH Client可以根据网络的情况选择一个码率进行播放,支持在不同码率之间无缝切换。
Youtube,B站都是用的这个方案。这个方案索引文件通常是mpd文件(类似HLS的m3u8文件功能),传输格式推荐的是fmp4(Fragmented MP4),文件扩展名通常为.m4s或直接用.mp4。所以用调试查看b站视频播放时的网络请求,会发现每隔一段时间有几个m4s文件请求。
DASH是由MPEG (Moving Picture Experts Group)组织制定
1. 主播直播流上传
2. 服务器的编解码封装
3. 流媒体分发器
mpd文件
切割后的媒体文件
4. 客户端
客户端加载mpd文件
解析MPD文件, 组成文件下载链接
当前的网速和支持的编码加载相应的视频片段进行播放
包括切片
一个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)等
fMP4(fragmented MP4),可以简单理解为分片化的MP4,是DASH采用的媒体文件格式,文件扩展名通常为(.m4s或直接用.mp4), 或者分别切分成mpa(音频), m4v(视频);