[Winform]Media Player com组件应用中遇到的问题-程序员宅基地

摘要

最近一个项目中,需要用到在客户端全屏循环播放视频,当时考虑使用开源的播放器,但控制起来不方便,然后考虑既然都是windows系统,那么可以考虑使用微软自带的Media Player播放器。所以在开发中,就在winform中嵌入了Media Player组件。下面就将开发中遇到的问题,做一个总结。

问题与解决办法

首先要搞清楚Media Player到底是x86的还是x86的。我电脑系统是x64的,可以尝试打开Media Player,在任务管理器中查看是不是x64的。

所以media player 是x86还是x86的。在开发中,最好以Any CPU 或者x86的方式运行或者生产项目,不然有可能出现渲染com组件失败的情况。这个项目因为引入了cefSharp组件,需要指定运行平台,我这里设置为x86。

如果在添加com组件的时候报错,可以尝试关闭vs,将包含vshost的文件删除,然后重启vs,重新生成尝试。

 如图所示

 

这样算是设置正常了,然后我们可以对它的属性进行设置,在播放器上面右键属性,如图所示

选择模式,可以对播放器下面的播放控制按钮进行设置,是全显示,还是不显示,这个项目中是作为屏保的,所以这里让其隐藏,所以设置为None,全屏设置为true。

关于全屏设置,也可以通过代码进行控制,可以参考这篇文章:

[Winform]Media Player组件全屏播放的设置

这里可以通过属性进行设置,比较方便,最好还是通过属性来设置。一是方便,二是让控制全屏的逻辑交给组件来进行。

勾选按比例拉伸,可以让视频平铺。并且设置播放器的属性Dock=Fill。

  this.windowsMediaPlay.Dock = System.Windows.Forms.DockStyle.Fill;

让其填充窗口。

在项目中,因为设置的是x64的方式运行,以及没有设置填充的方式。导致播放视频出现白边的bug。

循环播放的设置

 windowsMediaPlay.settings.setMode("loop", true);

在初始化完成Media Player时,最好加上初始化结束的标记

windowsMediaPlay.EndInit();

添加播放列表,默认播放目录,如果包含mp4,wmv文件,加入播放列表

  windowsMediaPlay.settings.setMode("loop", true);
                    string[] filePaths = Directory.GetFiles(_videoDirPath).Where(x => x.EndsWith(".mp4") || x.EndsWith(".wmv")).ToArray();
                    //清空播放列表
                    windowsMediaPlay.currentPlaylist.clear();
                    //添加循环播放列表
                    foreach (var item in filePaths)
                    {
                        windowsMediaPlay.currentPlaylist.appendItem(windowsMediaPlay.newMedia(item));
                    }

播放

windowsMediaPlay.Ctlcontrols.play();

停止

windowsMediaPlay.Ctlcontrols.stop();

暂停

windowsMediaPlay.Ctlcontrols.pause();

属性介绍

enableContextMenu:Boolean 显示/不显示播放位置的右键菜单
fullScreen:boolean 全屏显示
stretchToFit:boolean 非全屏状态时是否伸展到最佳大小
uMode:string 播放器的模式,full:有下面的控制条; none:只有播放部份没有控制条
playState:integer 当前控件状态,下面是三种基本状态:
3:正在播放
2:暂停
1:已停止
状态变化时会触发OnStatusChange事件
[controls]
可通过WindowsMediaPlayer.controls对播放器进行控制并取得相关的一些信息:
controls.play; 播放
controls.stop; 停止
controls.pause; 暂停
controls.currentPosition:Double 当前播放进度
controls.currentPositionString:string 时间格式的字符串 "0:32"
[currentMedia]
可以通过WindowsMediaPlayer.currentMedia取得当前媒体的信息
currentMedia.duration Double 总长度
currentMedia.durationString 时间格式的字符串 "4:34"
[settings]
可以通过WindowsMediaPlayer.settings对播放器进行设置,包括音量和声道等。
settings.volume:integer 音量 (0-100)
settings.balance:integer 声道,通过它应该可以进行立体声、左声道、右声道的控制。
=================
版本2:
属性/方法名: 说明:
[基本属性]  
url:string指定媒体位置,本机或网络地址
uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible
playState:integer; 播放状态,1=停止,2=暂停,3=播放,6=正在缓冲,9=正在连接,10=准备就绪
enableContextMenu:Boolean; 启用/禁用右键菜单
fullScreen:boolean; 是否全屏显示
[controls] wmp.controls //播放器基本控制
controls.play; 播放
controls.pause; 暂停
controls.stop; 停止
controls.currentPosition:double; 当前进度
controls.currentPositionString:string; 当前进度,字符串格式。如“00:23”
controls.fastForward; 快进
controls.fastReverse; 快退
controls.next; 下一曲
controls.previous; 上一曲
[settings] wmp.settings //播放器基本设置
settings.volume:integer; 音量,0-100
settings.autoStart:Boolean; 是否自动播放
settings.mute:Boolean; 是否静音
settings.playCount:integer; 播放次数
[currentMedia] wmp.currentMedia //当前媒体属性
currentMedia.duration:double; 媒体总长度
currentMedia.durationString:string; 媒体总长度,字符串格式。如“03:24”
currentMedia.getItemInfo(const string); 获取当前媒体信息"Title"=媒体标题,"Author"=艺术家,"Copyright"=版权信息,"Description"=媒体内容描述,"Duration"=持续时间(秒),"FileSize"=文件大小,"FileType"=文件类型,"sourceURL"=原始地址
currentMedia.setItemInfo(const string); 通过属性名设置媒体信息
currentMedia.name:string; 同 currentMedia.getItemInfo("Title")
[currentPlaylist] wmp.currentPlaylist //当前播放列表属性
currentPlaylist.count:integer; 当前播放列表所包含媒体数
currentPlaylist.Item[integer]; 获取或设置指定项目媒体信息,其子属性同wmp.currentMedia

Media Player事件属性可参考MSDN

https://msdn.microsoft.com/en-us/library/windows/desktop/dd562419(v=vs.85).aspx

转载于:https://www.cnblogs.com/wolf-sun/p/7136302.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34111790/article/details/94064338

智能推荐

新能源汽车行业-某新能源汽车全国30个4S店全国sdwan组网-云直连介入阿里云_4s店 sdwan-程序员宅基地

文章浏览阅读1k次。客户需求分析:客户全国30个门店通过SDWAN线路访问阿里云服务器。 接入阿里云预计需求是100M带宽,每个门店10M带宽。 Telstra提供全国网络资源实现门店到阿里云的网络连通,搭建稳定可靠的SDWAN网络,客户SDWAN网络主要使用的应理类系统和销售应用系统。 解决方案说明1,客户共有阿里云和30个门店共31个节点的网络需求。2,Te..._4s店 sdwan

基本汇编指令_cmpl-程序员宅基地

文章浏览阅读6.8k次,点赞7次,收藏66次。eax寄存器eax,32位寄存器,ax代表十六位,al代表低八位,ah代表高八位,并且函数返回值一般使用eax存放,al的l是low低八位,ah的h是high高八位如图eip寄存器eip存放将要执行的指令的地址leave指令leave指令等价于movl %ebp , %esppopl %ebp起到退栈作用!!ret指令把返回地址放到eip寄存器中call指令保存下一条指令的地址,并转向被调用函数..._cmpl

开机启动时间计算机,Windows系统更改开机启动时间三种方法-程序员宅基地

文章浏览阅读5.9k次。Windows系统,无论是Windows XP、Windows7、Windows8/8.1还是Windows10各种版本的系统,都可以更改计算机的开机启动时间,具体方法如下:方法一:1、开始 - 运行,输入mscpnfig,确定或者回车,打开系统配置对话框;2、我们在打开的系统配置对话框,左键点击:引导;3、在引导标签下,我们可以看到右侧有个超时(T),在这个框里可以更改计算机的开机启动时间,这里..._电脑怎么设置开机时间

基于不确定混沌系统的无抖振模糊滑模变结构控制策略matlab仿真-程序员宅基地

文章浏览阅读140次。在非线性控制系统中,尤其是存在不确定性、时变性和复杂动力学特性的混沌系统,滑模变结构控制(Sliding Mode Control, SMC)因其强大的鲁棒性和对系统扰动的不敏感性而受到关注。然而,传统滑模控制在切换过程中会产生较大的抖振现象。为了解决这一问题,引入了模糊逻辑来设计一种无抖振模糊滑模控制器。

嵌入式C语言编程——.h文件与.c文件-程序员宅基地

文章浏览阅读2.1k次。.h文件与.c文件的关系参考高手的程序时,发现别人写的严格的程序都带有一个“KEY.H”,里面定义了.C文件里用到的自己写的函数,如Keyhit()、Keyscan()等。.H文件..._c语言 编写.c和.h文件示例

人脸数据集——亚洲人脸数据集-程序员宅基地

文章浏览阅读3.6w次,点赞30次,收藏126次。大规模亚洲人脸数据的制作 在这次大规模亚洲人脸数据制作主要是亚洲明星人脸数据集,此次我爬取了大概20万张亚洲人脸图像,可以修改爬取每位明星图片的数量来获取更多的图片,过程中主要分以下几步: 获取明星名字列表 (1)、首先从百度搜索栏中搜索“明星”,显示出明星栏目,地区包括内地、香港、台湾、韩国和日本,如下图:(2)、使用python爬虫将这些明星的名字爬取下来,代码如下所...

随便推点

终于搞懂了 VUE 的代理和 NGINX 的代理区别了!_vue nginx.conf 和kong的优先级-程序员宅基地

文章浏览阅读5.5k次,点赞4次,收藏28次。前端小白一枚,在开发一个 vue 项目,之前开发的时候遇到了跨域问题,通过网上冲浪自己配置了 vue 代理,美滋滋的认为一劳永逸了。 vue 代理配置如下:在 vue.config.js 中配置proxy: { '/api': { target: 'http://localhost:8080', changeOrigin: true, p..._vue nginx.conf 和kong的优先级

数据结构-单链表基本操作实现(含全部代码)_单链表的基本操作代码-程序员宅基地

文章浏览阅读5.6w次,点赞168次,收藏842次。今天是单链表的实现,主要实现函数如下: InitList(LinkList &L) 参数:单链表L 功能:初始化 时间复杂度 O(1) ListLength(LinkList L) 参数:单链表L 功能:获得单链表长度 时间复杂度O(n) ListInsert(LinkList &L,int i,Elem..._单链表的基本操作代码

md5算法原理_md5常量-程序员宅基地

文章浏览阅读2.4k次。1、MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。具体补位操作:补一个1,然后补0至满足上述要求 2、补数据长度:用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数据就被填补成长度为512位的倍数。 3. 初始化MD5参数四个32位整数 (A,B,C,D) 用来_md5常量

ORACLE ORA-28545: 连接代理时 Net8 诊断到错误 解决办法-程序员宅基地

文章浏览阅读1.9w次,点赞3次,收藏2次。oralce透明网关很好很强大,可以把多种数据库当成一个数据库来使用,比如在你的oracle数据库里面想和db2里面的数据一起使用,通过透明网关就可以将db2连接到oracle中,具体怎么配置可以参见官网文档,这里记录一下一个错误的处理办法ORA-28545: 连接代理时 Net8 诊断到错误Unable to retrieve text of NETWORK/NCR message 655..._ora-28545

如何在pycharm中安装pygame_pycharm安装pygame-程序员宅基地

文章浏览阅读2.3w次,点赞24次,收藏69次。一、场景描述:在开发python小游戏前,需要安装pygame的插件,如何在pycharm软件中安装pygame的插件呢,本文将重点讲解如何安装pygame这个插件。二、安装步骤:1、在pycharm软件中定位到file–settings2、定位到:project(自己的项目中)–python interpreter,选择右边的pip3、双击pip,进入查询插件界面,输入pygame,进行查询这个插件,最后点击install package4、安装成功后,会在pycharm软件的下方提示安_pycharm安装pygame

SAP ABAP程序性能优化 2-程序员宅基地

文章浏览阅读5.7k次。以下是以前看到的一些关于SAP ABAP程序性能优化的东西 As you all know, it is important to use as many key fields as possible in WHERE clauses of SELECT statements. Sometimes you are not sure about the value of some key field

推荐文章

热门文章

相关标签