我正在使用 ReactJS 构建一个上传器。当用户上传视频或音频文件时,我会获取 MIME 文件并注册类型(视频或音频)以便稍后显示图标。
当他们上传扩展名为
webm
(music.webm) 的音频文件且 MIME 类型为 video/webm
时,我遇到了问题,所以我将其注册为视频,而实际上我应该将其注册为音频。
我尝试解码视频并找到一些编解码器以确保没有使用 blob.text() 的视频,但我找不到信息,或者我不知道在哪里查找。
我知道这是可能的,因为玩家知道其中的区别。
如何检测webm文件是音频还是视频?
您可以从 ebml 标头中读取它。
import * as ebml from 'ts-ebml';
export const getMediaStreamType = async (buf: ArrayBuffer) => {
const decoder = new ebml.Decoder();
const ebmlElms = decoder.decode(buf);
const els = ebmlElms.filter(d => d.name === "TrackType");
return {
video: els.some((e: any) => e.value == 1),
audio: els.some((e: any) => e.value == 2),
};
}