WPF 用Vlc.DotNet.Wpf实现视频播放、停止、暂停功能

  1. NuGet 添加 Vlc.DotNet.Wpf

  2. 到VLC官网 http://www.videolan.org/ 下载VLC播放器。因为本机是64位的,所以下载64位,如下所示:

下载的是 安装后,到安装的路径下,拷贝如下文件夹:

在wpf项目的exe文件夹下,本机是 bin\Debug\net8.0-windows,新建 libvlc 后,再建win-x64文件夹,将以上的文件拷贝到这个文件夹里,如下图所示:

  1. 现在进入开发:

3.1 VlcControl 控件有个特别的地方是:

cs 复制代码
 private void Pause_OnClick(object sender, RoutedEventArgs e)
 {
     _vlcMediaPlayer.Pause();
 }

即使 暂停 按钮的事件里,只有一行暂停代码,但是,点一下按钮会暂停,再点击一下会继续播放,暂停--播放--暂停--播放,反复循环。

cs 复制代码
 private void Pause_OnClick(object sender, RoutedEventArgs e)
 {
     _vlcMediaPlayer.SetPause(true);
 }

SetPause(true),无论点击多少次,都会暂停。

3.2 VlcControl 控件,stop后,控件会显示黑色,为了不显示黑色,就得显示第一针的图像。

一个VlcControl控件,3个按钮,播放、停止和暂停。

.xaml 代码如下:

XML 复制代码
  <Grid >
      <Grid.RowDefinitions>
          <RowDefinition Height="*" />
          <RowDefinition Height="40" />
          <!-- <RowDefinition Height="40" /> -->
      </Grid.RowDefinitions>
      <vlc:VlcControl Name="VlcControl" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
      <StackPanel  Grid.Row="1" Orientation="Horizontal">
      <Button Content="播放" Click="Play_OnClick"></Button>
      <Button   Content="停止" Click="Stop_OnClick"  Width="80"></Button>
      <Button   Content="暂停"  Click="Pause_OnClick"  Width="80"></Button>
      </StackPanel>
  </Grid>

.cs代码如下:

cs 复制代码
    public partial class MainWindow : Window
    {
        private VlcMediaPlayer _vlcMediaPlayer;
        private DirectoryInfo libDirectory;
        public MainWindow()
        {
            InitializeComponent();
            libDirectory = new DirectoryInfo(System.IO.Path.Combine(Environment.CurrentDirectory, "libvlc", "win-x64"));
        }

        private void MainWindow_OnLoaded(object sender, RoutedEventArgs e)
        {
            if (_vlcMediaPlayer == null)
            {
                var options = new string[]
                {
                    "--file-logging", "-vvv", "--logfile=Logs.log"
                };
                this.VlcControl.SourceProvider.CreatePlayer(libDirectory, options);
                _vlcMediaPlayer = this.VlcControl.SourceProvider.MediaPlayer;

                // 加载视频文件
                _vlcMediaPlayer.SetMedia(new Uri(@"E:\base_pup_2024-11-08_16-50-59\MiceVideo1\MiceVideo\CHA2024-11-08 165102.avi", UriKind.RelativeOrAbsolute));

                // 设置到第一帧并暂停
                // 开始播放
                _vlcMediaPlayer.Play();
                // 设置到视频开始位置
                _vlcMediaPlayer.Position = 0;
                // 暂停,保留第一帧画面
                _vlcMediaPlayer.SetPause(true);
            }
        }

        private void PlayOrPauseButton_Checked(object sender, RoutedEventArgs e)
        {
            this.Play();
        }

        private void PlayOrPauseButton_Unchecked(object sender, RoutedEventArgs e)
        {
            
        }

        private void Play()
        {
            _vlcMediaPlayer.Play();
        }

        private void Stop_OnClick(object sender, RoutedEventArgs e)
        {
            if (_vlcMediaPlayer == null)
            {
                return;
            }

            if (_vlcMediaPlayer.State == MediaStates.Stopped)
            {
                return;
            }
           
            if (_vlcMediaPlayer.State == MediaStates.Playing)
            {
                //先暂停
                Task.Delay(100).ContinueWith(_ => _vlcMediaPlayer.SetPause(true));
            }
            //回到第一帧
            _vlcMediaPlayer.Position = 0;
        }

        private void Pause_OnClick(object sender, RoutedEventArgs e)
        {
            if (_vlcMediaPlayer == null)
            {
                return;
            }
            // _vlcMediaPlayer.Pause();点击按钮,会暂停--播放--暂停--播放,反复循环
            _vlcMediaPlayer.SetPause(true);
        }

        private void Play_OnClick(object sender, RoutedEventArgs e)
        {
            Play();
        }


    }
相关推荐
hz567894 小时前
内网视频会议系统建设方案:适合政企单位的安全会议选择
安全·云计算·音视频·实时音视频·信息与通信
2601_956865776 小时前
怎么用AI生成带货视频?电商内容创作工具推荐与选择思路
人工智能·aigc·音视频
冰可乐配6 小时前
fmpeg音频编码组件aac(Advanced Audio Coding (AAC) encoder)学习
学习·音视频·aac
国服第二切图仔6 小时前
HarmonyOS APP《画伴梦工厂》开发第60篇-分布式软总线2.0——多设备协同新范式
分布式·wpf·harmonyos
气泡音人声分离7 小时前
音频技术解析|混音的底层逻辑:从采样点相加到艺术层次塑造
音视频·混音·音频剪辑
日光明媚8 小时前
LongLive-英伟达-数字人实时生成
人工智能·计算机视觉·aigc·音视频
AI服务老曹8 小时前
GB28181接入AI视频分析常见问题与排查清单:从国标平台注册、通道同步到心跳断线的工程实践
人工智能·音视频
精神底层11 小时前
拒绝 UI 卡死!我用 CSnakes 实时拦截 Python 训练流,在 WPF 中重构了 ScottPlot 5 高性能 AI 看板
python·ui·wpf
爱吃大芒果11 小时前
不用多设备模拟器跑通 ShareKit 碰一碰分享
华为·wpf·harmonyos
硅谷秋水12 小时前
OMNIDRIVE:一种由LLM协同的多智体世界模型,采用统一潜协压缩技术,用于多视角驾驶视频生成
人工智能·深度学习·机器学习·语言模型·自动驾驶·音视频