zoukankan      html  css  js  c++  java
  • [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

  • 相关阅读:
    Python面向对象编程及内置方法
    【笨嘴拙舌WINDOWS】SetCapture和ReleaseCapture
    【转】获取屏幕分辨率及大小相关
    【笨嘴拙舌WINDOWS】实践检验之剪切板查看器【Delphi】
    【笨嘴拙舌WINDOWS】剪切板
    【笨嘴拙舌WINDOWS】计时器精度
    【笨嘴拙舌WINDOWS】实践检验之按键精灵【Delphi】
    【笨嘴拙舌WINDOWS】键盘消息,鼠标消息
    【笨嘴拙舌WINDOWS】GDI绘制区域
    【笨嘴拙舌WINDOWS】实践检验之GDI缩放
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7136302.html
Copyright © 2011-2022 走看看