C# WMP 视频播放
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WMP 视频播放相关的知识,希望对你有一定的参考价值。
1. C#播放器控件常用的方法介绍
右击工具箱->选择项(I)... -> 显示"选择工具箱项" -> COM组件 -> Windows Media Player wmp.dll 添加
[基本属性] 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")
基本设置实例:
axWindowsMediaPlayer1.windowlessVideo = false; //设为false后双击屏幕可以全屏 axWindowsMediaPlayer1.fullScreen = true; //设播放器全屏播放 axWindowsMediaPlayer1.URL = @"mms://192.168.0.102/vod/jingwei.wma";//播放资源 axWindowsMediaPlayer1.Ctlcontrols.play(); //播放 axWindowsMediaPlayer1.Ctlcontrols.stop(); //停止 axWindowsMediaPlayer1.Ctlcontrols.pause(); //暂停 axWindowsMediaPlayer1.settings.autoStart = true; //自动播放 axWindowsMediaPlayer1.settings.mute = false; //静音 axWindowsMediaPlayer1.settings.volume = 100; // 音量 int 0 ~ 100 100 是最大音量 axWindowsMediaPlayer1.currentMedia.duration.ToString();//影片长度 axWindowsMediaPlayer1.Ctlcontrols.currentPosition = 30; //当前的播放位置 double axWindowsMediaPlayer1.currentMedia.getItemInfo("Title");//标题 axWindowsMediaPlayer1.currentMedia.getItemInfo("Author");//作者
全屏控制实例代码:
using System.IO; using WMPLib; public videoPlay() { InitializeComponent(); //全屏设置及隐藏鼠标 this.WindowState = FormWindowState.Maximized; this.FormBorderStyle = FormBorderStyle.None; //Cursor.Hide(); //播放器全屏 Rectangle screenSize = System.Windows.Forms.SystemInformation.VirtualScreen;//获取屏幕的宽和高 this.panel1.Location = new System.Drawing.Point(0, 0); this.panel1.Size = new System.Drawing.Size(screenSize.Width,screenSize.Height); this.axWindowsMediaPlayer1.Location = new System.Drawing.Point(0, 0); this.axWindowsMediaPlayer1.Size = new System.Drawing.Size(screenSize.Width, screenSize.Height); //播放器设置 axWindowsMediaPlayer1.uiMode = "None";//播放器样式 axWindowsMediaPlayer1.stretchToFit = true;//非全屏状态时是否伸展到最佳大小 axWindowsMediaPlayer1.enableContextMenu = false;//禁用播放器右键菜单 } private IWMPPlaylist videoList;//创建播放列表 private bool ifLoop = true;//视频是否循环 //设置是否循环播放 public bool IfLoop { get { return ifLoop; } set { ifLoop = value; } } //播放状态改变时发生 private void axWindowsMediaPlayer1_StatusChange(object sender, EventArgs e) { //判断视频是否已停止播放 if ((int)axWindowsMediaPlayer1.playState == 1) { //停顿2秒钟再重新播放 //System.Threading.Thread.Sleep(2000); //重新播放 //axWindowsMediaPlayer1.Ctlcontrols.play(); } } //播放 public void videoStart() { axWindowsMediaPlayer1.Ctlcontrols.play(); } //列表播放 public void videoListStart() { videoPlayList();//重新获取播放列表 axWindowsMediaPlayer1.Ctlcontrols.play(); } //暂停 public void videoPause() { axWindowsMediaPlayer1.Ctlcontrols.pause(); } //重播 public void videoReplay() { videoStop(); videoStart(); } //列表重播 public void videoListReplay() { axWindowsMediaPlayer1.currentPlaylist = videoList;//重新载入播放列表 videoStart(); } //停止播放 public void videoStop() { //axWindowsMediaPlayer1.currentPlaylist.clear();//清除列表 axWindowsMediaPlayer1.Ctlcontrols.stop(); } //视频静音 public void videoMute(bool t) { axWindowsMediaPlayer1.settings.mute = t; } //播放下一个视频 public void videoNext() { //判断当前所播放的视频是否是列表的最后一个 if (axWindowsMediaPlayer1.currentMedia.name == axWindowsMediaPlayer1.currentPlaylist.Item[axWindowsMediaPlayer1.currentPlaylist.count - 1].name) { } else { axWindowsMediaPlayer1.Ctlcontrols.next();//播放下一个 } } //播放上一个媒体 public void videoPrevious() { //判断当前所播放的视频是否是列表的第一个 if (axWindowsMediaPlayer1.currentMedia.name == axWindowsMediaPlayer1.currentPlaylist.Item[0].name) { } else { axWindowsMediaPlayer1.Ctlcontrols.previous();//播放上一个 } } //获取播放类表及初始化 public void videoPlayList() { videoList = axWindowsMediaPlayer1.playlistCollection.newPlaylist("one");//创建播放列表 string path = @".\data\video";//媒体路径 DirectoryInfo dir = new DirectoryInfo(path); foreach (FileSystemInfo fsi in dir.GetFileSystemInfos()) { if (fsi is FileInfo) { FileInfo fi = (FileInfo)fsi; videoList.appendItem(axWindowsMediaPlayer1.newMedia(fi.FullName)); } } axWindowsMediaPlayer1.currentPlaylist = videoList;//查找到视频、播放类表 axWindowsMediaPlayer1.settings.setMode("loop", ifLoop);//设置类表循环播放 }
2. C#调用WMP播放一个文件夹的文件
//播放列表 WMPLib.IWMPPlaylist playlist = null; playlist = MediaPlayer.playlistCollection.newPlaylist("palylist"); //播放列表添加项 , 而且从刚添加的项开始播放playlist.appendItem(MediaPlayer.newItem(file_address)); MediaPlayer.currentPlaylist = playlist; //oldCount是添加之前的数量,添加之后playlist.Item[oldCount]即为添加的第一项 MediaPlayer.Ctlcontrols.currentItem = playlist.Item[oldCount]; PlayMusic()
//当前播放项 属性 //title:标题 , 是mp3文件里面内嵌的信息SourceURL : 文件地址 MediaPlayer.currentMedia.getItemInfo("title"); 当前项的总时间: MediaPlayer.currentMedia.duration //double类型 MediaPlayer.currentMedia.durationString //string类型,是格式化好的几分几秒 当前进度: MediaPlayer.Ctlcontrol.currentPosition //double类型 MediaPlayer.Ctlcontrol.currentPositionString //string类型,是格式化好的几分几秒 //mediaPlayer控制播放的,全在Ctlcontrol里面
3. C# winform从右下角弹窗
/// <summary> /// 窗体动画函数 注意:要引用System.Runtime.InteropServices; /// </summary> /// <param name="hwnd">指定产生动画的窗口的句柄</param> /// <param name="dwTime">指定动画持续的时间</param> /// <param name="dwFlags">指定动画类型,可以是一个或多个标志的组合。</param> /// <returns></returns> [DllImport("user32")] private static extern bool AnimateWindow(IntPtr hwnd, int dwTime, int dwFlags); //下面是可用的常量,根据不同的动画效果声明自己需要的 private const int AW_HOR_POSITIVE = 0x0001;//自左向右显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志 private const int AW_HOR_NEGATIVE = 0x0002;//自右向左显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志 private const int AW_VER_POSITIVE = 0x0004;//自顶向下显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志 private const int AW_VER_NEGATIVE = 0x0008;//自下向上显示窗口,该标志可以在滚动动画和滑动动画中使用。使用AW_CENTER标志时忽略该标志该标志 private const int AW_CENTER = 0x0010;//若使用了AW_HIDE标志,则使窗口向内重叠;否则向外扩展 private const int AW_HIDE = 0x10000;//隐藏窗口 private const int AW_ACTIVE = 0x20000;//激活窗口,在使用了AW_HIDE标志后不要使用这个标志 private const int AW_SLIDE = 0x40000;//使用滑动类型动画效果,默认为滚动动画类型,当使用AW_CENTER标志时,这个标志就被忽略 private const int AW_BLEND = 0x80000;//使用淡入淡出效果 private void FrmMsg_Load(object sender, EventArgs e) { int x = Screen.PrimaryScreen.WorkingArea.Right - this.Width; int y = Screen.PrimaryScreen.WorkingArea.Bottom - this.Height; this.Location = new Point(x, y);//设置窗体在屏幕右下角显示 AnimateWindow(this.Handle, 1000, AW_SLIDE | AW_ACTIVE | AW_VER_NEGATIVE); } private void FrmMsg_FormClosing(object sender, FormClosingEventArgs e) { AnimateWindow(this.Handle, 1000, AW_BLEND | AW_HIDE); }
以上是关于C# WMP 视频播放的主要内容,如果未能解决你的问题,请参考以下文章