首页 > 其他分享 >Easy Tech:什么是MPEG-DASH协议

Easy Tech:什么是MPEG-DASH协议

时间:2023-06-12 20:34:54浏览次数:59  
标签:播放器 视频 MPD MPEG 码率 DASH Tech

MPEG-DASH

Easy Tech

#014#

MPEG-DASH是最流行的视频流协议之一,它广泛用于点播和直播,将媒体传输给各种终端设备,包括手机、平板、智能电视、游戏机等。MPEG-DASH是一种基于HTTP的流媒体传输协议,负责将视频从HTTP服务器传输给终端用户。在MPEG-DASH中,一个视频被分割成许多切片,这一信息被一个MPD记录。该MPD首先被传输给播放器,播放器基于当前网络条件和缓冲情况,基于MPD信息来请求合适码率&分辨率的视频切片。

本篇文章中,让我们一起来学习MPEG-DASH的基础知识、历史和它的重要特性等。

 首先,何谓ABR技术?

DASH是Dynamic Adaptive Streaming over HTTP的简称,是一种自适应码率流媒体技术。学习ABR技术很重要,因为它可以帮助我们更好地理解什么是DASH以及为什么使用DASH。

如果你已经很熟悉ABR,那么MPEG-DASH对你来说也就没有那么难了,因为它描述了ABR相关的机制。

ABR是Adaptive Bit-Rate streaming的简称,是指为确保视频在互联网上的流畅传输,而根据带宽条件自适应地调节视频码率和质量的过程。

使用ABR技术后,视频被转码为多种分辨率和码率的组合,这种组合被称为“rendition”,这些rendition的集合形成了码率阶梯(Bitrate Ladder)

下面就是一个码率阶梯:

1.   1080p 5.0 mbps

2.   720p 4.0 mbps

3.   640p 3.2 mbps

4.   480p 2.0 mbps

5.   270p 1 mbps

让我们假设视频已经按上述码率阶梯编码。当播放器开始播放视频时,它感知到的可用带宽假设是20mpbs。该带宽远大于码率阶梯中最高的5 mbps,所以播放器可以安全地以5mbps下载第一个视频切片(时长6s)。当播放器再次感知带宽变化,如果带宽依然很高,那么同样请求最高带宽的视频。

如果带宽突然下降到5mbps,播放器将有可能向服务器请求4mbps的切片(因为这时如果再请求5mbps的切片会很有风险)。收到4mbps的切片后,便开始播放这个视频切片。

整个视频都会持续这个过程。这就是码率和质量如何通过自适应带宽条件来不断变化的。在介绍了ABR之后,让我们来看看MPEG-DASH是如何助力ABR技术的。

 什么是MPEG-DASH?

正如我们在前文所述,ABR技术用于在视频传输时通过动态改变视频码率和质量来适应带宽变化和播放器的缓冲程度。

然而,如果一次性传输整个流媒体文件,将很难做到这一点,想象一下从Dropbox、S3或者 Google Drive下载视频文件。和其他类型的文件一样(如文本、数据),这个文件仅有一个,根本没有办法暂停下载并将其切换到一个不同的码率-分辨率组合(rendition),对吧?所以ABR技术并不适用于庞大而单一的文件

为了定期在文件之间动态切换,需要将文件处理并分解成小块。每一块都应该能够独立传输。除此之外,应该有一种机制来促进这种自适应的动态下载。

为了解决这些问题并为ABR视频流制定行业规范,2009年,MPEG组织为基于HTTP的视频流标准发布了CFP。在几家公司和行业组织的协作下,MPEG-DASH标准终于在 2012年4月被开发并发布出来。它在2019年被修订为MPEG-DASH ISO/IEC 23009-1:2019。

Easy Tech:什么是MPEG-DASH协议_人工智能

 MPEG-DASH如何工作?

从名字就可以看出,DASH(Dynamic Adaptive Streaming over HTTP)基于ABR工作原理,下图为DASH的工作原理:

Easy Tech:什么是MPEG-DASH协议_python_02

  • 一组电影的编码(或码率-分辨率组合, 即rendition)由MPEG-DASH打包服务或软件去打包,打包的过程是将每个rendition分割成指定时间的小片或小块(例如,2秒或4秒长)。
  • 打包器还将其如何分割视频以及视频的交付顺序记录在一个称为MPD或清单(manifest)的文本文件中。
  • 打包过的视频和清单被存储在源站服务器,并等待被分发给播放器(通常使用CDN)。
  • 在另一端,有一个兼容了MPEG-DASH的播放器,其中内置了ABR引擎。
  • 当用户按下播放键,应用程序或者视频播放器请求视频的MPD文件,在收到MPD后,播放器对其进行解析然后理解如何播放视频。
  • 播放器开始按照预定义顺序请求视频切片,解码它们并将视频显示给用户。
  • 播放器持续监测带宽条件。根据可用带宽,播放器选择MPEG-DASH MPD中描述的码率之一,并请求CDN从该变体(Variant)中发送下一个视频块。

整个过程会一直持续,直到视频播放结束(电影结束或者用户停止观看)。

再来回顾一下MPEG-DASH的工作原理:

  • MPD文件描述了电影视频的切割、排序方式以及传输信息。
  • 打包过的视频被存储在服务器上并通过CDN发送。
  • 视频播放器首先下载MPD,然后需要理解视频传输机制,感知可用带宽,再开始播放。
  • 根据缓冲大小和可用带宽,视频播放器请求该电影某个码率组合的视频切片。
  • 通过不断感知带宽条件和缓冲水平,播放器自适应地传输内容,以提供良好的用户体验。

 如何创建MPEG-DASH视频流?

如果你拥有一个单一的视频或者同一视频的几个码率-分辨率组合(rendition),你就可以创建与MPEG-DASH兼容的视频流。这个过程被称为打包,由专业的软件打包器完成。

目前市面上有多种打包器,其中最有名的包括:

  • FFmpeg
  • 谷歌的Shaka Packager
  • GPAC的mp4box
  • Bento4的mp4dash

它们都是由命令行驱动,最基本的操作就是在视频文件中指定打包器,并确认DASH参数(直播、点播、切片列表和切片时间线等),打包器将生成DASH兼容的视频流和DASH MPD文件。

 MPEG-DASH的清单(MPD)示例

下面是一个简单的MPEG-DASH清单(MPD)示例,通过DASH协议可以向DASH兼容的播放器传输视频。

<!--  MPD file Generated with GPAC version 0.5.1-DEV-rev5379  on 2014-09-10T13:23:18Z -->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT1.500000S" type="static" mediaPresentationDuration="PT0H9M56.46S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<ProgramInformation moreInformationURL="http://gpac.sourceforge.net">
<Title>dashed/BigBuckBunny_2s_simple_2014_05_09.mpd generated by GPAC</Title>
</ProgramInformation>
<Period duration="PT0H9M56.46S">
<AdaptationSet segmentAlignment="true" group="1" maxWidth="480" maxHeight="360" maxFrameRate="24" par="4:3">
<SegmentTemplate timescale="96" media="bunny_$Bandwidth$bps/BigBuckBunny_2s$Number$.m4s" startNumber="1" duration="192" initialization="bunny_$Bandwidth$bps/BigBuckBunny_2s_init.mp4"/>
<Representation id="854x480 595.0kbps" mimeType="video/mp4" codecs="avc1.42c01e" width="854" height="480" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="595491"/>
<Representation id="1280x720 1.5Mbps" mimeType="video/mp4" codecs="avc1.42c01f" width="1280" height="720" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="1546902"/>
<Representation id="1920x1080 2.1Mbps" mimeType="video/mp4" codecs="avc1.42c032" width="1920" height="1080" frameRate="24" sar="1:1" startWithSAP="1" bandwidth="2133691"/>
</AdaptationSet>
</Period>
</MPD>

更多DASH MPD的详尽列表,可在OTTVerse上查看:https://ottverse.com/free-mpeg-dash-mpd-manifest-example-test-urls/。

 MPEG-DASH特性

MPEG-DASH拥有很多特性,这些特性对于视频服务提供商充满吸引力。让我们来看下这些特性:

  • MPEG-DASH获得了播放器公司的广泛支持,并由国际社区积极发展。持续的Bug修复、改进以及各种特性使得MPEG-DASH成为视频服务的最佳选择。
  • MPEG-DASH同时支持点播和直播。
  • 获得了Android生态的支持,这对于在Android手机、电视以及其他设备上观看视频尤为重要。考虑到世界上很多人无法负担IPhone和Apple TV昂贵的价格,所以MPEG-DASH会是HLS很好的替代。
  • MPEG-DASH对编解码器没有要求,可以很好地与 H.264/AVC、AV1 或其他Codec一起使用。
  • MPEG-DASH同时支持MPEG-TS和fMP4容器格式。(审校者注:MPEG DASH最新版本和Fragmented MP4 关联更紧密一些,它确实也在老版本的标准中支持了 MPEG-TS。)
  • MPEG-DASH支持广告插入(包括客户端和服务器端的广告插入)。

 哪些播放器支持MPEG-DASH?

很多播放器支持MPEG-DASH且服务于各种应用和设备。一些播放器可以通过原生应用或者浏览器在Web上、Android Exoplayer、Roku、智能电视上播放MPEG-DASH视频。

Easy Tech:什么是MPEG-DASH协议_java_03

MPEG-DASH兼容播放器包括:

  • DASH.js
  • 带有MPEG-插件的VideoJS 或带有native DASH 播放的VideoJS7
  • Bitmovin
  • THEOPlayer
  • CastLabs
  • JWPlayer
  • NexPlayer
  • Radiant Media Player
  • Android Exoplayer
  • Roku

Easy Tech:什么是MPEG-DASH协议_人工智能_04

Roku可以播放MPEG-DASH视频流

下面是一个免费、开源的MPEG-DASH兼容Web播放器。

DASH.js Reference Player[1]

DASH.js reference player 是最佳MPEG-DASH在线播放器之一,它可以免费播放MPD文件。在我看来,它拥有非常易于使用的界面,并可以提供大量便捷且重要的信息来调试视频流。

Easy Tech:什么是MPEG-DASH协议_java_05

这些便捷的信息包括缓冲水平,可以告诉你正在使用的是哪个rendition,以及所有数据的时间线等等。它由开源 dash.js 播放器提供支持,并不断更新到最新版本,以便用户始终可以使用最新版本来调试MPD视频流。

Easy Tech:什么是MPEG-DASH协议_人工智能_06

 小       结

我希望这篇文章可以帮助你更好地理解MPEG-DASH。本篇文章中,我们介绍了ABR技术的基础知识、MPEG-DASH的历史及其工作原理、MPD文件示例、DASH兼容的视频播放器等等。在未来的文章中,我们会介绍更多MPD的基础知识,以及如何使用打包器(如Shaka、mp4box等等)打包MPEG-DASH。

我们下次见!祝大家观影愉快!


注释

[1] https://reference.dashif.org/dash.js/latest/samples/dash-if-reference-player/index.html


标签:播放器,视频,MPD,MPEG,码率,DASH,Tech
From: https://blog.51cto.com/u_13530535/6465234

相关文章

  • 一文简述FFmpeg
    Easy-Tech#017#——FFmpegFFmpeg是一款开源软件,用于生成处理多媒体数据的各类库和程序。FFmpeg可以转码、处理视频和图片(调整视频、图片大小,去噪等)、打包、传输及播放视频。作为最受欢迎的视频和图像处理软件,它被来自各行各业的不同公司所广泛使用。审校者注:FFmpeg项目由Fabrice......
  • AIM Tech Round 3 (Div. 1)-C. Centroids
    原题链接C.CentroidstimelimitpertestmemorylimitpertestinputoutputTree isaconnectedacyclicgraph.Supposeyouaregivenatreeconsistingof n vertices.Thevertexofthistreeiscalled centroid......
  • FFmpeg操作电脑摄像头实验
    最近在学习音视频相关知识,参考雷神(leixiaohua1020)的博客做了一些小实验,记录备忘。一、记录几条命令1、列出电脑支持的音视频设备ffmpeg-list_devicestrue-fdshow-idummy输出如下(节选了关键内容):[dshow@0000025feeb5d840]DirectShowvideodevices(somemaybebot......
  • odoo14在tree、kanban视图上添加dashboard
    效果图:  实现代码:js:view的类型原来1个js给拆分成了4个:view,controller,renderer,model​​1、view:AbstractView​​的子类,这是工厂类:类需要解析 ​​arch​​字段并设置其它3个类2、Renderer:渲染器,来自 ​​AbstractRenderer:负责在用户界面中展示数据;​​3、Contr......
  • [Multimedia][ChatGPT] 如何使用 ffmpeg 将一个包含绿幕的前景视频叠加到背景视频上,并
    要使用ffmpeg将包含绿幕的前景视频叠加到背景视频上,并将前景视频中的绿幕设置为透明色,您需要以下步骤:安装ffmpeg。首先确保您已安装了最新版本的ffmpeg。如果还没有安装,请访问官方网站下载并安装相应版本。使用chromakey过滤器将绿幕替换为透明色。chromakey过滤器可以识......
  • [C#] FFmpeg 音视频开发总结
    为什么选择FFmpeg?延迟低,参数可控,相关函数方便查询,是选择FFmpeg作为编解码器最主要原因,如果是处理实时流,要求低延迟,最好选择是FFmpeg。如果需要用Opencv或者C#的Emgucv这种库来处理视频流,也多是用FFmpeg做编解码然后再转换图像数据给Opencv去处理。用Opencv编解码延迟很高。其......
  • 使用ffmpeg合并两个音频文件
    #寻找指定路径下所有的wav文件find$filePath-iname"*.wav">wav.flist#依次取出每个wav文件,与test.wav进行合并forlinein`catwav.flist`doecho$lineffmpeg-ipath/to/test.wav-i$line-filter_complex"[0:a]volume=1,atrim=1:4[a1];[1:a]volume=0.5[a......
  • FFmpeg组合图片声音为视频课程
    需求:有了PPT,有了课程的录音,想直接生成PPT画面+同步声音讲解,这样就可以搞成视频课程了。要做的步骤:把PPT另存为图片,比如60页PPT,就是60个JPG;听声音,然后记录画面出现的声音文件的时间位置。 比如:p1.jpg   出现时间点0:0:0  ; p2.jpg  0:0:35 ,做成个excel列表;......
  • Windows环境FFmpeg下载、环境变量配置
    FFmpeg官网下载地址第一步:点击Download下载按钮第二步:选择适合当前的运行环境,选择windows第一个地址Windowsbuildsfromgyan.dev第三步:选择releasebuilds中合适的版本第四步:环境变量配置,我安装的目录是:E:\ProgramFiles\ffmpeg-6.0-essentials_build点击ffmpeg安装......
  • 2023年最新sentinel-dashbord部署安装(保姆级别)
    目录Sentinel-dashboard安装下载前景提要一、构建环境二、下载安装与配置1、进入百度搜索:Sentinel或访问地址:面向云原生微服务的高可用流控防护组件2、进入git主界面,然后找到如图位置(此处为各个发布版本)。3、看到版本信息,找到下载的位置进行下载就可以了。4、下载后在本地的盘中......