工作也有段时间了,开了博客也是去年的事情,但是一直没有使用,正好现在还算空,就写写和大家分享探讨和学习。

我想写的是关于VLC Activex Plugin V1的应用,利用它在.net平台下做一个简单的播放器。在这里我们会用到VS2005+VLC0.9.9,下面我会说明实现的详细步骤:

1.运行VS2005,新建一个项目,选择Windows应用程序,名称MyMediaPlayer,打开工具箱,选择“选择项”,打开“COM组件”选项卡,选择VideoLAN VLC ActiveX Plugin V1,选择确定后工具箱里会出现相应的组件,如下图示:    

     

2.创建MyMediaPlayer的窗体界面部分,如下图示:

   

3.控件的事件编辑部分:

1)AddFile(添加播放文件)事件:

private void BtnAddFile_Click(object sender, EventArgs e)
        {
            //可以多行选择
            openFileDialog1.Multiselect = true;
            //对话框标题
            openFileDialog1.Title = "请选择你想要播放媒体文件";           
            //将选中的文件添加进节目列表,默认选中的是列表中的第一个文件
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
                for (int i = 0; i < openFileDialog1.FileNames.Length; i++)
                {                   
                    this.listBox1.Items.Add(openFileDialog1.FileNames[i]);                   
                    this.listBox1.SelectedIndex = 0;
                }
        }

2)Play(播放)事件:

private void BtnPlay_Click(object sender, EventArgs e)
        {
            if (this.listBox1.SelectedIndex != -1)
            {
                this.axVLCPlugin1.addTarget(this.listBox1.Items[this.listBox1.SelectedIndex].ToString(), null, AXVLC.VLCPlaylistMode.VLCPlayListAppendAndGo, 0);
                this.axVLCPlugin1.play();

            }

          //这里是根据Url来确定播放文件的路径,文件可以来自网络

            else if (this.textBox1.Text != "")
            {
                this.axVLCPlugin1.addTarget(this.textBox1.Text.ToString(), null, AXVLC.VLCPlaylistMode.VLCPlayListAppendAndGo, 0);
                this.axVLCPlugin1.play();
            }

            isPause = true;//全局变量isPause表示可暂停状态
        }

3)Stop(停止)事件

private void BtnStop_Click(object sender, EventArgs e)
        {
            if (this.axVLCPlugin1.Playing || isPause==true)
            {
                this.axVLCPlugin1.stop();
            }
        }

3)Pause(暂停)事件:

private void BtnPause_Click(object sender, EventArgs e)
        {
            if (isPause==true)
            {
                this.axVLCPlugin1.pause();
            }
        }

4)PlayFast(快放)事件:

private void BtnPlayFaster_Click(object sender, EventArgs e)
        {
            if (this.axVLCPlugin1.Playing)
            {
                this.axVLCPlugin1.playFaster();
            }
        }

5)PlaySlow(慢放)事件

private void BtnPlaySlower_Click(object sender, EventArgs e)
        {
            if (this.axVLCPlugin1.Playing)
            {
                this.axVLCPlugin1.playSlower();
            }
        }

6)实现播放器进度条的timer控件timer.Endable=true;

timer.Interval=10;

private void timer1_Tick(object sender, EventArgs e)
        {
            if (this.axVLCPlugin1.Playing)
            {
                this.progressBar1.Maximum = this.axVLCPlugin1.Length;
                this.progressBar1.Value = this.axVLCPlugin1.Time;
            }
        }

7)注意了,上述代码是基本完成了播放器的一些功能,但有一个比较棘手的问题是当你没有停止播放器播放而直接关闭程序时会产生蓝屏或重启现象,本人的解决方案如下:

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (this.axVLCPlugin1.Playing)
            {
                this.axVLCPlugin1.stop();
                System.Threading.Thread.Sleep(500);
            }
        }

补充:

音量的控制比较简单如:增加(一级)音量:this.axVLCPlugin1.Volume++,   增加(一级)音量:this.axVLCPlugin1.Volume--

问题:

在实现进度条显示的时候会出现问题,当在停止后再开始播放时就不在更新进度了,因为播放器仍然处于暂停状态,Plugin没有标志暂停状态的变量,自定义暂停状态又不能很好的和衔接。所以这个一直是我难以解决的问题!希望有能够解决的次问题的方法,恳请告知!