我正在开发项目 witch 包含 6 个音频和视频元素,一个接一个地播放。发布前的代码顺序是这样的:
- 预加载所有媒体资源直到“可以播放”
- 播放视频-1
- 停止视频 1 并播放音频 1
- 停止 audio-1 并再次播放 video-1。
然后视频 1 播放 2-3 秒并停止发送错误代码 3(3 = MEDIA_ERR_DECODE - 解码时发生错误)。我试图通过链接播放相同的视频并且播放正常。
此外,该问题在某些浏览器的某些操作系统上随机发生。例如:
- Win10 最新 Opera - 发生
- Win10 最新的 Chrome - 很好
- MacOS 所有浏览器 - 很好
- 另一个 MacOS 最新的 Chrome - 发生在 10 个案例中的 1 个
- iPhone 所有浏览器 - 很好
- iPad 所有浏览器 - 很好
更新 它仅在第一次查看时或缓存被禁用时才会在 Win10 最新的 Opera 上发生。
更新 2 视频编解码器为 H.264,音频编解码器为 AAC,帧率为 24。
原文由 Dzmitry Vasilevsky 发布,翻译遵循 CC BY-SA 4.0 许可协议
MEDIA_ERR_DECODE 的定义
用于媒体错误代码的 HTML5 规范
Mozilla MediaError 文档
Firefox 错误消息(如本 支持票 中所示)
解雇的常见原因
1) 使用多个 DRM 方案(而不是一个)加密视频会导致在某些浏览器上解密失败;
2) 您忽略了在开始播放之前解密视频(可能是在您完成许可请求之前不小心将其设置为自动播放);
3) 没有足够的资源来解码视频,因为几个视频缓冲区(即使它们不是加密视频)已经用完了。
您的浏览器不支持特定的媒体格式(例如 DASH)。根据媒体类型,这可能可以通过插件进行修复。
您在
<source>
元素上设置了错误的 MIME 类型;请注意,某些浏览器更喜欢声明不同的 MIME 类型,以便解码某些视频格式。太多的视频缓冲区没有被清除就已经用完了。
你的情况的诊断
由于错误相当不确定地触发,这似乎是一个资源问题,而不是任何其他可能性。您有六个音频和视频元素一个接一个地播放,因此您应该在每次传送媒体时清除每个元素。您也不应该并排加载所有六个。
这与与 iOS 有关的 答案 类似。