1. MPEG-DASH介绍

前言:从接触MPEG-DASH到现在大概也有3个多月了,前几天需要在课上总结下这半年的工作,大概做了一个ppt,现在想进一步总结下,写一个关于DASH入门的文章,供后人参考。

2. DASH起源

DASH(Dynamic Adaptive Streaming over HTTP)是一种流媒体传输协议,在此之前,苹果、微软、Adobe等公司都有自己的自适应流媒体实现方式,之后联合在一起制定了MPEG-DASH标准,改标准于2012年制定完毕。


DASH起源

2.1 MPEG-DASH白皮书

  • Part1: Media presentation description and segment formats
  • Part2: Reference software and conformance
  • Part3: Implementation guidelines
  • Part4: Format Independent Segment encryption and authentication

我看的比较多的是第一部分,关于MPD定义的部分,对于理解DASH的结构还是比较有帮助的,实际上就是定义了MPD文件各个标签的含义,没有必要深究,很多在实际的MPD中都没有使用到,只需要学习实际MPD文件的结构就好了,实际的MPD是分层的结构,跟HTML类似,是用XML语言描述的,所以很好理解。

2.2 DASH的优点

在我看来,DASH有以下几点优点,

  • 整合了之前的几种自适应流媒体方案,方便播放器的兼容。
  • 内容提供商只需要提供一种视频格式就好,而不必考虑兼容性问题。
  • 有开放的开源软件进行集成,便于这项技术的扩散应用。
  • 对用户来说,提升了带宽利用率,可以提升观看体验,是最直接的好处。

3. DASH基本结构

DASH可以分成服务器端和客户端两个部分,其中服务端负责将由264,265,AVS等(国产的国际视频压缩标准)压缩过的文件切分成DASH支持的格式,并生成相应的MPD文件。客户端首先请求mpd文件,根据请求到的mpd文件,就可以知道链接所对应的视频的信息,包括一下信息,

  • 直播/点播
  • 切分的每一个片段的长度
  • 整个视频的长度
  • 有多少种对应的码率,分辨率
  • 视频片段URL地址信息(可以通过类似的命名依次推出)
  • 对于直播还有开始直播的时间

  • Fig1. DASH起源

3.1 切分示例

如下图所以,将一段1080p,10s的视频切分成5种码率5个片段,每个片段2s的视频。在播放时候,可能的一种请求方式见Fig3,当然以这种请求方式进行请求的话,观看者一定会受不了的,分辨率切换这么快,肯定让人崩溃了。


Fig2. 切分方式示例

请求顺序:


Fig3. 请求顺序示例

3.2 MPD介绍

MPD(media presentation description)描述了视频的所有信息,在白皮书的Part1部分有详细的介绍。MPD主要分成以下标签,

  • Period : 标注了视频的时长信息,也可以看做是更新mpd文件的最长时长。
  • AdaptationSet : 包含了媒体呈现的形式,(视频/音频/字幕)。
  • Representaiton : 包含不同的码率、编码方式、帧率信息等。
  • Segment : 每一个具体的片段。(1,2,4,6,10s …)


    Fig4. MPD层次结构

    实际播放的时候,视频会在一个AdaptationSet中的不同Representaiton 之间切换码率,会依次请求该Representaiton下不同Segment序列。

3.3 MPD代码

一个常见的mpd文件如下,可以清楚的看到各个字段是如何描述的。

<!--MPD file Generated with GPAC version 0.5.1-DEV-rev5379  on 2014-09-13T02:57:14Z
-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H12M14.17S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
<Title>
dashed/TearsOfSteel_4s_simple_2014_05_09.mpd generated by GPAC
</Title>
</ProgramInformation>
<Period duration="PT0H12M14.17S">
<AdaptationSet segmentAlignment="true" maxWidth="1920" maxHeight="1080" maxFrameRate="24" par="16:9">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<SegmentTemplate timescale="24000" media="tos_$Bandwidth$bps/TearsOfSteel_4s_$Number$.m4s" startNumber="1" duration="96000" initialization="tos_$Bandwidth$bps/TearsOfSteel_4s__init.mp4"/>
<Representation id="1920x1080 10.0Mbps" mimeType="video/mp4" codecs="avc1.4d4029" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="10045361"/>
<Representation id="1920x1080 6.0Mbps" mimeType="video/mp4" codecs="avc1.4d4028" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="6025488"/>
<Representation id="1920x1080 4.0Mbps" mimeType="video/mp4" codecs="avc1.4d4028" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="4011653"/>
<Representation id="1920x1080 3.0Mbps" mimeType="video/mp4" codecs="avc1.4d4028" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="3004351"/>
<Representation id="1280x720 2.4Mbps" mimeType="video/mp4" codecs="avc1.4d401f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="2416099"/>
<Representation id="1280x720 1.5Mbps" mimeType="video/mp4" codecs="avc1.4d401f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="1506971"/>
<Representation id="640x360 807.0kbps" mimeType="video/mp4" codecs="avc1.4d401e" width="640" height="360" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="807450"/>
<Representation id="640x360 505.0kbps" mimeType="video/mp4" codecs="avc1.4d401e" width="640" height="360" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="504741"/>
<Representation id="480x270 253.0kbps" mimeType="video/mp4" codecs="avc1.4d4015" width="480" height="270" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="253270"/>
</AdaptationSet>
<AdaptationSet segmentAlignment="true" bitstreamSwitching="true">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
<SegmentTemplate timescale="48000" media="tos_$Bandwidth$bps/TearsOfSteel_4s_$Number$.m4s" startNumber="1" duration="191472" initialization="TearsOfSteel_4s_simple_2014_05_09_set2_init.mp4"/>
<Representation id="audio 48000kHz 66.0kbps" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="65509"/>
<Representation id="audio 48000kHz 130.0kbps" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="129510"/>
<Representation id="audio 48000kHz 192.0kbps" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="191511"/>
</AdaptationSet>
<AdaptationSet segmentAlignment="true" lang="eng">
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
<SegmentTemplate timescale="1000" media="tos_$Bandwidth$bps/TearsOfSteel_4s_$Number$.m4s" startNumber="1" duration="4000" initialization="tos_$Bandwidth$bps/TearsOfSteel_4s__init.mp4"/>
<Representation id="subtitles" mimeType="video/mp4" codecs="wvtt" startWithSAP="1" bandwidth="101"/>
</AdaptationSet>
</Period>
</MPD>

4. 播放器开源开发平台

ITEC公示了一些关于dash的开发平台(link),下面对几个用过的做一下介绍(链接都需要科学上网方式),

  • DASH-JS
    用javascript写的dash播放器,只需要几行代码就可以将播放器嵌入到你的网页中,现在有两种自适应算法,一种基于预测带宽的,一种BOLA的方式。两种效果经过测试都一般(不知道测试的准不准确)。
  • libdash
    用C++ + QT开发的Windows桌面版版本,没有内置的自适应算法,代码中大量用到了Observer设计模式,还有工厂模式等,是学习C++面向对象思想以及设计模式的 很好示例。
  • Dataset
    我使用是就是这个数据集,包含了几个经典的视频(表示已经看吐了)。

Reference

  • encoding.com
  • ITEC
  • 微软DASH介绍

last modified: 2016-8-4
by. HolaGod (yl_li@pku.edu.cn)

MPEG-DASH介绍相关推荐

  1. MPEG DASH MPD文件字段解释

    转自:http://www.cnblogs.com/vleung/p/4162409.html MPEG DASH作为三大流媒体协议之一,诞生的目的是为了统一标准,因此是兼容SmoothStreami ...

  2. DASH标准ABR算法介绍

    文章目录 1. What is DASH? 1.1 MPD文件 1.2 QoE & ABR算法 附:VBR & AVC/H.264编码 附:DASH白皮书结构 [2.c] 2. Why ...

  3. Akamai首席架构师Will:WebRTC、QUIC、DASH、AV1都前景可观

    William Robert Law是Akamai媒体业务群的首席架构师,自从去年邀请他参加LiveVideoStackCon 2017后,我们就亲切的称他Will.在对他的邮件采访中,他谈到了中美科 ...

  4. 使用nginx搭建音视频点播服务——基于DASH协议

    文章目录 1 DASH流媒体协议 2 搭建点播服务 2.1 nginx代理 2.2 nginx-vod-module模块 2.3 配置nginx下的DASH点播服务 2.3.1 常规配置 2.3.2 ...

  5. ffmpeg 之 dash

    1 简介 在dash 协议出现以前, 各家公司都开发自己的私有流媒体协议,如微软的SS, 苹果的HLS,Adobe 公司的HDS, 3GPP组织的AHS.这给客户端开发者带来了很大的困扰,后由MPEG ...

  6. DASH 流媒体协议(Dynamic Adaptive Streaming over HTTP)概述——起源、MPD文件解析、相关项目

    流媒体 注: 1.此篇文章立足于巨人的肩膀之上,侵必删 2.有许多内容尚未完成,包括segment的类别,HTTP协议基础等 DASH DASH的起源-- MPEG(Moving Picture Ex ...

  7. WEB 视频开发-主流协议 HLS DASH

    作者 | 翁鹏 42 上篇文章介绍了 MSE 来播放流媒体,但是 WEB 视频开发并不只依靠 MSE.这篇文章就来介绍主流的两种协议 HLS 和 DASH,以及如何制作并使用支持这些协议开源的客户端库 ...

  8. 【Dash】Dash相关领域知识总结

    1.DASH介绍 DASH,又叫MPEG DASH,DASH:Dynamic Adaptive Streaming over HTTP ,是一种在互联网上传送动态码率的Video Streaming技 ...

  9. Dash相关知识总结

    Dash相关知识总结 1. DASH介绍 DASH,又叫MPEG DASH,DASH:Dynamic Adaptive Streaming over HTTP ,是一种在互联网上传送动态码率的Vide ...

最新文章

  1. python中用来捕获异常的是_python – 在一行中捕获多个异常(块除外)
  2. 机器学习笔记:logistic regression
  3. python 只能将最后一行写入excel_Python 应用 办公自动化之 Excel(上)
  4. 2020蓝桥杯省赛---java---B---10(整数小拼接)
  5. 科​目​三​智​能​考​试​系​统​实​际​道​路​考​试​项​目​评​判​标​准
  6. 【java机器学习】svm入门十讲
  7. 逐步淘汰,微软宣布多款产品将停止支持 IE11
  8. Oracle REGEXP_SUBSTR 字符串截取函数的使用
  9. Docker默认存储路径修改
  10. web页面直接跳转至其他页面
  11. 《21天学通C语言(第7版)》一2.4 小 结
  12. c++编译提示:系统找不到指定路径
  13. 百度网盘分享旁边的个人说明如何修改
  14. 汉字GB2312编码
  15. Android开发之手机震动器
  16. Python 日期模块的 datetime.date 类
  17. Java项目结构的总体理解
  18. antd 表格合计栏
  19. 弄底层基础的东西往往慢,枯燥,要慢慢磨
  20. InjectFix原理学习(实现修复加法的热更)

热门文章

  1. 慕课作业互评(使用脚本自动互评)
  2. 开源的杀毒软件--ClamWin
  3. 手游逆向专题<英雄联盟手游>: Unity内还原亚索渲染效果
  4. JavaScript_BOM浏览器对象模型
  5. 智能手机低价成潮,vivo为何执念高端?
  6. JFrame添加图片以及使用的教程
  7. 2020Java面试题汇总(2020年负重前行的Java码畜社招遇到的Java面试题---亲历总结)
  8. 为什么说大数据一定会从ABC里最先掉队
  9. Android手机连接笔记本电脑上网 linux环境
  10. 导航菜单背景切换效果