• 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 = @".datavideo";//媒体路径
                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);  
          }
    

      

  • 相关阅读:
    存储过程
    pl/sql锁
    事务处理
    记录类型(学习笔记)
    ExecutorException: A query was run and no Result Maps were found for the Mapped Statement ''. It's likely that neither a Result Type nor a Result Map was specified.
    element中的el-form踩的坑
    关于location.href家族的区别和用法
    ajax的路径跳转
    使用thymeleaf模板引擎时的路径问题
    关于mybatis的传多个参数的问题
  • 原文地址:https://www.cnblogs.com/yanniu/p/5968423.html
Copyright © 2020-2023  润新知