I have a problem, when i'm playing a video on e.g movies control and then switch to home control with bringToFront() method. The video is still playing, atleast the sound is still doing it.
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&showinfo=0";
webBrowser1.DocumentText = string.Format(embed, url, width, height);
}
}
YouTube Player API Reference for iframe Embeds allows you to control the player using javascript code.
To be able to use that script API, you should load the iframe
by adding enablejsapi=1
to query string.
Then for pausing a video, you are looking for pauseVideo
command. Using the following script you can pause the video:
var i = document.getElementsByTagName("iframe")[0].contentWindow;
i.postMessage('{"event":"command","func":"pauseVideo","args":""}}', '*');
To be able to call it from windows forms, put it in a function in your html code, then call it using WebBrowserDocument.InvokeScript()
method of the broswer control.
Example
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&showinfo=0";
webBrowser1.DocumentText = string.Format(embed, url, w, h);
Then you can pause the video simply whenever you want:
webBrowser1.Document.InvokeScript("stop", null);