Microsoft Edge 在 canPlayType 上错误支持 AV1

vpt*_*est 10 html javascript chromium html5-video microsoft-edge

Microsoft Edge 85 误报支持 AV1 视频编解码器。

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

videoElement.canPlayType('video/webm; codecs="av01.0.05M.08"')
Run Code Online (Sandbox Code Playgroud)

放置 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>
Run Code Online (Sandbox Code Playgroud)

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

phi*_*hip 0

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

我已经确认这在 Window 10 21H2 上的 Edge 103 中有效。浏览器仍会请求无法播放的 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");
}
Run Code Online (Sandbox Code Playgroud)

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