C# Winform使用Windows Media Player播放多媒体整理

一、简单使用示例步骤

1.添加Windows Media Player 组件当前是系统的 Com组件

工具箱》右键“选择项”》选择Com组件

2.控件拖拽到桌面,使用

private void button1_Click(object sender, EventArgs e)
{//播放开始声音axWindowsMediaPlayer2.URL = "start.mp3"; //指定音频文件axWindowsMediaPlayer2.settings.volume = 100;//指定音量axWindowsMediaPlayer2.Ctlcontrols.play();//开始播放
}

播放状态监听

    //播放状态监听axWindowsMediaPlayer1.PlayStateChange += (eSender, eState) =>{if (WMPLib.WMPPlayState.wmppsMediaEnded.GetHashCode() == eState.newState){axWindowsMediaPlayer1.close(); //结束播放,释放文件
        }};

二、更多使用说明

Media player控件基本使用步骤如下:

属性/方法名说明:

[基本属性]
 
URL:String; 指定媒体位置,本机或网络地址

uiMode:String; 播放器界面模式,可为Full, Mini, None, Invisible(不计大小写)

playState:integer; 播放状态。这个属性改变时同时引发PlayStateChange事件与StateChange事件。

取值范围为枚举型:WMPLib.WMPPlayState,它的成员如下:

  wmppsUndefined = 0;   //未知状态
  wmppsStopped = 1;    //播放停止
  wmppsPaused = 2;     //播放暂停
  wmppsPlaying = 3;     //正在播放
  wmppsScanForward = 4;   //向前搜索
  wmppsScanReverse = 5;   //向后搜索
  wmppsBuffering = 6;     //正在缓冲
  wmppsWaiting = 7;      //正在等待流开始
  wmppsMediaEnded = 8;    //播放流已结束
  wmppsTransitioning = 9;    //准备新的媒体文件
  wmppsReady = 10;      //播放准备就绪
  wmppsReconnecting = 11;   //尝试重新连接流媒体数据
  wmppsLast = 12;       //上一次状态,状态没有改变
  在PlayStateChange中写代码可以防止播放rmvb等非默认类型的问题(用wmppsReady)。

  enableContextMenu:Boolean;    启用/禁用右键菜单

  fullScreen:boolean;         是否全屏显示

  //播放器基本控制

  Ctlcontrols.play; 播放
  Ctlcontrols.pause; 暂停
  Ctlcontrols.stop; 停止
  Ctlcontrols.currentPosition:double; 当前进度
  Ctlcontrols.currentPositionString:string; 当前进度,字符串格式。如“00:23”
  Ctlcontrols.fastForward; 快进
  Ctlcontrols.fastReverse; 快退
  Ctlcontrols.next; 下一曲
  Ctlcontrols.previous; 上一曲

  [settings] wmp.settings //播放器基本设置

  settings.volume:integer; 音量,0-100
  settings.autoStart:Boolean; 是否自动播放
  settings.mute:Boolean; 是否静音
  settings.playCount:integer; 播放次数
  //顺序播放
  wmp.settings.setMode("shuffle", False)
  //随机播放
  wmp.settings.setMode("shuffle", True)
  //循环播放
  wmp.settings.setMode("loop", True)


[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
axWindowsMediaPlayer1.currentMedia.sourceURL; //获取正在播放的媒体文件的路径
axWindowsMediaPlayer1.currentMedia.name;          //获取正在播放的媒体文件的名称
axWindowsMediaPlayer1.Ctlcontrols.Play          播放
axWindowsMediaPlayer1.Ctlcontrols.Stop          停止
axWindowsMediaPlayer1.Ctlcontrols.Pause          暂停
axWindowsMediaPlayer1.Ctlcontrols.PlayCount         文件播放次数
axWindowsMediaPlayer1.Ctlcontrols.AutoRewind       是否循环播放 (无效)
axWindowsMediaPlayer1.Ctlcontrols.Balance          声道
axWindowsMediaPlayer1.Ctlcontrols.Volume         音量
axWindowsMediaPlayer1.Ctlcontrols.Mute          静音
axWindowsMediaPlayer1.EnableContextMenu     是否允许在控件上点击鼠标右键时弹出快捷菜单
axWindowsMediaPlayer1.Ctlcontrols.AnimationAtStart       是否在播放前先播放动画(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowControls       是否显示控件工具栏(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowAudioControls       是否显示声音控制按钮(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowDisplay         是否显示数据文件的相关信息(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowGotoBar        是否显示Goto栏(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowPositionControls       是否显示位置调节按钮(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowStatusBar      是否显示状态栏(无效)
axWindowsMediaPlayer1.Ctlcontrols.ShowTracker       是否显示进度条(无效)
axWindowsMediaPlayer1.Ctlcontrols.FastForward        快进
axWindowsMediaPlayer1.Ctlcontrols.FastReverse        快退
axWindowsMediaPlayer1.Ctlcontrols.Rate            快进/快退速率
axWindowsMediaPlayer1.AllowChangeDisplaySize   是否允许自由设置播放图象大小(无效)
axWindowsMediaPlayer1.DisplaySize       设置播放图象大小(无效)
1-MpDefaultSize         原始大小
2-MpHalfSize           原始大小的一半
3-MpDoubleSize         原始大小的两倍
4-MpFullScreen          全屏
5-MpOneSixteenthScreen      屏幕大小的1/16
6-MpOneFourthScreen        屏幕大小的1/4
7-MpOneHalfScreen          屏幕大小的1/2
axWindowsMediaPlayer1.ClickToPlay    是否允许单击播放窗口启动Media Player

在视频播放之后,可以通过如下方式读取源视频的宽度和高度,然后设置其还原为原始的大小.
         private void ResizeOriginal()
         {
             int intWidth = axWindowsMediaPlayer1.currentMedia.imageSourceWidth;
             int intHeight = axWindowsMediaPlayer1.currentMedia.imageSourceHeight;
             axWindowsMediaPlayer1.Width = intWidth + 2;
             axWindowsMediaPlayer1.Height = intHeight + 2;
         }

打开媒体文件并播放:

         Dim filePath As String
         With Me.OpenFileDialog1
             .Title = "打开语音文件"
             .CheckPathExists = True
             .CheckFileExists = True
             .Multiselect = False
             .Filter = "mp3文件(*.mp3)|*.mp3|所有文件(*.*)|*.*"
             If .ShowDialog = DialogResult.Cancel Then
                 Exit Sub
             End If
             filePath = .FileName
         End With
         Me.Text = "PC复读机-文件 " & filePath
         AxWindowsMediaPlayer1.URL = filePath
         Try
             Me.AxWindowsMediaPlayer1.Ctlcontrols.play()
         Catch ex As Exception
             MsgBox("对不起,不能播放此格式语音文件", MsgBoxStyle.OKOnly, "PC复读机")
             Exit Sub
        End Try
注意:
AxWindowsMediaPlayer1.URL 中URL是表示要播放的文件名,取消了原来的Name属性.
AxWindowsMediaPlayer1.Ctlcontrols.play()播放,同样还有Pause,Stop等其他属性.
AxWindowsMediaPlayer1.settings.balance表示媒体播放的声道设置,0表示均衡,-1和1表示左右声道.
AxWindowsMediaPlayer1.currentMedia.duration 表示要播放的文件的时间长度.可用它获取文件长度.
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition表示正在播放的文件的当前播放位置,可用这个属性来对媒体文件进行前进后退等设置.如
AxWindowsMediaPlayer1.Ctlcontrols.currentPosition+1 表示前进1个时间单位.
AxWindowsMediaPlayer1.settings.rate播放速率,一般乘以16后再显示kbps单位.

注意:在上面程序中,如果在后面加上一个:

msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString )

则显示结果很可能为0,因此,这时候很可能获取不到文件的播放时间长度,容易出错。所以在利用的时候可以加一个timer控件:

Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
         EndPoint = AxWindowsMediaPlayer1.currentMedia.duration
         If EndPoint = 0 Then Exit Sub '可能因为媒体文件的打开需要一定时间,这里等待媒体文件的打开
         msgbox(AxWindowsMediaPlayer1.currentMedia.duration.ToString )
End Sub

此时msgbox便会显示文件播放长度。

2. Ctlcontrols属性

Ctlcontrols属性是AxWindowsMediaPlayer的一个重要属性, 此控件中有许多常用成员。
(1) 方法play
用于播放多媒体文件,其格式为:
窗体名.控件名.Ctlcontrols.play()
如: AxWindowsMediaPlayer1.Ctlcontrols.play()  ‘此处缺省窗体名是Me
(2) 方法pause
用于暂停正在播放的多媒体文件,其格式为:
窗体名.控件名.Ctlcontrols.pause()
如: AxWindowsMediaPlayer1.Ctlcontrols.pause()
(3) 方法stop
用于停止正在播放的多媒体文件,其格式为:
窗体名.控件名.Ctlcontrols.stop()
如: AxWindowsMediaPlayer1.Ctlcontrols.stop()
(4) 方法fastforward
用于将正在播放的多媒体文件快进,其格式为:
窗体名.控件名.Ctlcontrols.fastforward()
如: AxWindowsMediaPlayer1.Ctlcontrols.forward()
(5) 方法fastreverse
窗体名.控件名.Ctlcontrols.fastreverse()
如: AxWindowsMediaPlayer1.Ctlcontrols.fastreverse()
6. 属性CurrentPosition
用于获取多媒体文件当前的播放进度,其值是数值类型,使用格式为:
窗体名.控件名.Ctlcontrols.currentPosition
d1 =AxWindowsMediaPlayer1.Ctlcontrols.currentPosition
其中d1 是一个整型变量。
7. 属性Duration
用于获取当前多媒体文件的播放的总时间,其值为数值类型,其使用格式为:
窗体名.控件名.currentMedia.duration
如:d2 =AxWindowsMediaPlayer1.currentMedia.duration
其中d2是一个整型变量。
对WMP的感叹
感叹一
这是我找到的关于WMP的最全的中文资料了。刚才又查了一下,查到了MSDN有更全的API文档,终于找到它了。上面的资料基本上够用了,但是,如果要写一个更为精致的播放器,这些还不够啊。看MSDN去也。WMP11在MSDN中的位置如下:
win32和COM开发-Griphics And MultiMedia-Audio And Vedio-Windows Media Player 11 SDK
看了一个晚上的MSDN与资料。发现MSDN上关于WMP SDK的文档也很不扎实。没有实例。我要找的答案都不在上面。唯一的收获是晓得了wpl。wmp有自己的播放列表文件,但是,我查遍msdn,发现sdk 并不提供手动保存播放列表的任何方法。所以,现在的问题是,我们创建了一个IWMPPlayList,但是,这个接口不提供任何保存的方法,结果。 newPlayList(name,path)只提供打开一个已有列表。郁闷。查了英文资料。老外建议用:StreamWrite/StreamRead 的办法来读写wpl,我也看了。事实上wpl是一个xml文件。我们可以用System.Xml中的API来读写。不过,sdk中的这个漏子我始终无法释 怀。
感叹二
从WMP8开始就不支持mms/rtsp协议了,所用wmp.URL="mms://xxxx";是不行的了。点此处见详情,而mms这个协议现在还在广泛使用。郁闷。因此,我们不能使用wmp来看网络电视了。

使用WMP的常见问题:

一、升级wmp后,再拖windows media player控件至窗体出错的问题(至今没解决,应当是修改工程序文件,用文本编辑器)

二、播放rmvb/rm等非官方格式文件要先双击文件再点播放按钮,而不能直接播放的问题,并弹出消息框:Windows Media Player下载文件遇到问题。有关帮助信息请单击“Web帮助”。消息下面两个按钮:关闭、Web帮助。我没有找到出现这个问题的官方说明。我个人意 见,这是因为wmp默认只播能播放官方指定的几种类型的媒体。如果不是,wmp会试图下载对应的解码器来播放。而这个下载过程失败了,所以弹出这个消息 框。wmp好像没有去判断这个解码器是否已经存在。但是,如果你再点播放的话,又能播放,这是什么原因呢?应当是wmp在这次会试图搜索本机上的解码器以 图播放媒体。怎样解决这个点两次鼠标的问题呢?如下:

先设置属性:wmp.settings.enableErrorDialogs = false;事实上这个属性默认就是false。不用设置。


private void wmp_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e)
{
         //如果已播放完毕就播放下一个文件
         if ((WMPLib.WMPPlayState)e.newState == WMPLib.WMPPlayState.wmppsReady) wmp.Ctlcontrols.play();
}  
唉,我费了九牛二虎之力总算找到了这个办法解决。


三、怎样获得一个媒体文件中的信息,并且修改媒体的一些信息?

  有办法:AxWindowsMediaPlayer.newMedia(filename),它会创建一个IWMPMedia的实例。用它的setItemInfo就成了。至于有哪些信息可供设置,可去msdn中查,里面列举了所有相关信息。


四、IWMPPlayList是不是鸡肋????????
确实是好大的一块鸡肋!!!!!!!!!!!


五、播放器控件有几个组成部分,可有隐藏其中相关部分的方法?

媒体播放器包括如下元素:
Video Display Panel:视频显示面板;
Video Border:视频边框;
Closed Captioning Display Panel;字幕显示面板;
Track Bar;搜索栏;
Control Bar with Audio and Position Controls:带有声音和位置控制的控制栏;
Go To Bar:转到栏;
Display Panel:显示面板;
Status Bar:状态栏;


就是这么几个部分,网上有资料说控件提供方法控制它们显示与否,但是我在sdk中并没有找到它们。唯一可以粗略控制它们的就是uiMode属性。它的取值前面有。


六、控件的网络设置,如设置代理、缓冲次数、缓冲时间等信息在哪设置?

  AxWindowsMediaPlayer.netWork。它是IWMPNetWork的实例。


七、像暴风有字幕相关信息的设置,wmp控件有这个功能吗?


当然有。就是AxWindowsMediaPlayer.closedCaption。它是IWMPClosedCaption的实例。

 

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

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

相关文章

618选购手机正当时,好评率高达99%的手机了解一下!

一年一度的京东618年中购物狂欢节如火如荼的进行中,手机厂商们都使出了浑身解数,对消费者进行争夺。对于用户来说,618绝对是更换手机的好时机。不过,小伙伴们面对市场上的众多机型,也有可能挑花了眼,不知道…

IntelliJ IDEA 2017.2 x64 安装Scala

从官网下载好IntelliJ IDEA 和scala IntelliJ IDEA 安装scala插件 新建scala项目 建好后,发现src右键--新建---没有 .scala选项 解决方法

Django-ORM数据库操作

背景 Django框架功能齐全自带数据库操作功能,由于工作中设计巨量的api接口,需要一个很好的web后端服务框架,Django给了莫大的帮助。本文主要介绍Django的ORM框架我们一般对数据库的使用的认识是: 创建数据库,设计表结构…

Kingback小组冲刺博客

一、6月13日 1、今日完成的任务 李可欣 项目首页的框架设计 项目首页的导航栏部分 对于项目的配色进行了改进,并且设计了logo 杨帆 今天进行了数据库的设计,完成了数据库的增删改查,并建立了两个jsp页面,还学习了一些数据库设计的…

使用Git上传本地项目到oschina

原文地址:https://my.oschina.net/158/blog/530112 --------------------------------------------- 1.首先看一下自己是否有公钥, 在 我的资料-->SSH公钥 查看,如果没有,添加自己的SSH 公钥: SSH key 可以让你在…

整数数组按绝对值排序

2019独角兽企业重金招聘Python工程师标准>>> 题目: 给出一组整数数组,要求按照绝对值从小到大进行排序后输出。 可以用经典的冒泡排序法来计算此问题,计算过程: 1、比较相邻两个元素绝对值,如果第一个比第二…

pearson相关系数_pearson相关系数与典型相关性分析(CCA)

本文主要介绍相关系数的概念,以及简单相关系数中的pearson相关系数及其局限性。随后介绍pearson相关系数无法解决的问题(两个变量组之间的相关性问题)的解决方案。1、pearson相关系数在日常中,我们经常会遇到一些关于相关性的分析,例如&#…

seo自动工具_爱站SEO工具包详细介绍

爱站SEO工具-seoer的瑞士军刀!这个工具主要是为了方便SEOer查询一些网站的问题,监控关键词排名收录等等,新手老手都可以用的工具,更快的让SEOer上手。相信有很多SEOer都使用过爱站SEO工具包,也有很多新入行的小伙伴可能…

人物三(依芙蒂法)

转载于:https://www.cnblogs.com/song1900/p/9189921.html

XML文件结构和基本语法

XML文件的结构性内容,包括节点关系以及属性内容等等。元素是组成XML的最基本的单位,它由开始标记,属性和结束标记组成。就是一个元素的例子,每个元素必须有一个元素名,元素可以若干个属性以及属性值。 xml文件和html文…

fatal: Could not read from remote repository.的解决办法

原文地址:http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看远端地址 git remote –v 查看配置 git config --list git status git add . // 暂存所有的更改git…

springmvc是什么_SpringBoot与SpringMVC的区别是什么?

简单的来说:SpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化我们日常Web开发的,后来随着自身的发展,SpringMVC变得臃肿复杂,而SpringBoot则进一步简化了SpringMVC开发。SpringM…

git 上传代码到码云

与码云建立连接教程:http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步骤的,且有了git。上传项目步骤: 代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交…

visual studio过期登录不了账户_具有最高管理权限账户,Windows 7设置Administrator密码永不过期...

今天介绍操作系统具有最高管理权限的账户,Windows 7如何设置Administrator账户密码永不过期。小伙伴们可能不知道,和Windows Vista操作系统一样,在Windows 7操作系统中是不能预先使用Administrator这个具有最高管理权限的账户的。同时也可能不…

cad隐藏图层命令快捷键_cad快捷键f是什么命令?cad中f快捷键都有哪些?

1. F1 该功能键打开AutoCAD帮助窗口。如果用户遇到此软件中的任何功能问题,它可以使用户在线获得帮助。如果用户离线工作,而不是按此键,则该软件的所有功能都将以PDF格式打开。 2. F2 该键将打开一个弹出屏幕,在底部显示命令行。该命令对于在屏幕底部看不到命令窗口的用户很…

java 高级编程进阶_JAVA高级编程之hibernate进阶学习

二级缓存hibernate的session缓存在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或 JVM 级别(SessionFactory 级别)的缓存。你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序对持久化…

SpringMvc+Tomcat+Angular4 部署运行

这次的团队开发是,前端开发人员和后台开发人员完全分开开发的。 前端开发采用了Angular4,webstorm 后端开发采用了:springspringmvcmybatis,eclipse --------------------------------------- 最后要整合了。 1、angular项目编…

IPv4地址分类及特征

IPv4地址分类及特征 IP地址后斜杠和数字代表的意思 其中有这样一个IP地址的格式:IP/数字,例如:111.222.111.222/24这种格式平时在内网中用的不多,所以一下子看不懂,最后查了资料才知斜杠后的数字代表的是掩码的位数 “…

查看Scala编译的.class文件

Scala是基于JDK运行的,必然会生成Java的字节码文件.class文件。 如何查看? 编码IDE:IntelliJ IDEA 2017.2 x64 查看class文件工具:jd-gui scala代码如下: person.scala package cn.zengmg.day26class Person {val …

【原创】利用腾讯和百度的AI接口识别验证码

众所周知,验证码在大部分的实际运用中是绕不开的问题,包括验证,爬虫,测试等等,然后解决验证码的方法也有不少,但大多数都会运用OCR。(这里说的验证码,是字符类型的验证码&#xff09…