我正在尝试使用 MediaSource API 将单独的 WebM 视频附加到单个源。
我发现一个Github 项目正在尝试同样的事情,其中加载了一个 WebM 的播放列表,每个都附加为一个 SourceBuffer。但它最后一次提交是在一年前,因此与当前规范不同步。所以我将它分叉并更新到最新的 API 属性/方法,以及一些重组。许多现有代码直接取自规范的示例和Eric Bidelman 的测试页面。
但是,我无法让它按预期工作。我正在两个浏览器中进行测试,都在 Mac OS X 10.9.2 上:Chrome 35 stable(撰写本文时最新)和 Firefox 30 beta,其标志media.mediasource.enabled
设置为true
about:config(此功能要到FF 25,当前稳定为 24)。
这是我遇到的问题。
两种浏览器
我希望视频最终成为一个由 11 个 WebM(00.webm、01.webm、...、10.webm)组成的长视频。现在,每个浏览器只播放一段视频。
铬合金
非常不一致的行为。似乎不可能可靠地重现这些错误中的任何一个。
- 有时视频是空白的,或者中间有一个高高的黑条,并且无法播放。
- 有时视频会在 01.webm 的第一帧加载并暂停。
- 有时,视频会播放几帧 02.webm 并暂停,只加载了前三个片段。
- 播放按钮最初是灰色的。
- 按下灰显的播放按钮会产生非常不一致的行为。有时,它会加载黑色、无法播放的视频。其他时候,它会播放第一段,然后,当你到最后,它会停止,当你再次按下播放/暂停时,它会加载下一段。即使这样,它有时也会跳过段并卡在 04.webm 上。无论如何,它永远不会播放最后一段,即使控制台会报告通过所有缓冲区。
老实说,每次都不同。我不能在这里一一列举。
已知警告:Chrome 目前没有实现sourceBuffer.mode
,虽然我不知道这可能会产生什么影响。
火狐
- 只播放 00.webm。总运行时间为 0:08,即该视频的长度。
- 视频搜索不起作用。(这可能是预期的行为,因为在 onSeeking 事件处理程序中实际上没有发生任何事情。)
- 视频完成后无法重新启动。
我最初的理论是,这与mediaSource.sourceBuffers[0].timestampOffset = duration
和有关duration = mediaSource.duration
。但我似乎无法从mediaSource.duration
except 中得到任何回报NaN
,即使我正在附加新的段。
完全迷失在这里。指导非常感谢。
编辑:我取消了代码的持续时间部分的注释,并mse_webm_remuxer
从Aaron Colwell 的媒体源扩展工具(感谢Adam Hart的提示)上运行了所有视频。瞧,Chrome 中不再有不可预测的故障!但是,唉,一旦媒体片段结束,它仍然会暂停,即使你按下播放,它有时也会卡在一个帧上。
在 Firefox Beta 中,它不会超过第一段,响应:
TypeError:分配给 SourceBuffer.timestampOffset 的值不是有限浮点值。
记录duration
返回值NaN
(但仅在 FF 中)。