我正在尝试使用 MediaSource 播放两个单独的流(音频和视频)。我已经成功地以任意大小的顺序附加了它们的缓冲区(通过 XHR 检索的 ArrayBuffer 类型):
- 大小相等的 XXX 字节块
- 随机大小的 XXX 字节块
- 将 XXX 秒的块转换为字节
视频和音频完美同步播放,所有范围都正确翻译。对于这些测试,我使用我收藏的 YouTube 编码视频、webm 格式和 vp9 编解码器。
然而,问题出现在寻找播放器的场景中,在该场景中,玩家在加载的段之前被寻找,我想从该点或该点之后的附近加载它们,而这个新段与任何先前附加的缓冲区没有顺序。
我尝试了一个明显的想法,即简单地假设 MediaSource 会识别应该附加新缓冲区的段位置,所以我的尝试只是获取与所寻找的时间间隔相关的流数据并将其附加到缓冲区,但它没有工作并发生以下错误:
Uncaught InvalidStateError: Failed to execute 'appendBuffer' on 'SourceBuffer':
The HTMLMediaElement.error attribute is not null.
我一直在尝试为此找到解决方案,尝试过timestampOffset
但appendWindowStart
无济于事appendWindowEnd
。
我在文档中找不到如何将缓冲区附加到顺序以外的位置,我将不胜感激任何帮助,如果可能的话,对过程本身进行一个小的解释。