有没有浏览器API可以从webm视频获取编解码器字符串?

问题描述 投票:0回答:1

我想从 javascript 中的 webm 视频中提取视频轨道的编解码器字符串,并将其传递给浏览器的 VideoDecoder 配置方法来解码该视频。

例如:如果 webm 视频中视频轨道的编解码器在 EBML 格式的文件中是 V_VP9,但如何提取整个字符串,如“vp09.01.20.08.01”。

总而言之,我想要来自 javascript 中的 webm 视频文件的视频轨道编解码器字符串。

我尝试在 VideoDecoder 配置中仅设置“vp09”,但这会给出错误,因为编解码器字符串不明确。

javascript video webm webcodecs ebml
1个回答
0
投票

您可以使用 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);
}
© www.soinside.com 2019 - 2024. All rights reserved.