用JavaScript构建MPEG-DASH播放器。但是,我在实现搜索时遇到了问题,并且在如何使用MSE和相应的源缓冲区对象处理它时,似乎没有太多的参考资料。
据我所知,只要段正确编码(我通过SegmentTemplate使用单个m4s文件,而不是字节范围),就应该只需要为所需的任意点附加段(说10秒标记),然后将VideoElement的currentTime参数设置为标记。所有这些都有效,我可以确认段缓冲区没有错误,并且段的第一帧甚至可以在VideoElement中直观地加载。然而,它不会发挥,并且擦洗是不可能的。也没有错误。它只是在等待更多数据。
这可以通过添加所有以前的段来解决,直到任意点,但这是不切实际的。例如,dash.js不会这样做(但我不能确切地确定它正在做的事情以便进行正确的搜索)。我猜测我必须以某种方式动态修改sidx,mfhd和/或tfdt框,以欺骗浏览器相信我按顺序加载片段 - 但这似乎是过分的这样的标准。
当将碎片化的MP4段馈送到MSE源缓冲区时,任何人都知道如何跳转到任意点并继续播放?
答案 0 :(得分:0)
解决。
结果证明这将自动生效,只要:
A)I帧正确对齐。 (他们是,但有时候这是一个挑战,在这种情况下,如果由于编码或其实现引入了错误。)
B)在搜索点(及其后)加载段。因此,如果寻求10s标记,段加载应从10s标记开始并继续向前。
奇怪的是,我之前已经多次设置了这个(相当明显的)设置,但它无法正常播放或引入了一些渲染打嗝。据我所知,这些是由于段导入/缓冲例程中的一个小的实现错误。