Microsoft Edge 对 canPlayType 上的 AV1 的错误支持

Microsoft Edge false support of AV1 on canPlayType

提问人:vptest 提问时间:10/6/2020 更新时间:6/26/2022 访问量:1425

问:

Microsoft Edge 85 具有 AV1 视频编解码器支持的误报指示。

像这样的检查返回“可能”,这通常表示视频编解码器可以安全使用。

videoElement.canPlayType('video/webm; codecs="av01.0.05M.08"')

放置 AV1 源元素会导致 Edge 选择 AV1 而不是其他编解码器,并且无法播放它。

<video playsinline loop autoplay muted>
    <source type="video/webm; codecs='av01.0.05M.08'" src="av1.webm">
    <source type="video/webm; codecs='vp9'" src="vp9.webm">
    <source type="video/mp4; codecs='avc1.64001f'" src="avc.mp4">
</video>

有没有其他方法可以更有效地检测编解码器支持,而不会出现上述误报?

JavaScript HTML HTML5 视频 Microsoft Edge Chromium

评论

0赞 Deepak-MSFT 10/7/2020
我尝试检查 MS Edge 85 和其他浏览器的问题。这是我的测试代码。我可以用MS Edge 85浏览器产生问题。我也尝试直接在 Edge 浏览器中播放视频,但它也没有被播放,而它在 Chrome 浏览器中工作正常。我试图找出这是否是一个已知问题,但没有获得有关它的信息。我建议您在 MS Edge 浏览器中按 ALT + SHIFT + I 键,并尝试向 Microsoft 提供有关此问题的反馈。感谢您的理解。
0赞 vptest 10/8/2020
Microsoft Edge 85 及更早版本正式不支持 AV1 视频。问题甚至不在于它不播放它(而相同版本的 Chrome 可以播放),而是浏览器从源元素中选择格式并使用 canPlayType 指示它是否可以播放它。
0赞 Deepak-MSFT 10/9/2020
感谢您提供有关该问题的更多信息。我们意识到了这个问题。作为当前的解决方法,我建议您尝试使用 JS 代码识别 Edge 浏览器,并通知用户 MS Edge 当前不支持 AV1 编解码器。此外,您还可以尝试为 Edge 浏览器动态分配支持的编解码器和源。暂时避免该问题可能会有所帮助。
0赞 vptest 10/10/2020
我也在Microsoft Edge 86 beta和87 dev上尝试过。可悲的是,同样的情况仍然存在于较新的浏览器版本中。识别浏览器以避免此类错误是一个肮脏的解决方案,我很想避免,但看起来没有其他选择。
1赞 vptest 5/14/2021
截至 2021 年 5 月,问题仍然存在

答:

0赞 phip 6/26/2022 #1

我听从了 @Deepak-MSFT 的建议,使用 JS 替换了 Edge 上的视频源。

我已经确认这在 Window 103 21H2 上的 Edge 10 中有效。 浏览器仍会请求无法播放的 AV1 WebM 文件,但随后会切换并播放 AVC MP4 文件。

// Target Edge on Windows with UserAgent and Platform strings
if (
  window.navigator.userAgent.toLowerCase().includes("edg") &&
  window.navigator.platform === "Win32"
) {
  // Select the video element
  const video = document.querySelector("video");
  
  // Select the playable source file and set video src
  video.src = video
    .querySelector("source[type='video/mp4']")
    .getAttribute("src");
}

这假定您只有一个 的源元素。查询选择器可以更具体,例如选择属性,以针对非常具体的来源。另一种选择是将属性添加到源元素,并以这种方式定位所需的源。type="video/mp4"codecsid