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 ...
随机推荐
- HashMap 21问!!
1:HashMap的数据结构? A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点.当链表长度超过8时,链表转换为红黑树. transient Node<K,V>\[\] t ...
- django自带orm妙用
django对数据库数据进行处理方式通常有以下几种方式: 1.使用原生sql对数据库进行处理:pymysql,cx_oracle 2.使用外置orm模块来对数据库进行处理:sqlalchemy 3.使 ...
- Docker 的前世今生
虚拟化 「要解释清楚 Docker,首先要解释清楚容器(Container)的概念」.要解释容器的话,就需要从操作系统说起.操作系统太底层,细说的话一两本书都说不清楚.这里就一句话来总结一下:操作系统 ...
- Centos7第一安装后无法联网
- SpringBoot整合WebSocket实现前后端互推消息
小编写这篇文章是为了记录实现WebSocket的过程,受不了啰嗦的同学可以直接看代码. 前段时间做项目时设计了一个广播的场景,具体业务不再赘述,最终要实现的效果就是平台接收到的信息实时发布给所有的用户 ...
- Java算法之根据二叉树不同遍历结果重建二叉树
二叉树的遍历方式一般包括前序遍历.中序遍历以及后序遍历: 前序遍历:根结点 | 左子树 | 右子树 中序遍历:左子树 | 根结点 | 右子树 后序遍历:左子树 | 右子树 | 根结点 二叉树遍历的性质 ...
- 操作系统-I/O(5)I/O软件的层次结构
IO软件的设计目标: (1)高效率:改善设备效率,尤其是磁盘I/O操作的效率 (2)通用性:用统一的标准来管理所有设备 IO软件的设计思路: 把软件组织成层次结构,低层软件用来屏蔽硬件细节,高层软件向 ...
- Shell编程—结构化命令(2)
1for命令 for命令的基本格式: for var in list do commands done 在list参数中,你需要提供迭代中要用到的一系列值. 1.1读取列表中的值 例子: $ vim ...
- idea Tomcat部署war和war exploded的区别
原文地址:https://blog.csdn.net/linjpg/article/details/73322881 在使用IDEA开发项目时,部署Tomcat的时候通常会出现以下情况: 是选择war ...
- 23种设计模式(C++)
每一种都有对应理解的相关代码示例 → Git原码 一. GOF-23 模式分类 从目的来看 • 创建型(Creational)模式:将对象的部分创建工作延迟到子类或者其他对象,从而应对需求变化为对象创 ...