我想从 javascript 中的 webm 视频中提取视频轨道的编解码器字符串,并将其传递给浏览器的 VideoDecoder 配置方法来解码该视频。
例如:如果 webm 视频中视频轨道的编解码器在 EBML 格式的文件中是 V_VP9,但如何提取整个字符串,如“vp09.01.20.08.01”。
总而言之,我想要来自 javascript 中的 webm 视频文件的视频轨道编解码器字符串。
我尝试在 VideoDecoder 配置中仅设置“vp09”,但这会给出错误,因为编解码器字符串不明确。
您可以使用 MediaSource Web API
媒体源扩展 API 的 MediaSource 接口表示 HTMLMediaElement 对象的媒体数据源。 MediaSource 对象可以附加到 HTMLMediaElement 以在用户代理中播放。
然后,API 有一个
sourceopen
事件,您可以按照文档here 收听。
当 MediaSource 实例被媒体元素打开时触发 并准备好将数据附加到 SourceBuffer 对象中 源缓冲区。
我将从 Mozilla Web 文档示例之一开始编写我的 JS 代码这里,指定您的特定 webm 编解码器,并从那里构建。
const video = document.querySelector("video");
const assetURL = "frag_bunny.mp4";
// Need to be specific for Blink regarding codecs
// ./mp4info frag_bunny.mp4 | grep Codec
const mimeCodec = 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"';
let mediaSource;
if ("MediaSource" in window && MediaSource.isTypeSupported(mimeCodec)) {
mediaSource = getMediaSource();
console.log(mediaSource.readyState); // closed
video.src = URL.createObjectURL(mediaSource);
mediaSource.addEventListener("sourceopen", sourceOpen);
} else {
console.error("Unsupported MIME type or codec: ", mimeCodec);
}