C#在切换UserControls时暂停视频或停止Web浏览器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#在切换UserControls时暂停视频或停止Web浏览器相关的知识,希望对你有一定的参考价值。

我有一个问题,当我正在播放像电影控制的视频,然后用bringToFront()方法切换到家庭控制。视频仍在播放,至少声音仍在播放。

public partial class MoviesControl : UserControl
{
    public MoviesControl()
    {
        InitializeComponent();

        int width = 560;
        int height = 315;
        webBrowser1.Width = width + 2;
        webBrowser1.Height = height + 2;
        var embed = "<html><head>" +
        "<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>" +
        "</head><body scroll="no" style="padding:0px;margin:0px;">" +
        "<iframe style="border: 1px solid #0000ff;" width="{1}" height="{2}" src="{0}"" +
        "frameborder="0" allow ="autoplay; encrypted-media" ></iframe>" +
        "</body></html>";
        string url = "https://www.youtube.com/embed/JvSZKB2WNKg?rel=0&amp;showinfo=0";
        webBrowser1.DocumentText = string.Format(embed, url, width, height);
    }
}
答案

YouTube Player API Reference for iframe Embeds允许您使用javascript代码控制播放器。为了能够使用该脚本API,您应该通过将iframe添加到查询字符串来加载enablejsapi=1

然后暂停视频,你正在寻找pauseVideo命令。使用以下脚本,您可以暂停视频:

var i = document.getElementsByTagName("iframe")[0].contentWindow;
i.postMessage('{"event":"command","func":"pauseVideo","args":""}}', '*');

为了能够从Windows窗体中调用它,将它放在html代码中的函数中,然后使用broswer控件的WebBrowserDocument.InvokeScript()方法调用它。

int w = 560;
int h = 315;
this.webBrowser1.Width = w + 2;
this.webBrowser1.Height = h + 2;
var embed = "<html><head>" +
"<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"/>" +
"<script>"+
"function stop() {{"+
"var i = document.getElementsByTagName("iframe")[0].contentWindow;" +
"i.postMessage('{{"event":"command","func":"pauseVideo","args":""}}', '*');" +
"}}</script>"+
"</head><body scroll="no" style="padding:0px;margin:0px;">" +
"<iframe style="border: 1px solid #fff;" width="{1}" height="{2}" src="{0}"" +
"allow ="autoplay; encrypted-media" ></iframe>" +
"</body></html>";
var url = "https://www.youtube.com/embed/JvSZKB2WNKg?enablejsapi=1&rel=0&amp;showinfo=0";
webBrowser1.DocumentText = string.Format(embed, url, w, h);

然后,您可以随时暂停视频:

webBrowser1.Document.InvokeScript("stop", null);

以上是关于C#在切换UserControls时暂停视频或停止Web浏览器的主要内容,如果未能解决你的问题,请参考以下文章

解决网页播放鼠标移开屏幕或点击屏外视频暂停播放

单击视频时,如何使用 Javascript 切换多个视频的播放/暂停?

视频没有在片段 ViewPager 中暂停

是否可以在 iframe 上停止/暂停视频?

Youtube video iframe API - 如何在失去焦点时暂停视频?

Sinch 暂停传出的音频或视频