可以通过操纵bufferBehind增加Shaka中的搜索范围吗?

问题描述

我正在尝试使用 Shaka 将实时 DASH 流的回溯时间增加到 15 分钟。认情况下,流可以从当前时间倒退到 5 分钟。这可以通过指示玩家存储过去 15 分钟的缓冲区来实现吗?我曾尝试使用 bufferBehind 并将其设置为 900(15 分钟)。这似乎不起作用,倒带不会超出 seek range

这是我使用的 DASH Live URL:https://livesim.dashif.org/livesim/testpic_2s/Manifest.mpd

解决方法

在 github 上问过这个问题并得到了帮助

简短的回答是肯定的,您可以这样做,但有一些重要的警告。

bufferBehind 用于在播放头移过时我们如何管理缓冲区中的内容。但这与您想要的不同。您确实想覆盖名为 timeShiftBufferDepth 的 DASH 属性,该属性定义了可用性窗口的宽度。

可用性窗口有效地表明“这是您可以随时请求的服务器上的内容量。”您可以使用 manifest.availabilityWindowOverride 覆盖它:

player.configure('manifest.availabilityWindowOverride',900); 这将忽略清单的 timeShiftBufferDepth 并使用 900 秒(15 分钟)的值代替。播放器中的搜索范围将变为 900 秒。

但是,如果服务器实际上没有保留那么多内容,那么对 900 秒前的内容的请求将导致 HTTP 404 错误,并且播放将在该位置停止。所以你不能用它来以任何方式控制服务器的行为,或者让内容不可用。

当我们运行直播流时(使用 Shaka Streamer),只有几个片段被保留在可用性窗口之外。当我们将新分段上传到云存储时,我们也会删除旧分段。

因此,对于我们的内容,增加播放器中可用窗口的大小是行不通的。根据您使用的编码器/打包器,您可以增加窗口大小并避免使用它。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...