Visual Studio 2019 C# winform CefSharp 中播放视频及全屏播放

news2024/11/20 7:16:06

VS C# winform CefSharp 浏览器控件,默认不支持视频播放,好在有大佬魔改了dll,支持流媒体视频播放。虽然找了很久,好歹还是找到了一个版本100.0.230的dll(资源放在文末)

首先创建一个项目

第二、引入CefSharp 100.0.230版本,项目--管理NuGet程序包

第三、搜索 CefSharp 找到 CefSharp.WinForms,点击,在右边找到版本 100.0.230安装

等待安装完成...

...

项目创作完成后,将三个dll(libcef.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 isfull='nofull';if(!document.fullscreenElement){isfull='nofull'}else{isfull='full'}var ret={type:'fullscreenchange',isfull:isfull};CefSharp.PostMessage(ret)},false);document.onkeydown=function(event){if(event.keyCode==27){document.getElementsByTagName('iframe').exitFullscreen();document.exitFullscreen();var ret={type:'ExitFull',keyCode:27};CefSharp.PostMessage(ret)}};");

如果是全屏,就会返回isfull:full,C#回调判断

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 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1039197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware安装debian11虚拟机详细步骤

VMware安装debian11虚拟机详细步骤,超详细,一次搞定。 目录 1,新建虚拟机 2,开始安装 3,磁盘分区(手动) 分区设置 配置LVM卷 4,软件包管理器、网络镜像等 5,完成安…

UOS 序列号激活指令及方法

前言:本方案主要介绍了6种不同的激活方式,包括 1、在线激活; 2、离线激活; 3、激活文件激活; 4、终端命令激活; 5、试用期激活; 6、测试激活码激活。 附:激活码正版验证网页&#xf…

Fedora Linux 39 Beta 预估 10 月底发布正式版

Fedora 39 Beta 镜像于今天发布,用户可以根据自己的使用偏好,下载 KDE Plasma,Xfce 和 Cinnamon 等不同桌面环境版本,正式版预估将于 10 月底发布 Fedora 39 Beta 版本主要更新了 DNF 软件包管理器,并优化了 Anaconda …

kotlin的集合使用maxBy函数报NoSuchElementException

kotlin设定函数 fun test() {listOf<Int>().maxBy { it } } 查看java实现

Vue+iview 组件中通过v-for循环动态生成form表单进行表单校验

在做项目时&#xff0c;需要根据需要动态添加或新增表单&#xff0c;同时还需要对表单做校验。详情如下图&#xff1a; 刚开始做表单验证的时候&#xff0c;对于这个动态的表单验证有点难搞&#xff0c;试了好几种方法都没有搞定。最后按照下面这种方法实现了&#xff0c;以此…

Express 基础操作和详解

Express 基础操作和详解 Express.js 是一个基于 Node.js 平台的 Web 应用程序框架&#xff0c;它旨在帮助开发者轻松构建和管理 Web 服务和应用程序。Express 提供了许多强大的功能&#xff0c;使得创建可扩展、灵活且高性能的 Web 应用变得相对容易。以下是 Express 的主要特点…

Github 开启 2FA-无需下载软件实现

Github 开启 2FA 验证了&#xff0c;如果不配置&#xff0c;后续会限制登录Github, 用代码实现配置 获取密钥 setup key 点击 setup key 链接&#xff0c;获取密钥 引入相关算法的 jar <dependency><groupId>com.amdelamar</groupId><artifactId>jot…

华为存储培训

01 存储前沿技术和发展趋势 狭义的存储定义 CD、DVD、ZIP、磁带、硬盘等 广义的存储定义 存储硬件系统&#xff08;磁盘阵列&#xff0c;控制器&#xff0c;磁盘柜&#xff0c;磁带库等&#xff09; 存储软件&#xff08;备份软件&#xff1b;管理软件&#xff0c;快照&…

Eclipse初步学习使用

1.配置自动填充 window->preference 2.自动判断错误&#xff0c;并给出解决方法 3.创建可执行文件&#xff1a; 新建package&#xff0c; 包内新建 javaclass&#xff0c;选择psvm&#xff0c; 4.编写程序&#xff0c;进行执行 右键&#xff0c;选择 run as applic…

第二证券:持股还是持币?多家券商:四季度行情有望回归

上星期初&#xff0c;海外商场持续调整&#xff0c;中美利差继续探底&#xff0c;一度压制A股体现。然而上星期五方针预期提振、AI权重股开释利好、外资大幅回流&#xff0c;共同引领A股走出一波触底反弹的独立行情。展望本周&#xff0c;A股将迎来中秋国庆长假前的最终一个买卖…

深度强化学习(一)常识性普及

文章目录 机器学习、强化学习、深度学习的侧重点强化学习的简介强化学习的主要特征强化学习和机器学习的关系强化学习的发展历史 深度强化学习 一些参考的资料&#xff1a; 蘑菇书&#xff1a;https://datawhalechina.github.io/easy-rl/#/chapter1/chapter1 源代码&#xff1a…

Pycharm2023版修改镜像源

步骤1 步骤2 国内常见镜像源 阿里云 http://mirrors.aliyun.com/pypi/simple/中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/豆瓣(douban) http://pypi.douban.com/simple/清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/中国科学技术大学 http://pypi.mirrors.…

微软云服务宕机超24小时 企业关键业务如何避免被“拖累”

提起“宕机”这个词&#xff0c;估计大多数企业管理层&#xff0c;技术人员都不会陌生。8月&#xff0c;微软的公有云服务以及Office365等软件&#xff0c;因为澳大利亚的极端天气&#xff0c;备用方案未能及时响应&#xff0c;导致澳洲用户出现了超过24小时的云服务“暂停”。…

C++ - 双指针_盛水最多的容器 - 快乐数 - 三数之和

盛水最多的容器 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的…

基于云的虚拟桌面基础架构的优势有哪些?

基于云的虚拟桌面基础架构 &#xff08;VDI&#xff09; OpenText™ Exceed TurboX™ &#xff08;ETX&#xff09; 长期以来一直是虚拟化在 Linux 主机上运行的图形要求苛刻的软件的黄金标准。ETX 最新版本&#xff08;12.5&#xff09;增加了许多Microsoft Windows功能&…

Android Studio 的aapt2.exe在哪个目录下

一般在&#xff1a;C:\Users\admin\AppData\Local\Android\Sdk\build-tools\30.0.2&#xff08;不一定是30.0.2&#xff0c;这个得看你的版本&#xff09; 怎么找&#xff1a; 1.打开Android studio

表格内日期比较计算

需求&#xff1a;在表格中新增数据&#xff0c;计算开始日期中最早的和结束日期中最晚的&#xff0c;回显到下方。 <el-formref"formRef":model"ruleForm":rules"rules"style"margin-top: 20px;"label-position"top">…

rar格式转换zip格式,如何做?

平时大家压缩文件时对压缩包格式可能没有什么要求&#xff0c;但是&#xff0c;可能因为工作需要&#xff0c;我们要将压缩包格式进行转换&#xff0c;那么我们如何将rar格式转换为其他格式呢&#xff1f;方法如下&#xff1a; 工具&#xff1a;WinRAR 打开WinRAR&#xff0c…

GaussDB数据库SQL系列-定义重载函数

目录 一、前言 二、函数重载的定义 三、GaussDB创建自定义重载函数的事项说明 四、GaussDB数据库中的自定义重载函数示例 示例一&#xff1a;创建package属性重载函数&#xff0c;根据不同的SQL条件获取生成视图 示例二&#xff1a;创建package属性重载函数&#xff0c;根…

windows下实现mysql8的主从复制

1、下载mysql8的安装包 MySQL :: Download MySQL Community Server 2、放到指定目录进行解压&#xff0c;更改名称为mysql-8.1.0-winx64-master,并复制一份作为从数据库 3、在bin目录下创建一个my.ini文件 添加如下内容 [mysqld] basedir"D:/soft/mysql/mysql-8.1.0-win…