在 JavaScript 中检测视频的编解码器

Ste*_*ins 5 html javascript video node.js electron

我正在开发基于 Electron(即 Node.js 和 Chrome 浏览器外壳塞在一起)的桌面应用程序,其功能之一将包括从本地文件系统加载任意视频文件。

我面临的一个挑战是我不知道任意视频文件使用的编解码器。我可以按文件扩展名(即.mp4、.webm等)过滤...但 MP4 文件可以使用许多编解码器,这些编解码器从文件扩展名中并不明显。我真的不知道,一个视频文件不受支持,直到HTML5视频播放器出现空白(我甚至不知道如何以编程方式检测时,此发生)。

我已经在使用loadedmetadata事件处理程序来检测视频的尺寸,但它似乎没有公开有关底层编解码器的信息。

有没有办法解决?我正在寻找可以在本机“主”进程中识别编解码器的 Node.js 包,而不是让 Chrome“渲染器”进程尝试在浏览器级别检测它。然而,我看到的所有 Node.js 视频包都依赖于ffmpeg可执行文件,我无法轻松地将其与我的 Electron 应用程序捆绑在一起。

有一百万个代码示例用于检测您的浏览器支持哪些编解码器。但这来自假设您正在处理已知的视频文件和未知的浏览器。反过来呢……当你有一个已知的浏览器,但一个未知的视频文件时?

Mik*_*ith 1

您可以使用mux.js检查文件内的 MP4 原子。您需要将文件加载到 UInt8Array 中,然后调用muxjs.mp4.tools.inspect(bytes)以获取已解析原子的列表。