MediaSource appendBuffer在不同的位置

时间:2016-05-09 00:15:52

标签: javascript html5 media-source

我正在尝试使用MediaSource播放两个单独的流(音频和视频)。我已成功地按任意大小的顺序附加缓冲区(通过XHR检索的ArrayBuffer类型):

  • 大小相同的XXX字节
  • XXX字节随机大小的块
  • XXX秒的大块翻译成字节

视频和音频播放完美且同步,所有范围均正确翻译。对于这些测试,我使用的是来自我的收藏集,webm格式和vp9编解码器的YouTube编码视频。

然而,问题在于寻找场景,其中在加载的段之前寻找玩家并且我想从该点或接近该点后面加载它们,而没有这个新段与任何先前附加的缓冲器顺序。

我尝试了一个明显的想法,即简单地假设MediaSource会识别应该附加新缓冲区的段位置,所以我的尝试只是获取与搜索时间间隔相关的流数据并将其附加到缓冲区,但是它不起作用,并发生以下错误:

Uncaught InvalidStateError: Failed to execute 'appendBuffer' on 'SourceBuffer':
The HTMLMediaElement.error attribute is not null.

我一直在尝试为此找到解决方案,尝试timestampOffsetappendWindowStart + appendWindowEnd无济于事。

我在文档中找不到如何将缓冲区附加到顺序以外的位置,我将不胜感激任何帮助,如果可能的话,还会对过程本身进行一些小的解释。

1 个答案:

答案 0 :(得分:3)

似乎我想做的事情是可能的,但不是我这样做的方式。用于DASH流的正确编码文件应该包含SIDX(段索引框)信息,这基本上是视频(或音频)本身在文件的开头/标题处存在的视频段细节,或者列在独立的.mpd文件中使用xml格式。这些段中的每一个都包含正确的信息,允许MSE(MediaSource扩展)播放未链接到先前附加缓冲区的附加段。