刚学C#,自己做的一个基于VLC的视频播放器,仅做备忘(二)

本文介绍了如何在Windows应用中使用VlcPlayer库实现视频播放控制,包括进度条的实时更新、停止按钮的功能以及全屏模式的切换。通过事件处理和窗口管理,实现了播放时的交互与全屏/非全屏状态的切换。
摘要由CSDN通过智能技术生成

八、实现进度条

接上一篇,将网格布局面板(1号)改为三行一列,在第二行插入一个progressBar作为进度条。

设置progressBar最小值0,最大值100;

写一个函数:

private void InitializeProgessBar()
        {
            int progressValue = (int)(vlcPlayer.VlcMediaPlayer.Position * 100);
            if (progressValue< progressBar1.Minimum)
            {
                progressValue = progressBar1.Minimum;
            }else if (progressValue > progressBar1.Maximum)
            {
                progressValue = progressBar1.Maximum;
            }
            else
            {
                progressBar1.Value = progressValue;
            }
        }

为vlcControl添加一个TimeChanged事件,代码如下:

private void VlcPlayer_TimeChanged(object sender, Vlc.DotNet.Core.VlcMediaPlayerTimeChangedEventArgs e)
        {
            if (progressBar1.IsDisposed)
                return;
            Action initializeProgessBarAction = InitializeProgessBar;
            BeginInvoke(initializeProgessBarAction);
        }

进度条显示完成。

九、实现停止按键

为停止按钮添加click事件,代码如下:

private void StopBtn_Click(object sender, EventArgs e)
        {
            vlcPlayer.Stop();
            BeginInvoke(new Action(() => progressBar1.Value = 0));//停止后将进度条归0;
        }

十、实现全屏播放(感觉这种方式不是特别好,请大神指导)

1、为项目添加一个新的窗体,并设置基础属性,代码如下:

namespace ChPlayer
{
    public partial class FullScreenForm : Form
    {
        public FullScreenForm()
        {
            InitializeComponent();
            this.FormBorderStyle = FormBorderStyle.None;    //窗口无边框模式
            this.WindowState = FormWindowState.Maximized;    //窗口最大化
            this.TopMost = true;                            //最前端显示
            this.Size = Screen.PrimaryScreen.Bounds.Size;    //窗口大小等于主显示器的分辨率
        }
    }
}

2、在主窗体类中添加两个字段

         FullScreenForm fullScreenForm;
        private bool isFullScreen = false;        //指示窗体是否已经最大化显示

3、为vlcControl控件添加鼠标双击事件,代码如下:

private void VlcPlayer_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (!isFullScreen)    //非全屏状态的情况
            {
                fullScreenForm = new FullScreenForm();    //初始化全屏显示的窗口
                this.Controls.Remove(vlcPlayer);            //从主窗口中移除vlcControl
                fullScreenForm.Controls.Add(vlcPlayer);    //全屏窗口中添加vlcControl
                fullScreenForm.Show();                    //显示全屏窗口
                this.Hide();                                //隐藏主窗口
                isFullScreen = true;                        //更改全屏状态指示
            }
            else
            {
                fullScreenForm.Controls.Clear();    //全屏窗口移除vlcControl
                this.tableLayoutPanel1.Controls.Add(vlcPlayer, 0, 0);    //主窗口添加vlcControl,并将其放入网格布局面板(1号)的第一行
                fullScreenForm.Hide();    //隐藏全屏窗口
                this.Show();                //显示主窗口
                isFullScreen = false;        //更改全屏状态指示
            }
        }

4、重要的地方来了,完成以上3步后可以实现非播放状态下的全屏和退出全屏,但是在播放状态下无法捕获鼠标事件,解决办法是在主窗口构造函数中添加两行代码:

public Form1()
        {
            InitializeComponent();
            if (vlcPlayer != null)
            {
                vlcPlayer.Video.IsKeyInputEnabled = false;
                vlcPlayer.Video.IsMouseInputEnabled = false;
            }
        }

5、至此全屏和退出全屏的操作就行了。

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个基本的 C# VLC 播放器的代码: ```csharp using System; using System.Windows.Forms; using Vlc.DotNet.Core; using Vlc.DotNet.Core.Interops; namespace VLCPlayer { public partial class Form1 : Form { private VlcControl vlcControl; public Form1() { InitializeComponent(); // 创建 VlcControl 控件 vlcControl = new VlcControl(); vlcControl.Dock = DockStyle.Fill; this.Controls.Add(vlcControl); // 初始化 VLC 引擎 var vlcLibDirectory = new DirectoryInfo(@"C:\Program Files\VideoLAN\VLC"); var options = new string[] { "-I", "dummy", "--no-osd", "--verbose=2", "--no-sub-autodetect-file", "--no-snapshot-preview", "--no-video-title-show", "--no-disable-screensaver" }; vlcControl.SetMediaPlayer(MediaPlayerFactory.CreatePlayer(new DirectoryInfo(vlcLibDirectory.FullName), options)); // 绑定 VLC 事件 vlcControl.LengthChanged += VlcControl_LengthChanged; vlcControl.Playing += VlcControl_Playing; vlcControl.Stopped += VlcControl_Stopped; } private void VlcControl_LengthChanged(object sender, VlcMediaPlayerLengthChangedEventArgs e) { // 更新进度条的最大值 trackBar1.Maximum = (int)e.NewLength; } private void VlcControl_Playing(object sender, VlcMediaPlayerPlayingEventArgs e) { // 开始刷新进度条 timer1.Start(); } private void VlcControl_Stopped(object sender, VlcMediaPlayerStoppedEventArgs e) { // 停止刷新进度条 timer1.Stop(); } private void button1_Click(object sender, EventArgs e) { // 打开文件 OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "视频文件 (*.mp4;*.avi;*.flv)|*.mp4;*.avi;*.flv"; if (dialog.ShowDialog() == DialogResult.OK) { vlcControl.SetMedia(new Uri(dialog.FileName)); } } private void button2_Click(object sender, EventArgs e) { // 播放/暂停 if (vlcControl.IsPlaying) { vlcControl.Pause(); } else { vlcControl.Play(); } } private void button3_Click(object sender, EventArgs e) { // 停止 vlcControl.Stop(); } private void trackBar1_Scroll(object sender, EventArgs e) { // 跳转到指定位置 vlcControl.Time = trackBar1.Value; } private void timer1_Tick(object sender, EventArgs e) { // 更新进度条的当前值 trackBar1.Value = (int)vlcControl.Time; } } } ``` 需要添加 `Vlc.DotNet.Core` 这个 NuGet 包,代码中使用了 `VlcControl` 控件和 `MediaPlayerFactory` 类,可以通过它们来控制 VLC 的播放。界面上有三个按钮,分别是打开文件、播放/暂停和停止,还有一个进度条,用于显示和调整播放进度。另外还有一个计时器,用于定时更新进度条的值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值