4

我指的是此链接上给出的媒体源 api 演示

对于给定的测试 webm 文件,它工作正常,但是当我尝试将文件名更改为自定义 webm 文件时,代码停止工作。

它正在生成以下错误:Uncaught Error: INVALID_STATE_ERR: DOM Exception 11在以下代码中: sourceBuffer.append(new Uint8Array(e.target.result));

为了检查自定义 webm 文件是否正常工作,我创建了一个测试页面,我在其中定义了一个包含该自定义 webm 文件源的视频标签。当我运行代码时,它工作正常。

我无法理解这种奇怪行为的原因。

4

2 回答 2

17

最可能的问题是您的 WebM 文件包含不以关键帧开头的集群。

在 Chrome 开发通道构建(即 Chrome 25 或更高版本)中,您可以通过以下步骤验证这一点。

  1. 在另一个选项卡中打开 chrome:media-internals。
  2. 返回带有测试页的选项卡并重新加载它。
  3. 当错误再次发生时,切换回 chrome:media-internals 选项卡并在“活动媒体播放器:”标题下查找底部条目。它应该具有您传递给 video 元素 src 属性的相同 blob: URL。
  4. 单击 blob: URL 以展开播放器数据。
  5. 单击“日志:”条目以显示播放器日志数据。
  6. 在“事件:”列中搜索具有“MEDIA_SOURCE_ERROR”的条目。这些条目应提供有关传递给浏览器的内容有什么问题的信息。

如果您看到类似“媒体片段不是以关键帧开头”的消息。那么这意味着您的文件具有不以关键帧开头的集群。这在 FFmpeg 生成的内容中很常见。您可以通过以下方式之一修复文件:

  1. 运行WebM自适应流指南2.2.5节中提到的sample_muxer程序
  2. 运行我作为mse-tools项目的一部分编写的 mse_webm_remuxer 程序。
于 2012-12-27T01:30:03.987 回答
0

更新:在我的案例中没有显示内部错误(接受的答案建议检查)但仍然是同样的问题

当我尝试使用媒体源扩展(MSE)通过MediaRecorder API播放录制的 .webm 文件时遇到了同样的问题。Chrome (51) 录音格式错误,Firefox (46) 似乎还可以。

要使其正常工作,您必须修复 .webm 文件中的提示:

  1. 克隆https://github.com/webmproject/libwebm
  2. 确保您的 cmake 版本 >= 3.2 ( https://askubuntu.com/questions/610291/how-to-install-cmake-3-2-on-ubuntu-14-04 )
  3. cmake .
  4. make
  5. ./sample_muxer -i original.webm -o fixed.webm
  6. 将 fixed.webm 加载到 DASH / 您自己的播放器中!

希望它对某人有所帮助。在没有 DASH 关键字的情况下搜索任何信息非常困难(我没有使用 DASH,仅使用相同的底层技术 - MSE):)

于 2016-06-12T12:29:02.863 回答