网站建设齐齐哈尔,蔡甸建设局网站,衡阳网站建设公司地址,网站群建设原则VS C# winform CefSharp 浏览器控件#xff0c;默认不支持视频播放#xff0c;好在有大佬魔改了dll#xff0c;支持流媒体视频播放。虽然找了很久#xff0c;好歹还是找到了一个版本100.0.230的dll#xff08;资源放在文末#xff09; 首先创建一个项目 第二、引入CefSha…VS C# winform CefSharp 浏览器控件默认不支持视频播放好在有大佬魔改了dll支持流媒体视频播放。虽然找了很久好歹还是找到了一个版本100.0.230的dll资源放在文末 首先创建一个项目 第二、引入CefSharp 100.0.230版本项目--管理NuGet程序包 第三、搜索 CefSharp 找到 CefSharp.WinForms点击在右边找到版本 100.0.230安装 等待安装完成... ...
项目创作完成后将三个dlllibcef.dll、libEGL.dll、libGLESv2.dll文件复制替换到Release或者Debug内再次生成就支持视频播放了.
之后会发现无法全屏全屏时只能在控件内全屏。
网上找了有个叫做OnFullscreenModeChange的接口试过一直无法成功最后通过曲线的方式实现了全屏就是通过监控网页全屏的方法回调C处理。
首先C#处理全屏无边框的操作
this.FormBorderStyle FormBorderStyle.None;
this.WindowState FormWindowState.Maximized;
经过多次测试发现必须先去掉边框在处理最大化才能覆盖任务栏。
CefSharp 注入JS 判断CefSharp 内视频是否是全屏
MyWeb.ExecuteScriptAsync(document.addEventListener(fullscreenchange,function(){var isfullnofull;if(!document.fullscreenElement){isfullnofull}else{isfullfull}var ret{type:fullscreenchange,isfull:isfull};CefSharp.PostMessage(ret)},false);document.onkeydownfunction(event){if(event.keyCode27){document.getElementsByTagName(iframe).exitFullscreen();document.exitFullscreen();var ret{type:ExitFull,keyCode:27};CefSharp.PostMessage(ret)}};);
如果是全屏就会返回isfullfullC#回调判断
if (eo.isfull full){this.FormBorderStyle FormBorderStyle.None;this.WindowState FormWindowState.Maximized;
}else{this.FormBorderStyle FormBorderStyle.Sizable;this.WindowState FormWindowState.Normal;
}
另外通过注入JS返回回调会出现不同线程错误所以需要设置允许跨线程
Control.CheckForIllegalCrossThreadCalls false;//允许跨线程调用
form1 this; //赋值
设置一个form1
public static Form1 form1;//跨线程设置
这样就可以在按播放器的全屏时实现全屏另外设置按键按Esc时退出全屏 public class CEFKeyBoardHander : IKeyboardHandler{public bool OnKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey){if (type KeyType.KeyUp Enum.IsDefined(typeof(Keys), windowsKeyCode)){var key (Keys)windowsKeyCode;// MessageBox.Show(key.ToString());switch (key){ case Keys.Escape:if (form1.menuStrip1.Visible false form1.FormBorderStyle FormBorderStyle.None form1.WindowState FormWindowState.Maximized){form1.menuStrip1.Visible true;form1.FormBorderStyle FormBorderStyle.Sizable;form1.WindowState FormWindowState.Normal;// browser.Reload();}break;}}return false;}public bool OnPreKeyEvent(IWebBrowser browserControl, IBrowser browser, KeyType type, int windowsKeyCode, int nativeKeyCode, CefEventFlags modifiers, bool isSystemKey, ref bool isKeyboardShortcut){return false;}}
按下Esc按键时判断窗体是否是全屏状态全屏状态时退出全屏非全屏状态不处理 完整源码https://download.csdn.net/download/xiaodouya87/88368735
视频DLL插件https://download.csdn.net/download/xiaodouya87/88368657