流媒体

注:
1、此篇文章立足于巨人的肩膀之上,侵必删
2、有许多内容尚未完成,包括segment的类别,HTTP协议基础等

DASH

  • DASH的起源——

    MPEG(Moving Picture Experts Group,动态影像专家小组),源自ISO与IEC等国际组织的工作小组。MPEG-DASH技术由MPEG负责开发。

    对DASH的工作始于2010年,2011年1月成为国际标准草案,2011年11月成为国际标准。

    2012年4月,被MPEG制定,标准为ISO - ISO/IEC 23009-1:2019 - Information technology — Dynamic adaptive streaming over HTTP (DASH) — Part 1: Media presentation description and segment formats,后有两版较大更新(2014与2019年),最新标准于2019年提出。

    制作DASH标准的目的,源于Adobe的HTTP Dynamic Streaming、Apple的HTTP Live Streaming(HLS)与微软的Smooth Streaming等协议无法兼容,阻碍了音视频向全世界推广的进程,故而需要一项标准加以规范。

    而DASH本身,则是基于3GPP(3rd Generation Partnership Project,第三代合作伙伴计划)第9版的Adaptive HTTP Streaming(AHS),和Open IPTV Forum Release 2中的HTTP Adaptive Streaming(HAS)而产生的。(由于年代久远,对这两种方案有兴趣的可以自行查询)

    DASH的发展流程导图——


DASH行业论坛(DASH-IF,DASH Industry Forum | Catalyzing the adoption of MPEG-DASH (dashif.org))则进一步促进和催化了MPEG-DASH的采用,并帮助其从规范转变为实际业务。主要的流媒体和媒体公司,包括微软、Netflix、Google、爱立信、三星、Adobe等都在实际业务中尝试使用,并为不同使用环境创建了DASH使用指南。

  • DASH的工作原理(概述)

    • Server端将媒体文件分割为时间长度等长的片段(Segment),每个片段可以有不同的码率和分辨率;
    • 客户端通常通过对网络带宽的评估或者是自身缓冲区的大小,选择不同参数的片段。通过符合HTTP标准的GET请求进行对应片段的下载。

    客户端首先向服务器请求下载mpd文件,根据mpd文件和自身的条件,请求下载合适的媒体片段。由于在时间上,片段是对齐的,因此可以实现在不同片段间切换时,达到无缝切换的播放。

  • DASH标准(概述)

    首先要解释的概念是MPD(Media Presentation Description,媒体表示描述)文件。

    MPD为一个XML文件,他是用HTTP 中的URL(Uniform Resource Locators,统一资源定位器)表示媒体内容中不同质量和每种质量的各个段。其是一种分层的数据模型,见下图。

    • Period :

      标注了视频的时长信息,也可以看做是更新mpd文件的最长时长。

      一个Period通常表示一个媒体内容时期,包含一系列不同编码版本的的媒体组件,即不同视角或不同编解码器的视频,不同语言或者不同类型信息的音轨,字幕或标题等,这些组件具有某些特征,例如码率、帧率,音频通道等,这些特征在一个Period中是不会改变的。

      在直播场景下,MPD文件会更新Period以保证旧的Period被移除。

      客户端可以根据一个Period中可用的码率、分辨率、编解码器等进行调整。且Period可以用于分割内容,比如广告的插入,改变足球比赛的摄像机视角等。

    • AdaptationSet :

      包含了媒体呈现的形式,(视频/音频/字幕)。

      表示一个或多个逻辑相同的媒体内容组件的一系列可替换的编码版本,例如具有相同编解码器、语言、分辨率、音频通道格式等组件可以包含在同一个Adaptation Set中(但并非完全如此)。这种机制允许客户端消除一系列不满足其需求的多媒体组件。比如客户端只能解HEVC码流,自然不希望HEVC码流与AVC码流被封装在一个Adaptation Set中。

      另外,Period还可以只包含一个Adaptation Set,以满足MPD创建者的意图。例如,他只想让你看具有5.1声道音频的高清视频内容。

      如果有其他的媒体组件例如字幕等,也可以单独组合为一个Adaptation Set。

    • Representaiton :

      包含不同的码率、编码方式、帧率等。

      一个Representation描述一个或多个媒体内容组件的一个可交付的编码版本。

      在使用的编解码器、解码复杂度以及因此需要的CPU资源或呈现技术方面等更为深远的特征下,Representation都可能有所不同。

      Representation包含一个或者更多的媒体流(用于多路复用中的每个媒体内容组件,多路复用的意思指将多个信号组合成一个信号的过程)。

      任何一个Representation都足以用于渲染包含的媒体内容组件。意味着客户端可以在一个Adaptation Set中动态的在Representation中进行无缝切换。

    • Segment

      Representation中每一个具体的片段,以便可以得当的访问与交付。

      每个Segment通常具有相同的时间长度,按照媒体内容的呈现时间轴进行排列。MPEG-DASH不限制段长度或给出最佳长度的建议。长段意味着更有效的压缩,而短段用于实时场景和高度可变的带宽条件,如移动网络。

      直播时的Segment还有一个“可用时间“的特征,表示在这个时间可以访问直播场景。

      为了访问一个Segment,MPD中为每一个Segment提供一个URL,因此一个segment是通过单个HTTP请求检索的最大数据单元。

      对于已经分段的Representation,包含两种小段(Subsegment)—— 初始化Segment和包含静态媒体数据的Segment。段中有一个段索引,描述子段的表示时间范围与字节范围,可以通过HTTP1.1字节范围请求提前下载子段以生成适当的子段请求。

      为了实现在Representation中切换,MPEG-DASH引入了流接入点(Streaming Access Point)。例如,每个段通常以IDR帧开始,以便于可以在传输一个段之后切换不同的Representation。

    简而言之,一个视频首先分为Period,Period中包含Adaptation Set或是字幕等媒体组件,一个Adaptation Set中包含具有不同码率\分辨率等特征的Representation,而客户端则通过请求Representation中具有URL的Segment进行媒体内容的解码与播放。

    • Segment参考方案:

      制定标准为RFC3986

  • DASH相较于HLS的优势:

    • 更加通用,由MPEG组织制定,属于公用的标准

    • 相较于多轨媒体,减少了服务器的存储空间和传输带宽

      即如果要组合不同码率的视频和音频,例如视频5种码率而音频有4种,则需要20个组合;但若使用DASH协议,服务器端仅需存储5种视频文件和4中音频文件,客户需要什么版本的音频或者视频,分别请求即可(这也满足 Youtube,Bilibili等流媒体网站的播放模式)

    • 相较于HLS分段的m3u8格式,文件体积大大减小

  • DASH的实现

    • Exoplayer —— 开源项目,使得MPEG-DASH在Android上原生使用

    • 目前,Youtube Netflix已支持MPEG-DASH,且可以使用多种Mpeg-DASH播放器。国内,Bilibili已经支持DASH。

      虽然HTML5不直接支持MPEG-DASH,但是一些JavaScript可以通过HTML5的Media Source Extensions(MSE)使用MPEG-DASH。

      当与WebGL结合,MPEG-DASH基于HTML5的自适应比特率流还可实现360°视频的实时和按需的高效流式传输。This demo shows the Bitmovin Player displaying a 360° video with VR

    • 客户端与库(注:字体加粗项为我曾使用过)

      • Dash.js是Dash行业论坛官方参考和生产播放器。Dash-Industry-Forum/dash.js: A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers. (github.com)
      • Shaka是出自Google的开源dash播放器。Meet Shaka Player, Google’s HTML5 Video Player for Low Bandwidth Conditions (softpedia.com)
      • VLC多媒体播放器3.0将为MP4/MPEG和实时流媒体发布一个新客户端插件。官方下载:VLC media player,最棒的开源播放器 - VideoLAN
      • 跨平台FOSS多媒体框架GStreamer自从至少1.4版本以来支持MPEG-DASH和WebM DASH。GStreamer: open source multimedia framework。现已更新到1.20版本(2022年10月17日)
      • 开源程序库libdash独立于平台,可在Android、iOS、Windows Phone等移动平台上运行。bitmovin/libdash: MPEG-DASH Access Library - Official ISO/IEC MPEG-DASH Reference Implementation (github.com)
      • bitmovin为HTML5和Flash提供了bitdash MPEG-DASH播放器。
      • Viblast Player支持HTML5中的MPEG-DASH,并为iOS和Android提供SDK。[30]
      • 巴黎电信学院中GPAC的OSMO4支持MPEG-DASH。GPAC | Multimedia Open Source Project (imt.fr)
      • 克拉根福大学ITEC中的DASH-JS支持MPEG-DASH。ITEC – Dynamic Adaptive Streaming over HTTP (aau.at)
    • 服务器(注:字体加粗项为我曾使用过)

      • Brightcove Zencoder已支持MPEG-DASH transmuxing/transcoding。
      • Elemental Technologies视频处理解决方案支持DASH。
      • Helix Universal Server已支持各种模式下的DASH。
      • nginx-rtmp-module支持生成MPEG-DASH实时流。基于HTTP的动态自适应流#cite_note-35)但在1.2.0版本以前,只能使用dash.js的修改版本和bitdash播放。
      • nginx-ts-module支持实时MPEG-DASH
      • Nimble Streamer有实时和点播MPEG-DASH的支持。对点播来说,它支持H.265和H.264编解码器
      • Unified Origin支持MPEG-DASH。
    • DASH内容生成器(注:字体加粗项为我曾使用过)

      • ITEC的DASHEncoder。slederer/DASHEncoder: Tool to generated DASH content (github.com)
      • MP4Box及其来自Telecom ParisTech的GPAC的多媒体框架MP4Box · gpac/gpac Wiki (github.com)
      • 巴黎电讯的dashcast支持MPEG-DASH实时流
      • MediaGoom MPEG-DASH PackagerPackaging for MPEG-DASH — Unified Streaming (unified-streaming.com)
      • Bento4开源工具和SDKBento4;MPEG-DASH Getting Started - Bento4

不同的流媒体协议

小结——

协议类型 HLS协议 DASH协议 RTMP协议
连接方式 短连HTTP 短连HTTP 长连HTTP
推广公司 Apple ISO,Open Adobe
切片工具 FFmpeg MP4Box
Beno4-mp4dash
FFmpeg
-
索引文件 m3u8,m3u mpd -
分片文件 TS mp4/cmfv/cmfa/m4s Message
播放方式 本地播放 本地播放 实时播放
视频编码 AVC/HEVC… AVC/HEVC… AVC/VP9…
音频编码 AAC AAC/mp3… AAC/mp3…
原理 分片,更新索引文件 同左 即收即发
延时(?) 10-30s <HLS,灵活 >2s

参考文章

流媒体协议:互联网视频分发协议介绍(渐进式、HLS、DASH、HDS、RTMP协议) - 简书 (jianshu.com)

http推流原理 - 简书 (jianshu.com)

ITEC – Dynamic Adaptive Streaming over HTTP (aau.at)
标准小组官方网站,提供了一系列最新研究,工具,白皮书、视频序列的下载等

基于HTTP的动态自适应流 - 维基百科,自由的百科全书 (wikipedia.org)

MPEG_DASH Dynamic Adaptive Streaming Over HTTP | Bitmovin

自适应流媒体传输(四)——深入理解MPD_zhanghui_cuc的博客-CSDN博客_mpd

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

  1. DASH( Dynamic Adaptive Streaming over HTTP )协议

    DASH(Dynamic Adaptive Streaming over HTTP)是在2011年底由MPEG和ISO共同制定的标准,通过HTTP共同影音档案通讯协定,可使高品质影音内容通过网路传送到 ...

  2. A Survey of Rate Adaptation Techniques for Dynamic Adaptive Streaming Over HTTP(自适应流媒体的综述)

    为了避免出现视频卡顿或者重新缓冲的现象,目前有以下四种解决方案: 1.使用播放缓冲区.此方法可以克服短期的网络吞吐量变化. 2.编码变换.比如改变视频分辨率.压缩比或帧速率,但此方法计算量巨大,需要复 ...

  3. DASH流媒体MPD文件解析

    MPD文件本质是XML文件,其说明了DASH服务端流媒体视频切片的相关信息,包含分辨率,大小,帧率等等,因此在DASH客户端实现的第一步便是解析服务端的MPD文件,其常见结构如图所示: MPD文件来源 ...

  4. 浅谈HTTP Adaptive Streaming技术及其前景

    关键词:OTT  流媒体  HTTP Adaptive Streaming 本文已发表于<世界宽带网络>2011.6 第18卷第5期 总200期 HTTP Adaptive Streami ...

  5. 流媒体协议初探(MPEG2-TS、RTSP、RTP、RTCP、SDP、RTMP、HLS、HDS、HSS、MPEG-DASH)

    目录 一.综述 需求分析 协议定制 二.MPEG2-TS协议 三.RTSP协议.RTP.RTCP.SDP RTSP RTP.RTCP.SDP 四.RTMP 五.HLS.HDS.HSS HLS HDS和 ...

  6. Live Streaming Protocol--三种主流的流媒体协议MEPG DASH,HLS,Smooth Streaming及其manifest 文件字段解释

    文章目录 MPEG DASH协议 Manifest.mpd 1. Manifest.mpd简介 2. Manifest.mpd字段 HLS协议 1. manifest.m3u8字段 2. ts文件 s ...

  7. 流媒体协议介绍(RTP/RTCP/RTSP/MMS/HLS/HTTP progressive streaming)

    转载请标明出处:http://blog.csdn.net/xx326664162/article/details/51781399 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定的 ...

  8. 三种主流流媒体协议比较

    一.介绍 在流媒体协议中,常用的流媒体协议主要有 HTTP协议,RTSP协议和RTMP协议. 在国内视频网站多采用HTTP+MP4或者HTTP+FLV协议传输视频,而国外使用RTMP,RTSP等专门的 ...

  9. 私有RTP协议和标准流媒体协议

    先介绍下RTP协议: 实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议 ,该协议详细说明了在互联网上传递音频和视频的标准数据包格式 . RTP标准定义了 ...

最新文章

  1. 【学术相关】10篇顶会paper,入选微软学者,上海交大吴齐天的科研思考!
  2. 百度地图的实现,IIS6.0,.net4.0 无法使用POST和GET
  3. python实现高校教务管理系统_基于Python技术的教务管理系统的研究与开发
  4. .NET Core快速入门教程 4、使用VS Code开发.NET Core控制台应用程序
  5. mysql中如何计算党龄_党员的党龄如何计算?
  6. 微信小程序 悬浮按钮
  7. 【AI视野·今日CV 计算机视觉论文速览 第173期】Wed, 25 Dec 2019
  8. (193)FPGA上电后IO的默认状态(Vivado软件默认为z)
  9. vs哪个版本比较好用_哪个跨境电商erp比较好用,跨境电商erp哪个好一点
  10. 重新整理的三国9州,郡,地域数据
  11. 人名和成绩一起排序_Excel怎么按姓名笔画和拼音排序,后面的数字跟着一起变动...
  12. vlan划分-通过物理接口实现vlan通信
  13. 表单_内置Filed
  14. 电信怎么关闭信息接受服务器,怎么关闭短信接收功能
  15. pkcs8 和 pkcs1 之间 互相 转换
  16. Kubernetes全套笔记
  17. Kivy App开发之页面背景设置
  18. 软考:中级软件设计师总结
  19. python使用BeautifulSoup爬取2345电影网
  20. 《SEM运营36计》第10计:笑里藏刀

热门文章

  1. acwing基础课——Dijkstra
  2. PTA(三十三)面向对象程序设计 第五章 作业 7-4 分钟秒钟的时间相减 (30 point(s))
  3. C#面向对象Chatbot智能版
  4. 容错服务器ftserver网卡状态,容错服务器ftServer260045006300技术规格
  5. 网站选域名还是服务器,做网站怎么选择域名?
  6. python怎么建立画板_Python3使用PyQt5制作简单的画板/手写板实例
  7. 【手把手教你点亮 QQ手机腾训网 图标】[不用手机]
  8. Tensorflow应用之LSTM
  9. 40、100 个网络基础知识普及
  10. telnet 遗失对主机的连接