当前位置: 首页 > 知识库问答 >
问题:

如何替换DASH URL模板中的$Time$SegmentTemplate@presentationTimeOffset有人在场吗?

慕嘉运
2023-03-14

以下是对该问题的较长介绍,该问题是对ISO/IEC规范23009-1:2019(“信息技术-HTTP上的动态自适应流传输(DASH)-第1部分:媒体呈现描述和片段格式”)的分析。

ISO/IEC 23009-1:2019,5.3.9.4.4,表20规定了在构建短跑流的段URL时,如何替换$Time$标识符:

该标识符被所访问段的MPD开始时间的值替换。对于段时间线,这意味着用SegmentTimeline@t正在访问的段的属性。可以同时使用$Number$$Time$

但是,当SegmentTemplate@presentationTimeOffset非零时,上述两种方法是互斥的。

5.3.9.5.3中也重复了第一种方法(“用被访问段的MPD开始时间的值替换该标识符”):

如果表示包含或继承了带有$Time$段模板元素,则位置k处媒体段的URL通过将$Time$标识符替换为该段的MPD开始时间来确定,如下所述。

规范在5.3.9.6.1中定义了MPD开始时间:

@t属性的值减去@presentationTimeOffset的值指定序列中第一段的MPD开始时间

此外,A.3.3似乎更正式地确认了第一种方法:

如果表示包含或继承了带有$Time$SegmentTemplate元素,则媒体段i的URL为MediaSegment。URL[i],通过将$Time$标识符替换为MediaSegment[i]获得。在SegmentTemplate@mediastring,如第5.3.9.5.3款所述。

自<代码>媒体段[i]。startTime早前定义为:

— MediaSegment[N].startTime=t[s]−o

(尽管MediaSegment[N].startTime的单位是秒,这显然是不正确的,因为替换的值应以时间刻度单位表示,以避免四舍五入造成的混淆)

但是第二种方法,指定为与第一种方法等效(“[...]这意味着这个标识符被SegmentTimeline@t属性[...]”的值替换),直接与第一种方法相矛盾。

同样在5.3.9.6.1的末尾,我们发现:

-媒体段的段URL是通过将$Time$标识符替换为从SegmentTimeline获得的最早呈现时间来获得的。

这似乎符合第二种方法,因为术语最早呈现时间在3.1.13中根据媒体片段定义,与MPD文档无关。

根据ISO/IEC23009-1:2019,替换$Time$的正确值是什么?是SegmentTimeline.S@t还是SegmentTimeline.S@t-SegmentTemplate@presentationTimeOffset

看起来,使用$Time$模板占位符寻址段的想法并不是根据最早的显示时间,而是根据最早的显示时间,通过PTO进行调整,这种想法随着时间的推移而发展。

如果我们回到ISO/IEC 23009-1:2014,我们可以看到5.3.9.4.4表16(2019年标准中的表20)中对$Time$的描述,没有使用术语“MPD开始时间”:

该标识符将替换为SegmentTimeline@t正在访问的段的属性。[...]

这似乎并不令人困惑。我们还可以在5.3.9.5.3中看到:

-如果表示包含或继承带有$Time$SegmentTemboard元素,则通过将$Time$标识符替换为与此段关联的时间地址来确定位置k处的媒体段的URL。时间地址确定如下:

[...]

如果SegmentTimeline元素存在,则时间地址应通过将$Time$标识符替换为5.3.9.6中Segment时间线中记录的第k个段的最早呈现时间来确定。

这似乎传达了与2019年规范部分内容相同的意图。还有2019年标准中的部分:

媒体片段的片段URL是通过将$Time$标识符替换为从片段时间线获得的最早呈现时间来获得的。

在2014年的标准中出现。

然而,2014年的规范已经包含了以下案文:

如果表示包含或继承了带有$Time$SegmentTemplate元素,则媒体段i的URL为MediaSegment。URL[i],通过将$Time$标识符替换为MediaSegment[i]获得。在SegmentTemplate@mediastring。

MediaSegment[i]具有相同的伪代码定义。startTime作为2019年的标准,这与上述陈述相当混乱和矛盾。尽管如此,我发现2014年的标准没有那么令人困惑,因为上面的引文是我发现的唯一一条建议在计算段URL时应考虑PTO的引文。

如果我们再回到过去,2012年的规范似乎不会对$Time$的替换造成混淆,因为它只引用了两次,一次声称应该使用最早的呈现时间,另一次,应该使用@t并且可以认为这两个引用是等效的。此外,在这个版本的规范中,PresationTimeOffset的存在几乎可以忽略不计,如果在以后的版本中没有引入更改,很难理解其相关性。


共有1个答案

和弘博
2023-03-14

根据ISO/IEC23009-1:2019,什么是正确的值来代替$Time$?是SegmentTimeline.S@t还是SegmentTimeline.S@t-SegmentTemplate@presentationTimeOffset?

正确的值为0。S@t.

presentationTimeOffset用于偏移介质内部的时间戳,以便将样本放置在介质时间线上的正确位置。

 类似资料:
  • 我有一段代码,它是做模板专门化的常用模式。为了移除main函数第一行中为Processor1指定DataType1的要求,我想改为接收一个template模板参数。看起来using指令不支持分配“open”模板参数,而且我在web中找不到任何这样的示例(可能我没有使用适当的关键字进行搜索...) 所以问题很“简单”,我如何让这段代码编译呢?在FindDefaultProcessor中,使用type

  • 在这里,我与Java一起做自动化,与放心一起做宁静。因此,我想用模板中的空白字符串替换第二个 &标记。 这里我附上了模板 我正在使用下面的代码替换第2个 和标记。但它被替换为所有 标记(第一个和最后一个 标记) 如何只替换第2个 和标记?请帮助我完成我的工作。

  • 编辑:我发现如果我向UnmarshallFromTemplate.docx添加一些文本并保存它,它不会替换新的文本行。-标记以某种方式拆分为多个标记: 编辑document.xml中的文本并添加缺少的信息没有多大帮助。 编辑2: 伙计们。我找到了一个非常适合自己的解决办法,不知道为什么花了这么长时间才弄明白。正如我所说的:运行在哪里分裂,原因是在我看来是${}。因此,我只是在占位符之前使用了一个#

  • 问题内容: 看起来新的AngularJS1.5组件概念中没有“替换”选项(就像用于指令一样)。 如果我想将 表格行 元素作为组件,您会提出什么建议?就有效的HTML而言,这是不可能的吗? 实际示例:mailBox组件内部具有邮件组件。通过标记,mail-box-component是table,而mail-box是tr。 UPD :有关指令的相关讨论-为什么AngularJS中不推荐使用replac

  • 我们希望替换整个xml文件中的一些特殊字符,并使用XSLT1.0对xml应用一些模板。 它将产生预期的输出。但这是示例xml文件,但实际上我们有许多节点的xml文件,其中可能包含需要用“*”替换的字符。在选择值时应用转换函数是一个巨大的过程。 有谁能指导我如何替换xml文件中的字符,然后应用模板来使用XSLT1.0获得预期的响应吗?。

  • 我有一项服务,我需要通过rest向外部服务器询问一些信息: 如何为getListofObjectsA()编写JUnit测试? 我尝试了以下方法: 然而,上面的代码不起作用,它表明为。如何更正测试以正确模拟restTemplate。交换?