微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当存在SegmentTemplate @ presentationTimeOffset时,如何在DASH URL模板中替换$ Time $?

如何解决当存在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开始时间

$Time$的值 属性减去@t的值指定第一个的MPD开始时间 系列中的细分

A.3.3似乎也更正式地确认了 first方法

如果表示形式包含或继承带有@presentationTimeOffset的{​​{1}}元素,则URL的 媒体段i SegmentTemplate是通过将$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 举报,一经查实,本站将立刻删除。