流媒体网络协议 -- DASH_dash协议-程序员宅基地

技术标签: 音视频  网络协议  


DASH介绍

DASH(Dynamic Adaptive Streaming over HTTP)全称为“基于HTTP的动态自适应流”,是一种自适应比特率流技术,
可以是高质量流媒体可以通过传统的HTTP网络服务器以互联网传递,支持TS profile和ISO profile。
类似的方案还有:

  • Apple的HTTP Live Streaming(HLS)
  • Adobe的HTTP Dynamic Streaming(HDS)
  • Microsoft的Smooth Streaming(MSS)

1. DASH工作原理

  • Server端将媒体文件切割一个个时间长度相等的切片(Segment),每个切片被编码为不同的码率/分辨率。
  • Client端通过评估自身的性能和带宽情况,下载相应码率和分辨率的切片。带宽好,下载码率高的切片;带宽差,下载码率低的切片。
    因为不同质量的切片在时间上是对齐的,所以在不同质量的切片之前切换的话,自然是顺畅的,从而达到无缝切换的效果。

2. DASH相比于HLS的优势:

  • 更加通用且正式的码率切换流媒体协议,由MPEG组织制定,而非私人公司制定的。
  • 相比广泛应用的HLS v3来说,可以减少多轨媒体的存储空间和传输带宽。
    多轨媒体有不同的audio、video和字幕,如果要将它们组合的话,那会有很多种不同的组合,(多视角case会有不同的video track)
    而FMP4是将audio、video和字幕分开的,没有封装在一起,那么就不需要将它们一一组合并存储以满足客户的不同需求。
    客户需要什么版本的audio 或video或字幕,分开请求即可,从而减少服务器的存储空间。
  • 基于模板的媒体描述文件相比m3u8文件,文件体积大大减小。

媒体描述文件

MPEG-DASH中也有类似HLS M3U8这种媒体描述文件,官方命名为MPD文件,实际上是一个XML文件。在这个XML文件中,官方定义了描述流媒体的tag。

  1. MPD
    MPD(Media Presentation Description)全称为媒体呈现描述,是一个XML文件。
    它完整的表示了视频的所有信息,包括视频长度,码率和分辨率等等。
    请求DASH URL实际上就是获得一个MPD文件。
  2. Periods
    时间段。一个或者多个Period组成一个MPD文件,每个Period表示一个时间段的媒体。
    比如某个码流的长度为60秒,假如分为三个Periods:Period1->015s;Period2->1640s;Period3->41~60s。
    在同一个Period内,可用的媒体内容及其各个可用码率都不会发生变更。
    直播情况下,服务器周期性的从MPD文件中移除已过时的Period,并增添新的Period。
  3. AdaptationSet
    自适应集合。描述同一时间段不同类型的媒体数据,如字幕,音频和视频。
    自适应集合,一个或多个AdaptationSet组成一个Period,AdaptationSet包含了逻辑一致的媒体呈现的格式。
    对于video来说,每个AdaptationSet由一组可供切换的不同码率/分辨率的码流组成。
    而对于audio来说,每个audio AdaptationSet对应同一种语言的不同质量的音频。
  4. Representation
    媒体表示。描述同一媒体数据类型的不同质量版本,即每个Representation仅码率、分辨率不同,其它都一样。
    一组媒体内容版本可切换的Representation组成一个AdaptationSet。
    比如视频有高质量、中质量、低质量三个版本,那么就对应三个Representation。
  5. Segment
    片段,DASH媒体概念的最小单位,表示一段小的媒体片段。
    每个Representation中的内容被切分成一段段Segments,使得客户端在播放时能够方便在不同的Representtation之间切换。
    每个Segment由一个对应的URL指定,客户端通过访问该URL获得可播放的媒体数据。
    Segment之间不允许相互覆盖,且是解码独立的,不依赖其它Segment。
    对于承载ISO profile的segment,可分为Initialization Segment和Media Segment。
    Initialization Segment包含MOOV,每个Representation只有一个。
    Media Segment包含媒体数据(moof+mdat),每个RePresentation有若干个。
    所以,DASH对媒体的描述如下图所示:

MPD文件夹解析

DASH中定义了3种类型的MPD文件,对应3种Segment URL的解析方式:

1. SegmentBase形式:

SegmentBase形式的MPD文件中,一种媒体类型只有一个URL,该URL对应的媒体文件就是 init segment + media segment,不再分段。
MPD文件如下:

<?xml version="1.0" encoding="UTF-8"?>
	<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		maxSubsegmentDuration="PT5.0S" 
		mediaPresentationDuration="PT9M57S" 
		minBufferTime="PT5.0S" 
		profiles="urn:mpeg:dash:profile:isoff-on-demand:2011,http://xmlns.sony.net/metadata/mpeg/dash/profile/senvu/2012" 
		type="static" 
		xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd">
		<Period duration="PT9M57S" id="P1">
		<!-- Adaptation Set for main audio -->
			<AdaptationSet audioSamplingRate="48000" codecs="mp4a.40.5" contentType="audio" group="2" id="2" lang="en" mimeType="audio/mp4" subsegmentAlignment="true" subsegmentStartsWithSAP="1">
			<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
			<Role schemeIdUri="urn:mpeg:dash:role:2011" value="main"/>
				<Representation bandwidth="64000" id="2_1">
					<BaseURL>DASH_vodaudio_Track5.m4a</BaseURL>
				</
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Ritchie_Lin/article/details/121733685

智能推荐

使用Docker在windows上安装IBM MQ_win系统中,可视化工具连接其他服务上的ibmmq-程序员宅基地

文章浏览阅读859次,点赞18次,收藏8次。Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完;在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察。

软考—系统集成管理工程师备考经验_信息系统管理工程师真题百度云-程序员宅基地

文章浏览阅读362次,点赞6次,收藏8次。关于软考--系统集成管理工程师的学习总结和教训_信息系统管理工程师真题百度云

淘宝/天猫自定义API操作 API接口,custom-自定义API操作-程序员宅基地

文章浏览阅读887次,点赞24次,收藏23次。淘宝/天猫平台本身并不直接提供“自定义API操作”的官方API接口。API接口通常是由平台方定义和提供的,用于开发者与平台进行数据交互。然而,淘宝/天猫开放平台允许商家和开发者通过其提供的官方API进行一系列的操作,这些API覆盖了商品管理、订单处理、用户信息、物流查询等多个方面。您可以利用淘宝/天猫开放平台提供的官方API,通过组合多个API调用,来实现您自定义的业务逻辑。这可能需要一定的编程能力和对平台API的深入理解。

Ubuntu 16.04简易安装Nginx-rtmp-module_libnginx-mod-rtmp_1.22.0-1ubuntu3_amd64.deb-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏5次。Ubuntu 16.04简易安装Nginx-rtmp-modulelibnginx-mod-rtmp是18.04上自带的,可以通过apt-get install libnginx-mod-rtmp进行安装,在16.04上如果想要安装,直接下载libnginx-mod-rtmp_1.14.0-0+xenial1_amd64.deb安装的话会被告知nginx版本过低,依赖有问题,需要16.04自带的..._libnginx-mod-rtmp_1.22.0-1ubuntu3_amd64.deb

mysql 字符 1024个字符限制 cast转为varchar 不限制字符长度 最大字符长度 group_concat长度限制_mysql 改变输出字符串最大长度-程序员宅基地

文章浏览阅读1.1k次。设置group_concat的最大长度然后再运行。_mysql 改变输出字符串最大长度

使用 Vite 和 Electron 进行开发 - 解决问题与经验分享_electron vite 原生模块处理-程序员宅基地

文章浏览阅读145次。Vite 是一个现代化的前端构建工具,它通过利用 ES 模块原生支持(ES Module)来提供快速的冷启动时间和热模块替换(HMR)能力。Electron 是一个流行的桌面应用程序开发框架,它允许使用 Web 技术(HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序。结合使用 Vite 和 Electron 可以带来许多好处,例如快速的开发周期、模块化的架构和跨平台的能力。然而,在使用这两个工具时,可能会遇到一些挑战和问题。接下来,我们将讨论一些常见的问题,并提供相应的解决方案。_electron vite 原生模块处理

随便推点

centos出现类似-bash: ls: command not found...和-bash: /bin/vi: input/output error的错误_-bash: /usr/libexec/pk-command-not-found: input/ou-程序员宅基地

文章浏览阅读7.5k次。centos出现类似-bash: ls: command not found...和-bash: /bin/vi: input/output error的错误_-bash: /usr/libexec/pk-command-not-found: input/output error

[Flutter翻译]GSoC ‘21:为Flutter创建一个桌面样本_flutter 桌面模板(1)-程序员宅基地

文章浏览阅读815次,点赞16次,收藏29次。两个主要的东西是能够从现有的analysis_options.yaml文件中加载配置文件,以及在规则列表中搜索特定规则的能力。经过与他和组织管理员的讨论,我找到了一个可以工作的项目。经过与Brett和团队的讨论,我们决定建立一个桌面样本,同时也是一个工具,帮助开发者管理他们项目的lint规则。今年,在Flutter Engage上,Flutter的桌面支持的测试版快照被纳入了稳定频道。你可以为不同类型的项目创建不同的规则配置文件。不幸的是,由于导师的不到位,今年的。这个博客显示了我为我的项目所做的工作。

ARC/OC对象自动管理内存_arc oc-程序员宅基地

文章浏览阅读1w次。ARC是一个编译器特征,它提供了对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系,而不用考虑对象的retain和release。转自hherima的博客原文:Transitioning to ARC Release Notes(苹果官方文档) ARC是一个编译器特征,它提供了对OC对象自动管理内存。ARC让开发者专注于感兴趣的代码和对象的关系_arc oc

JAVA设计模式(09):结构型-代理模式(Proxy)_pengzhile 是谁-程序员宅基地

文章浏览阅读5.8k次。代理模式是常用的结构型设计模式之一,当无法直接访问某个对象或访问某个对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,所访问的真实对象与代理对象需要实现相同的接口。根据代理模式的使用目的不同,代理模式又可以分为多种类型,例如保护代理、远程代理、虚拟代理、缓冲代理等,它们应用于不同的场合,满足用户的不同需求。1 代理模式概述近年来,代购已逐步成为电_pengzhile 是谁

C语言:结构体,枚举,联合_c语言使用枚举结构体实现计算器程序-程序员宅基地

文章浏览阅读347次。一.结构体类型创建结构体是一些值的集合,这些值称为成员变量。结构体的每一个成员可以是不同类型的变量。结构体的声明struct tag{ member-list;}variable-list;举例: 描述一个学生:struct Stu{ char name[20];//名字 int age;//年龄 char sex[5];//性别 cha..._c语言使用枚举结构体实现计算器程序

【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通_uds诊断协议-程序员宅基地

文章浏览阅读8.3w次,点赞285次,收藏1.8k次。【图解UDS】UDS汽车诊断标准协议(ISO 14229)带你入门到精通目录0 前言1 诊断的基本概念2 UDS诊断诊断协议2.1 诊断服务的概念2.2 诊断会话控制0x10服务2.3 会话访问0x27服务2.4 用于读/写的DID的0x22/0x2E服务2.5 故障存储相关的0x19和0x14服务..._uds诊断协议

推荐文章

热门文章

相关标签