在 JavaScript 中检测视频的编解码器
Posted
技术标签:
【中文标题】在 JavaScript 中检测视频的编解码器【英文标题】:Detecting a video's codec in JavaScript 【发布时间】:2016-09-24 11:18:26 【问题描述】:我正在开发基于 Electron 的桌面应用程序(即 Node.js 和 Chrome 浏览器外壳),其中一项功能包括从本地文件系统加载任意视频文件。
我面临的一个挑战是我不知道任意视频文件使用的编解码器。我可以按文件扩展名进行过滤(即.mp4
、.webm
等)...但是 MP4 文件可以使用许多编解码器,这从文件扩展名中并不明显。在 html5 视频播放器出现空白之前,我真的不知道视频文件不受支持(而且我什至不确定如何以编程方式检测 THIS 何时发生) .
我已经在使用loadedmetadata
事件处理程序来检测视频的尺寸,但它似乎没有公开有关底层编解码器的信息。
有没有办法解决这个问题?我正在寻找可以识别本机“主”进程中的编解码器的 Node.js 包,而不是让 Chrome“渲染器”进程尝试在浏览器级别检测它。但是,我看到的所有 Node.js 视频包都依赖于 ffmpeg
可执行文件,我无法轻松地将其与我的 Electron 应用程序捆绑在一起。
有一百万个代码样本用于检测您的浏览器支持哪些编解码器。但这是假设您正在处理已知的视频文件和未知的浏览器。反过来呢……当您有一个保证已知的浏览器,但一个未知的视频文件?
【问题讨论】:
".. 我不能轻易地与我的 Electron 应用程序捆绑在一起" — 你可以使用 npmjs.com/package/ffbinaries 它将下载与用户平台匹配的二进制文件。所以你不必捆绑任何东西。 【参考方案1】:您可以使用mux.js 来检查文件中的 MP4 原子。您需要将文件加载到 UInt8Array,然后调用 muxjs.mp4.tools.inspect(bytes)
以获取已解析原子的列表。
【讨论】:
【参考方案2】:最简单的方法是使用 mux.js,如下muxjs.mp4.probe.tracks(e)
。这会返回一个轨道数组。
示例输出:
[
"id": 1,
"type": "video",
"codec": "avc1.64101e",
"timescale": 12288
,
"id": 2,
"type": "audio",
"codec": "mp4a.40.2",
"timescale": 44100
]
【讨论】:
以上是关于在 JavaScript 中检测视频的编解码器的主要内容,如果未能解决你的问题,请参考以下文章
YouTube“书呆子统计”如何运作。或者如何从 JavaScript 获取正在播放的视频的编解码器信息