首页 > 解决方案 > 自适应流媒体库(shaka / dash.js)不会在搜索时清除缓冲视频?

问题描述

似乎大多数自适应流媒体播放器在您搜索时都会清除整个缓冲区(直到没有缓冲的时间)。甚至 youtube - 例如播放 youtube 视频,提前几分钟搜索,然后返回原始位置。由于视频必须重新加载,因此会稍有延迟

dash.js 和 shaka 的行为方式相同,没有简单的方法可以更改它们

我有点能够通过nooping 这个函数来修补 DASH.js并且它可以工作 - 但会导致一些不受欢迎的行为,比如低比特率段被缓冲并且即使有多余的带宽也永远不会升级

如果您正在流式传输纯 mp4,Chrome 实际上会默认缓冲多个范围,但这不是 DASH / 自适应。有谁知道支持这个的 DASH 实现?

标签: video-streaminghtml5-videompeg-dashshaka

解决方案


我不知道,但我会阐明为什么 Shaka Player 不这样做。

当您不清除缓冲区时,浏览器有多个缓冲内容范围。跟踪哪些区域被缓冲以及哪些段映射到这些区域是复杂的。跟踪我们添加的最后一段并从那里继续前进要简单得多。如果我们正在向前播放并击中一个已经缓冲的区域,我们将需要跟踪哪些片段与该缓冲范围相关联,以便我们可以从中断的地方继续。这并非不可能,但重新开始要简单得多。

浏览器限制了我们可以缓冲多少内容。因此,我们会清除播放头后面太远的内容。这将擦除部分已经缓冲的区域。因此,如果有一个从 30-50 的区域映射到我们已经缓冲的段 6-8;如果我们清理了一些数据,现在只有 40-50 缓冲,我们不知道哪些段仍在缓冲。请注意,我们不能总是从清单中查看时间来确定哪些时间映射到哪些段,因为它可能不准确。

我们跟踪我们在播放头之前缓冲了多少,以避免提前缓冲太多(同样是因为浏览器限制)。拥有多个缓冲范围会使我们的计算方式变得复杂。尤其是当我们按顺序添加段时,也可能存在间隙。所以我们不能只看当前范围的末端来确定我们缓冲了多少。另外,在视频结束时缓冲大量高清视频在开始时也无济于事,因此我们需要清除这些内容以腾出空间。

您还提到低质量的细分市场永远不会消失。这也会发生在 Shaka Player 中。我们永远不会替换已经下载的片段。这也是为了简单起见(只有在暂停时才会合理地发生)。所以当我们碰到一个已经缓冲的区域时,我们会跳过它,即使我们可以下载高清。很难确定要按顺序播放哪个流以保持实时播放;再加上必须确定我们是否有足够的额外内容来替换已经缓冲的内容,这太复杂了。


推荐阅读