DASH流媒体MPD中的segmentTemplate
SegmentTemplate利用MPD中的属性代入公式计算可以得到相关通配符的数值,来提供给客户端进行相关地址解析。相较于segmentList,使用 SegmentTemplate 的方式,能够很大的减小 MPD 文件大小,不过会额外增加以下客户端解析 MPD 的时间,在直播情况下,MPD中的segment选择segmentTemplate,而不是segmentList。
对于SegmentTemplate,使用了$Number$ 和$Time$通配符进行替换。对于initialization,表示 Initialization Segment 的具体地址,使用了通配符$RepresentationID$,通配符$RepresentationID$对应于 Representation 标签中的 id 属性。
上图是DASH标准中对通配符的定义。
1、$Number$通配符的使用
在使用$Number$通配符的时候,represention中的segment用一个SegmentTemple来表示。Segment的URL中的$Number$是从SegmentTemple的startNumber开始的,计算公式为:
((时钟时间 - availabilityStartTime ) / (duration / timescale )) + startNumber
通配符$Number$表示当前的segment在represention中的序号。
eg:
从上图可知:
当前播放设备的时钟:2018-11-16T19:18:30Z
MPD的 availabilityStartTime 属性:2018-11-16T19:08:30Z
SegmentTemplate 的 duration 属性:90000
SegmentTemplate 的 timescale 属性:30000
SegmentTemplate 的 startNumber 属性:175032
得 ((2018-11-16T19:18:30Z - 2018-11-16T19:08:30Z) / (90000/30000)) + 175032,化简得 (600 秒播放时间) / (3 秒持续时间) = 200 个segment。将这些segment与 175032 起始segment相加,当前segment的 通配符$Number$的数值为175232,这样就得到了segment的URL。
2、$Time$通配符的使用
在使用$Time$通配符的时候,segmentTemplate会使用SegmentTimeline 来描述每个segment开始播放的时间。每个 SegmentTemplate 有 一个 SegmentTimeline。
SegmentTimeLine可以通过多个S标签,来标识在相同duration的segment。基本格式如下图所示:
t:是当前segment在当前represention的开始时间;
d:一个segment的持续时间(duration);
r:相同duration的segment还有几个。
通配符$Time$用来表示当前segment开始播放的时间,当segment的持续时间(d)发生变化的时候,MPD会用新的S标签来记录新的segment的URL。
eg:
第一个segment的 URL 为 155_video_1_2_255197799.mp4,最后一个segment的URL为 155_video_1_2_258441039.mp4。一个segment的持续时间为360360(属性d),可以得到下一个segment的URL为 155_video_1_2_255558159.mp4。和第一个segment有相同持续时间的segment有8个(属性r),由255197799+360360*[(0~8)+1]可以得到中间segment的地址。
DASH流媒体MPD中的segmentTemplate的更多相关文章
- EasyDSS RTMP流媒体服务器中调用videojs播放rtmp视频显示在左上角问题
本文转自EasyDarwin团队成员Penggy的博客:http://www.jianshu.com/p/f63f5b7c691b 问题描述: 近期我开发了一款新一代的RTMP/HLS流媒体服务器软件 ...
- EasyDarwin开源流媒体服务器中一种实现对作用域内new对象自动释放的方法(值得借鉴)
我们经常在开发过程中,在局部new了一个对象,我们就会在复杂的逻辑过程中担心这个对象是否已经被释放,需要在一大堆的if.else.while.break进行判断new对象是否还存在,或者相同的dele ...
- (数据科学学习手札109)Python+Dash快速web应用开发——静态部件篇(中)
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 这是我的系列教程Python+Dash快速web ...
- Azure 媒体服务支持 DASH 实时传送流
Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...
- 《周四橄榄球之夜》流媒体视频拆解:Twitch VS Amazon Prime
文 / Phil Cluff 译 / 王月美 原文链接:https://mux.com/blog/thursday-night-football-streaming-technology-showdo ...
- DASH简介及使用方法(FFmpeg, MP4Box)
DASH 为什么选择DASH YouTube采用DASH!其网页端及移动端APP都使用了DASH.DASH的其他采用者包括:Netflix, Hulu, … 什么是DASH 一种服务端.客户端的流媒体 ...
- 物联网架构成长之路(42)-直播流媒体入门(RTMP篇)
1. 安装RTMP流媒体服务器 以前其实我是利用Nginx-RTMP-module搭建过RTMP流媒体服务器,并实现了鉴权功能.参考https://www.cnblogs.com/wunaozai/p ...
- 流媒体选择Nginx是福还是祸?
CDN,视频云,已经“僧多粥少” 视频直播的持续升温,无意间也让带宽生意的争夺变得异常残酷.一时间,各种云计算.CDN.视频云提供商都在视频尤其是直播上投入重兵,揭竿而起的新生起义军们也正马不停蹄的赶 ...
- 如何使用 Microsoft Azure Media Services 现场直播,(Live Streaming) 直播流媒体系统
不久之前,微软公司宣布了 Microsoft Azure Media Services 实时直播服务 ( Live ) 开始进入技术预览阶段,公开接受用户测试. 而这些实时直播服务其实早已被 NBC ...
随机推荐
- IT技术人,“三十而已”
最近电视剧<三十而已>热播,我家的电视机自然也是被霸屏,我还是跟着妹纸看了看,开头和结局完整看完,中间看了一点,大部分都是在微信公众号上通过别人的文章看完的.我个人也已经30+了,今天也和 ...
- 【转载】PyChram简单使用教程
原文链接:https://www.cnblogs.com/yamei/p/5519818.html 一.PyChram下载官网:http://www.jetbrains.com/pycharm Win ...
- 【异常检测】孤立森林(Isolation Forest)算法简介
简介 工作的过程中经常会遇到这样一个问题,在构建模型训练数据时,我们很难保证训练数据的纯净度,数据中往往会参杂很多被错误标记噪声数据,而数据的质量决定了最终模型性能的好坏.如果进行人工二次标记,成本会 ...
- Ubuntu 18.04 安装配置 go 语言
Ubuntu 18.04 安装配置 go 语言 1.下载 下载 jdk 到 Downloands 文件夹下 cd 进入 /usr/local, 创建 go 文件夹, 然后 cd 进这个文件夹 cd / ...
- 第8章 Spark SQL实战
第8章 Spark SQL实战 8.1 数据说明 数据集是货品交易数据集. 每个订单可能包含多个货品,每个订单可以产生多次交易,不同的货品有不同的单价. 8.2 加载数据 tbStock: scala ...
- 随机陷阱和P值
如果让大家写一个50次的抛硬币实验的可能结果(头像H或字T),多半人在连续三个一样的后,会换一下.因为大家都知道,连续一样的越多,概率越小,越不可能发生.大部分人不会去想,其实HHHTT和HHHHH发 ...
- 区块链入门到实战(19)之以太坊(Ethereum) – 以太币
以太币的作用:防范以太坊网络被滥用和激励矿工. 与比特币网络有比特币类似,以太坊(Ethereum)也有自己的虚拟币 — 以太币. 以太币的主要作用有2个: 应用程序执行任何操作都需要支付以太币,防范 ...
- 使用 C# 捕获进程输出
使用 C# 捕获进程输出 Intro 很多时候我们可能会需要执行一段命令获取一个输出,遇到的比较典型的就是之前我们需要用 FFMpeg 实现视频的编码压缩水印等一系列操作,当时使用的是 FFMpegC ...
- 使用intellij IDEA远程连接服务器部署项目
由于不想每次打开上传的文件软件,故研究使用intellij IDEA集成 ,下面是我使用的过程的一些记录. 使用intellij 远程连接服务器连接Linux服务器部署项目,方便我们开发测试. 本人使 ...
- PJSIP开发指南-第二章
一.模块 2.1 模块框架 模块框架的主要作用是在应用程序组件之间分发SIP消息,PJSIP的所有的组件,包括dialog和transaction都是以模块方式实现的,没有模块,核心协议栈将不知 ...