如何解决当存在SegmentTemplate @ presentationTimeOffset时,如何在DASH URL模板中替换$ Time $?
下面是对该问题的相当长的介绍,它是对ISO / IEC规范23009-1:2019的分析(“信息技术-HTTP动态自适应流(DASH)-第1部分:媒体演示)说明和细分格式”。
简介
ISO / IEC 23009-1:2019,5.3.9.4.4,表20指定在构造DASH流的段URL时如何替换$Time$
标识符:
此标识符替换为 所访问段的MPD开始时间。对于 段时间轴,这意味着该标识符 被替换为 段的
SegmentTimeline@t
属性 被访问。$Number$
或$Time$
可能 可以使用,但不能同时使用。
但是,当SegmentTemplate@presentationTimeOffset
不为零时,上述两种方法是互斥的。
第 first方法(“此标识符替换为所访问段的MPD开始时间的值”)在5.3.9.5.3中重复:
如果表示形式包含或继承带有
SegmentTemplate
的{{1}}元素,则 通过将$Time$
标识符替换为 k 位置的媒体段的URL 该段的MPD开始时间,如下所述。
该规范在5.3.9.6.1中定义了 MPD开始时间:
如果表示形式包含或继承带有
@presentationTimeOffset
的{{1}}元素,则URL的 媒体段iSegmentTemplate
是通过将$Time$
标识符替换为 如子节所述,MediaSegment.URL[i]
字符串中的$Time$
5.3.9.5.3。
因为MediaSegment[i].startTime
之前的定义为:
SegmentTemplate@media
(尽管MediaSegment[i].startTime
的单位是秒,这显然是不正确的,因为替换值应以时间单位表示,以避免四舍五入引起的混淆)
但是第二种方法,指定为与第一种方法等效(“ [...]这意味着该标识符替换为— MediaSegment[N].startTime=t[s]−o
属性[。 。]“),直接与第一个矛盾。
还在5.3.9.6.1的结尾处发现:
-通过最早替换
MediaSegment[N].startTime
标识符来获得媒体段的段URL 从SegmentTimeline@t
获得的演示时间。
这似乎与第二种方法一致,因为术语最早出现时间是在3.1.13中针对媒体细分进行定义的,没有任何与MPD文档有关。
问题
根据ISO / IEC 23009-1:2019,替代$Time$
的正确值是什么?是SegmentTimeline
还是$Time$
-SegmentTimeline.S@t
?
ISO / IEC 23009-1的历史
使用SegmentTimeline.S@t
模板占位符寻址段的想法似乎不是按照最早的展示时间,而是通过PTO调整的最早的展示时间随着时间的推移而发展。
如果我们回到ISO / IEC 23009-1:2014,我们可以看到5.3.9.4.4表16(2019年规范中的表20)中SegmentTemplate@presentationTimeOffset
的描述是术语“ MPD”开始时间”未使用:
此标识符替换为 段的SegmentTimeline @ t属性 被访问。 [...]
这似乎并没有引起混淆。我们还可以在5.3.9.5.3中看到:
-如果表示形式包含或继承带有
$Time$
的{{1}}元素,则 位置k处的媒体段的URL是通过将$Time$
标识符替换为 与该细分相关的时间地址。时间地址确定如下:
[...]
如果存在SegmentTimeline元素,则时间地址应由 将
SegmentTemplate
标识符替换为第k个分段的最早显示时间,如下所示: 记录在5.3.9.6的细分时间线中。
似乎传达了与2019年规范相同的意图。也是2019年规范的一部分:
通过最早替换$ Time $标识符来获得媒体细分的细分网址 从SegmentTimeline获得的演示时间。
存在于2014年规范中。
但是,2014年的规范已经包含以下文本:
如果表示形式包含或继承带有
$Time$
的{{1}}元素,则 媒体段i$Time$
是通过将$Time$
标识符替换为SegmentTemplate
字符串中的$Time$
。
同时具有与2019年规范相同的MediaSegment.URL[i]
伪代码定义,这与上面的声明相当混乱且矛盾。
尽管如此,我发现2014年的规范不太令人困惑,因为以上引用是我发现的唯一建议,建议在计算细分网址时应考虑PTO。
如果我们倒退更多,2012年规范似乎不会引起对$Time$
替代的混淆,因为它只提到两次,一次声称应该使用最早的演示时间,并且其他时候,应该使用MediaSegment[i].startTime
并且两个引用可以被认为是等效的。此外,在此版本的规范中SegmentTemplate@media
的存在几乎可以忽略不计,并且如果不在以后的版本中进行更改,则很难理解其相关性。
解决方法
根据ISO / IEC 23009-1:2019,替代$ Time $的正确值是多少?是SegmentTimeline.S@t还是SegmentTimeline.S@t-SegmentTemplate @ presentationTimeOffset?
正确的值为 SegmentTimeline.S@t 。
presentationTimeOffset
用于偏移媒体内部的时间戳,以便将样本放置在媒体时间线上的正确位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。