非顺序地加载 MPEG-DASH 片段以进行搜索
Load MPEG-DASH Segments Non-Sequentially for Seeking
在 JavaScript 中构建 MPEG-DASH 播放器。但是,我在执行搜索时遇到问题,而且似乎没有太多参考资料 material 如何使用 MSE 和相应的源缓冲区对象处理它。
据我所知,只要片段编码正确(我通过 SegmentTemplate 使用单独的 m4s 文件,而不是字节范围),只需将片段附加到所需的任意点(例如 10 秒标记),然后将 VideoElement 的 currentTime 参数也设置为该标记。所有这一切都有效,我可以确认片段缓冲区没有错误,片段的第一帧甚至会在 VideoElement 中视觉加载。但是,它不会播放,并且无法进行擦洗。也没有错误。它只是表现得像是在等待更多数据。
这可以通过添加所有先前的段来补救,直到任意点,但这不切实际。例如,dash.js 不会那样做(但我不能确切地确定它做了什么不同的事情来允许正确的搜索)。我猜我必须以某种方式动态修改 sidx、mfhd、and/or tfdt 框,以欺骗浏览器相信我正在按顺序加载段——但这对于这样的标准。
任何人都知道如何在将碎片化的 MP4 片段提供给 MSE 源缓冲区时跳转到任意点并继续播放?
已解决。
原来这会自动工作,只要:
A) I 帧正确对齐。 (他们是,但有时很难判断,在这种情况下,是否由于一个人的编码或他们的实施而引入了错误。)
B) 在搜索点(和之后)加载片段。所以,如果要寻找 10s 标记,段加载应该从 10s 标记开始并继续向前。
奇怪的是,我之前曾多次进行过此(相当明显的)设置,但它无法正常播放或引入了一些渲染问题。不过,据我所知,这些是由于 import/buffer 例程中的一个小实现错误造成的。
在 JavaScript 中构建 MPEG-DASH 播放器。但是,我在执行搜索时遇到问题,而且似乎没有太多参考资料 material 如何使用 MSE 和相应的源缓冲区对象处理它。
据我所知,只要片段编码正确(我通过 SegmentTemplate 使用单独的 m4s 文件,而不是字节范围),只需将片段附加到所需的任意点(例如 10 秒标记),然后将 VideoElement 的 currentTime 参数也设置为该标记。所有这一切都有效,我可以确认片段缓冲区没有错误,片段的第一帧甚至会在 VideoElement 中视觉加载。但是,它不会播放,并且无法进行擦洗。也没有错误。它只是表现得像是在等待更多数据。
这可以通过添加所有先前的段来补救,直到任意点,但这不切实际。例如,dash.js 不会那样做(但我不能确切地确定它做了什么不同的事情来允许正确的搜索)。我猜我必须以某种方式动态修改 sidx、mfhd、and/or tfdt 框,以欺骗浏览器相信我正在按顺序加载段——但这对于这样的标准。
任何人都知道如何在将碎片化的 MP4 片段提供给 MSE 源缓冲区时跳转到任意点并继续播放?
已解决。
原来这会自动工作,只要:
A) I 帧正确对齐。 (他们是,但有时很难判断,在这种情况下,是否由于一个人的编码或他们的实施而引入了错误。)
B) 在搜索点(和之后)加载片段。所以,如果要寻找 10s 标记,段加载应该从 10s 标记开始并继续向前。
奇怪的是,我之前曾多次进行过此(相当明显的)设置,但它无法正常播放或引入了一些渲染问题。不过,据我所知,这些是由于 import/buffer 例程中的一个小实现错误造成的。