首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在web编解码API中使用的有效编解码字符串是什么?

在web编解码API中使用的有效编解码字符串是什么?
EN

Stack Overflow用户
提问于 2022-04-14 22:24:43
回答 1查看 378关注 0票数 5

我想知道哪些字符串可以作为codec传递给VideoEncoder.isConfigSupported({ codec, width, height }),但到目前为止我还没有找到明确的答案:

  • TS声明文件只运行一定是字符串 (我希望能够在那里找到字符串常量的联合)。
  • 这篇来自google的webcodec文章只说明vp8是一个有效的编解码字符串。
  • 这些规格是我在浏览时遇到的一个兔子洞。
    • 他们描述编解码字符串应该做什么,但不包括广泛的列表
    • 他们精确,即编解码字符串必须与av01.*avc1.*vp8vp09.*匹配。从那里,有一些链接可以找到更多,但我找不到如何导航它们。例如,我想知道哪个编解码器是从av01.开始的,所以我去了其注册页,它链接了链接那里那里那里那里。前两个链接没有提到完全限定的编解码字符串,最后一个链接是从原来的网络编解码规范开始的:/

  • 关于mime类型中的编解码器的此MDN页面是相当完整的,并且解释了创建编解码字符串的规则,但是我尝试过的很多东西似乎都不起作用

由于只有铬基浏览器目前支持这一点,所以我决定查找铬源代码,并找到列出更多编解码字符串的位置:

  • 来自网络编解码器目录的测试显然是通过TEST.run运行的,这种测试不是从JS层触发的,而是从在这里,在这个python文件中找到的,其中提到了更多的编解码字符串:就在上面avc1.42001Evp8vp09.00.10.08
  • 这里似乎提到了一些编解码字符串,以及其他一些内容:videoh264vp8hevcvp9audioaacopus
  • 这个测试文件列出了与canPlayType一起使用的一组编解码器(不是web编解码器的一部分,而是相关的)。

所有这些都非常令人沮丧,因为我有一个相当大的编解码列表,有时可以传递给网络编解码器,但我不确定这是它的完整列表。我还应该去哪儿找呢?

代码语言:javascript
复制
const maybeCodecs = ["aac","ac-3","audio","avc1","avc1, mp4a.40","avc1, mp4a.40.02","avc1, mp4a.40.2","avc1.42001E","avc1.42101E","avc1.42701E","avc1.42E01E","avc1.42E01E, mp4a.40","avc1.42E01E, mp4a.40.02","avc1.42E01E, mp4a.40.2","avc1.42F01E","avc3","avc3, mp4a.40","avc3, mp4a.40.02","avc3", "mp4a.40.2","avc3.42801E","avc3.42C01E","avc3.42E01E","avc3.42E01E, mp4a.40","avc3.42E01E, mp4a.40.05","avc3.42E01E, mp4a.40.29","avc3.42E01E, mp4a.40.5","ec-3","flac","h264","hev1.1.6.L93.B0","hev1.1.6.L93.B0,mp4a.40.5","hevc","hvc1.1.6.L93.B0","hvc1.1.6.L93.B0,mp4a.40.5","mp4a.40","mp4a.40.02","mp4a.40.2","mp4a.66","mp4a.67","mp4a.68","mp4a.69","mp4a.6B","mp4a.A5","mp4a.A6","mp4a.a5","mp4a.a6","opus","theora","video","vp09.00.10.08","vp8","vp9"];

(async () => {
  if (typeof VideoEncoder === "undefined") return console.log('web codecs is not supported');
  const supportedCodecs = [];
  const unsupportedCodecs = [];
  const codecsThatTriggerError = [];
  for (const codec of maybeCodecs) {
    try {
      const { supported } = await VideoEncoder.isConfigSupported({ codec, width: 256, height: 256 });
      if (supported) supportedCodecs.push(codec);
      else unsupportedCodecs.push(codec);
    } catch(e) {
      codecsThatTriggerError.push(codec);
    }
  }
  console.log({ supportedCodecs, unsupportedCodecs, codecsThatTriggerError });
})()

EN

回答 1

Stack Overflow用户

发布于 2022-04-15 19:01:07

为了保持一致性,WebCodecs编解码器注册表中描述的格式字符串被设计成与ISOBMFF中使用的字符串相匹配。根据编解码器的不同,字符串中可能包含了相当数量的元数据,所以当列表是有限的时,是非常大的。

以AV1为例,ISOBMFF结合指定了

代码语言:javascript
复制
av01.<profile>.<level><tier>.<bitDepth>.<monochrome>.<chromaSubsampling>.
<colorPrimaries>.<transferCharacteristics>.<matrixCoefficients>.<videoFullRangeFlag>

其中大部分字段是可选的。

通常,如果可以根据编解码器注册中的定义对编解码字符串进行解析,则编解码字符串是有效的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71878207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档