无法在 Webview2 上播放受 DRM 保护的视频流

Cannot play DRM protected video streams on Webview2

我创建了使用 Webview2 v1.0.818.41 的 WinUI 3.0 项目并将我的视频流应用程序加载到其中,但视频无法播放并报告多个 DRM 错误。

我还检查了视频流是否适用于我在计算机上安装的 Chromium Edge 版本的应用程序,它确实适用。这是我的用户代理字符串,我验证它与我从 Webview2 获得的用户代理字符串匹配:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36 Ege/90.0.818.62

经过一些调查,我发现 navigator.requestMediaKeySystemAccess 是在 Chromium Edge 上定义的,但在 Webview2 的客户端上没有定义。因为这是一个 UWP 应用程序,所以我怀疑 DRM 失败的四种可能性之一:

  1. 开发者模式?
    • 我之前知道 Xbox One 上处于开发者模式的 Legacy Edge 运行 将 DRM 内容的播放限制为 SL-150 及以下。这对 Webview2 是否适用,但比 Legacy Edge 更严格?
  2. 缺少应用权限或其他一些设置?
    • 我已经在清单中适当地设置了内容 URI,应用权限没有出现任何异常。
  3. Webview2 还没有 EME 支持吗?
    • 如果为真,这将令人惊讶,因为 EME 是 W3C 规范,并且 Chromium Edge 中已经内置了支持。
  4. Webview2 需要一些未指定的实例化 options/flags?

具有相关重要性的是,我还应该注意到我已经看到其他使用 Webview2 的视频流应用程序。我能知道的唯一方法是何时发生错误,但我在这些应用程序上看到错误消息,表明新组件正在使用中,所以我知道 DRM 已经被弄清楚了。

我能够确定此问题的根本原因是第 3 方工具未正确处理流。然而,我确实发现了以下问题:

  1. 从 v1.0.818.41 开始,Webview2 支持 EME
  2. 开发者模式不影响播放 DRM 保护内容的能力
  3. URL 必须使用 HTTPS,而不是 HTTP,否则 navigator.requestMediaKeySystemAccess 未定义。
  4. Webview2 上不需要特殊的应用权限或标志