我正在尝试使用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无济于事。

    我在文档中找不到如何将缓冲区添加到顺序顺序以外的位置,我将不胜感激,并且可能的话,请对流程本身进行一些小的说明。

    最佳答案

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

    关于javascript - MediaSource appendBuffer在不同位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37106210/

    10-10 00:40