无法使用媒体源扩展在 chromium 上播放 webM 文件。适用于 firefox 和 vlc

Unable to play webM file on chromium with Media Source Extensions. Works in firefox and vlc

我目前正在尝试使用媒体源扩展实现视频播放器。目前只是一个非常简单的概念证明,按照我发现的教程 here.

我使用 github here 中的所有源代码克隆了他们的存储库,并正在使用各种视频文件测试 Chromium 和 Firefox 上的实现。

两种浏览器的回购协议中的示例 webm 文件都运行良好。

接下来,我尝试使用 ffmpeg 和 mse-tools 将我从某个随机站点下载的视频转换为使用以下命令“对齐集群”的 webm 文件:

ffmpeg -i randomvideo.mp4 -c:v libvpx -c:a libvorbis output.webm
mse_webm_remuxer output.webm aligned.webm

同样,两种浏览器都运行良好。

最后,我想转换我在 blender 中创建的一个非常简单的动画(在 mp4 中使用 h264 渲染)。

我尝试使用与上述相同的过程转换生成的文件,并且该文件在 firefox 上正常播放,但没有在 chromium 上加载。

我假设我在转换文件时犯了一些错误,但是用 vlc 和 ffprobe 检查最终文件的属性,我找不到任何明显的问题。

关于我做错了什么有什么想法吗?

我做的最后一个测试是去 this site 获取一些示例 webm 文件。

我下载了“Big Buck Bunny Trailer in WebM”和“Elephants Dream as WebM File”。

这两个文件都可以在 firefox 中运行,但“Elephants Dream”文件无法在 chromium 中播放。

我在 linux 机器(Arch Linux 发行版)上使用以下浏览器版本:

Chromium Version 69.0.3497.100 (Official Build) Arch Linux (64-bit)

Firefox 62.0.3 (64-bit)

我已经在 google 驱动器 here 上分享了我从 blender 动画创建的文件(非常小 - 只有 36 KB),以防有人想查看它。

所以,在周末苦思冥想之后,我终于找到了我的小型搅拌机渲染 mp4 文件的问题。将其张贴在这里以防有人遇到类似问题。

我尝试用其他各种软件套件转换我的原始 mp4 文件,看看 ffmpeg 是否在做一些让我最终的 webm 文件不兼容的事情。尝试了几个在线转换器和一个商业视频转换器(试用版),但结果都一样。 MSE 没有视频。然后,偶然我使用 KDENLIVE 转换了它。不是真正的转换,而是 "rendering" 就好像它是一个视频编辑项目一样。令我惊讶的是,它奏效了!检查文件之间的差异后,我注意到 KDENLIVE 向 webm 文件添加了一个音频流。

这让我意识到没有音频的原始文件正在生成一个 mime 类型为 'video/webm; codecs="vp8"'(而不是 'video/webm;codecs = "vp8,vorbis"')的 webm 文件。所以我的解决方案是要么更改传递给 addSourceBuffer() 的 mimetype,要么生成带有静音音频流的 webm 文件(从而创建类型为 'video/webm;codecs = "vp8,vorbis"' 的文件)。

以上两种解决方案均有效,我的文件能够在 chromium 中播放。

作为最后的旁注,webm demo files site 中的 "Elephants Dream" 文件仍然没有按原样播放,但我用 kdenlive "re-render" 播放了它,并用ffmpeg,在这两种情况下,新文件都有效。所以我认为,原始文件可能存在一些问题。