如何在Microsoft WebView2中启用媒体自动播放?

4
我正在使用一个WinForms应用程序,并在其中创建了一个WebView2实例来使用HTML5播放媒体内容。我一直在查阅文档,希望找到一种方法来启用WebView2中的自动播放功能,以便我的桌面应用程序可以在没有用户交互的情况下播放视频。
我尝试过以下方法:
- 我按照此文档更改了注册表,但没有成功。 - 我还在Microsoft Edge中启用了自动播放,但没有任何效果。
谢谢!

我的意思是,例如,<video src="一些资源" controls autoplay muted> - Jimi
什么方括号?你是指这个:[视频文件路径]吗?这是表示“待提供值”的标准方式。当然,这可以转换为例如 webView2.Source = new Uri(@"C:\Temp\somefile.mp4"); - Jimi
新的Chromium浏览器即使您传递了自动播放标志,也不允许自动播放。它们允许静音自动播放,但我不想要那个。我希望视频能够自动播放而不是静音。 - Imran Faruqi
是的,这就是为什么我建议直接将视频 file:/// 路径传递给 Source 属性。在这种情况下,视频会自动播放音频。muted 限制与 HTML 相关。关于 Chromium 浏览器的 限制,我在我的第一条评论中已经描述了。 - Jimi
我实际上还没有。很抱歉我没能有机会去做。但是我会的。然而,我相信这个问题在未来似乎已经得到解决,因为绕过浏览器策略并不总是可能的。 - Imran Faruqi
显示剩余6条评论
2个回答

3
经过彻底的研究,我找到了一个解决方案,我的团队负责人也找到了一个解决方案。
我首先想到的解决方法是,在初始化WebView2后立即在WebView2窗口上执行单击操作,可以使用此SO答案。这可以通过注册WebView2.NavigationCompleted事件来实现。
第二个解决方案更加优雅和适当,虽然需要最后的修饰,但任何人都可以根据自己的喜好进行改进。
var options = new CoreWebView2EnvironmentOptions("--autoplay-policy=no-user-gesture-required");
var path = @"C:\Program Files (x86)\Microsoft\EdgeWebView\Application\92.0.902.67";
var environment = await CoreWebView2Environment.CreateAsync(path, null, options);

var webView = new WebView2();
await webView.EnsureCoreWebView2Async(environment);

请注意变量"path"包含了WebView2运行时执行文件所在的目录。当微软发布新版本时,路径会发生变化。你也可以下载一个已固定的WebView2运行时,并将其包含到你的项目依赖项中。

我在以下代码处遇到编译器错误:var environment = await CoreWebView2Environment.CreateAsync(path, null, options);错误信息为: “'await' 操作符只能在异步方法中使用。请考虑使用 'async' 修饰符标记此方法,并将其返回类型更改为 'Task<WebView2>'。”但是为什么呢?这个方法确实是可等待的。 - Cesar Coll
除了具有返回类型为Task<T>的方法之外,您还必须在那里放置'async'关键字。例如:public async Task<T> MyMethod() { ... your method body ... } - Imran Faruqi
1
如果您将null作为CreateAsync的第一个(路径)参数传递,它也可以正常工作,这样做的好处是它不会绑定到特定版本或Edge的安装位置。 - JohnT

3

这是可能的。它帮助了我。

public MainWindow()
    {
        Environment.SetEnvironmentVariable("WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS", "--autoplay-policy=no-user-gesture-required");
        InitializeComponent();
    }

哇,这个问题的解决方案真是太简单了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接