WPF 中使用VLC 制作播放器

在WPF 开发中需要增加播放器功能,应为自带的MediaElement功能有限,很多格式不支持,因此考虑用第三方免费开源的插件VLC,这里简单记录一下使用过程中的避坑经验。

使用步骤

  1. 安装Nuget包

    • LibVLCSharp
    • LibVLCSharp.WPF
    • VideoLan.LibVLC.Window>VideoLan.LibVLC.Window (包含原生库)

重点说明一下第三个包:VideoLan.LibVLC.Window,在网上很多相互抄写的博文大多都不提这个,程序在初始化时报错,再去找原因,很多文章又误导你让你下载官方VLC播放器,把播放器DLL放入Debug下,你可能放了,但是依然报错,再去网上查,又说什么版本问题,一轮下来折腾的你崩溃不说,关键还消磨你的积极性。其实只要安装了这个包,一切问题自然解决,编译后会自动再你的Debug目录下生成需要的库文件

  1. 确认库文件存在(编译后)

    VideoLan.LibVLC.Windows安装后自动将libvlc相关的DLL放到输出目录下的libvlc\win-x86 和libvlc\win-x64 文件夹下,确认其存在。

  2. 在XMAL中添加VideoView控件

XAML

<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        xmlns:vlc="clr-namespace:LibVLCSharp.WPF;assembly=LibVLCSharp.WPF"
        mc:Ignorable="d"
        Title="MainWindow"  Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <vlc:VideoView x:Name="videoView" Grid.Row="0"/>
        <StackPanel Orientation="Horizontal" Grid.Row="1" HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button Content="Play" Click="BtnPlay_Click" Margin="10 5"/>
            <Button Content="Pause" Click="BtnPause_Click" Margin="10 5"/>
            <Button Content="Stop" Click="BtnStop_Click" Margin="10 5"/>
        </StackPanel>
    </Grid>
</Window>

MainWindow.XAML.CS

using LibVLCSharp.Shared;
using Microsoft.Win32;
using System.Windows;
namespace WpfApp1
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        private LibVLC libVLC;
        private MediaPlayer mediaPlayer;
        public MainWindow()
        {
            InitializeComponent();
            Core.Initialize();
            libVLC = new LibVLC();
            mediaPlayer = new MediaPlayer(libVLC);
            videoView.MediaPlayer = mediaPlayer;
        }

        private void BtnPlay_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog()
            {
                Filter = "视频文件|*.mp4;*.avi;*.mkv;*.flv;*.wmv;*.mov;*.rmvb;*.mpg;*.mpeg;*.3gp;*.f4v;*.webm;*.ts;*.m3u8;*.rm||*.*"
            };
            if (openFileDialog.ShowDialog() == true)
            {
                var media = new Media(libVLC, openFileDialog.FileName,FromType.FromPath);
                mediaPlayer.Play(media);
            }
        }

        private void BtnPause_Click(object sender, RoutedEventArgs e)
        {
            mediaPlayer.Pause();
        }

        private void BtnStop_Click(object sender, RoutedEventArgs e)
        {
            mediaPlayer.Stop();
        }
    }
}

效果

image

posted @ 2025-06-24 15:01  丹心石  阅读(60)  评论(0)    收藏  举报