似乎大多数自适应流媒体播放器在你寻找的时候都会清除整个缓冲区(直到一个没有缓冲的时间)。甚至是youtube --例如,播放youtube视频,向前寻找几分钟,然后回到原来的位置。因为视频需要重新加载,所以会有轻微的延迟
dash.js和shaka的行为方式相同,没有简单的方法来改变它们
我可以通过nooping this function对DASH.js打补丁,但这会导致一些不受欢迎的行为,比如低比特率数据段被缓冲,即使带宽过大也永远不会升级
如果你在流传输一个普通的mp4,Chrome实际上默认会缓冲多个范围,但这不是DASH /自适应的。有没有人知道支持这一点的DASH实现?
发布于 2019-04-25 01:34:32
我不知道,但我会解释为什么Shaka Player不会。
如果不清除缓冲区,浏览器会有多个范围的缓冲内容。这很难跟踪哪些区域被缓冲以及哪些段映射到这些区域。跟踪我们附加的最后一个片段并从那里继续前进要简单得多。如果我们正在向前播放并命中一个已经缓冲的区域,我们将需要跟踪哪些段与该缓冲范围相关联,以便我们可以从我们停止的地方继续。这不是不可能的,但从头开始要简单得多。
浏览器对我们可以缓冲的内容大小有限制。因此,我们清除了远远落后于播放头的内容。这将擦除已缓冲区域的一部分。因此,如果有一个30-50的区域映射到我们已经缓冲的段6-8;如果我们清理了一些数据,现在只有40-50个缓冲,我们不知道哪些段仍然被缓冲。请注意,我们不能总是查看清单中的时间来确定哪些时间映射到哪些段,因为它可能不准确。
我们跟踪我们在播放头之前缓冲了多少,以避免提前缓冲太多(同样是因为浏览器的限制)。拥有多个缓冲范围使我们如何计算这一点变得复杂。特别是因为当我们按顺序添加段时,也可能会有间隙。因此,我们不能只看当前范围的末尾来确定我们已经缓冲了多少。此外,在视频的结尾有大量的高清缓冲对我们在开始的时候没有帮助,所以我们需要清理它来腾出空间。
您还提到,低质量的部分永远不会消失。这在Shaka Player中也会发生。我们不会替换已经下载的片段。这也是为了简单起见(而且只有在暂停时才会合理地发生)。因此,当我们到达一个已经缓冲的区域时,我们会跳过它,即使我们可以下载HD。尝试确定按顺序播放哪个流以保持实时播放已经够难的了;再加上我们必须确定是否有足够的额外内容来替换已经缓冲的内容,这将过于复杂。
https://stackoverflow.com/questions/54647268
复制相似问题