WPF 中使用VLC 制作播放器
在WPF 开发中需要增加播放器功能,应为自带的MediaElement功能有限,很多格式不支持,因此考虑用第三方免费开源的插件VLC,这里简单记录一下使用过程中的避坑经验。
使用步骤
-
安装Nuget包
- LibVLCSharp
- LibVLCSharp.WPF
- VideoLan.LibVLC.Window>VideoLan.LibVLC.Window (包含原生库)
重点说明一下第三个包:VideoLan.LibVLC.Window,在网上很多相互抄写的博文大多都不提这个,程序在初始化时报错,再去找原因,很多文章又误导你让你下载官方VLC播放器,把播放器DLL放入Debug下,你可能放了,但是依然报错,再去网上查,又说什么版本问题,一轮下来折腾的你崩溃不说,关键还消磨你的积极性。其实只要安装了这个包,一切问题自然解决,编译后会自动再你的Debug目录下生成需要的库文件
-
确认库文件存在(编译后)
VideoLan.LibVLC.Windows安装后自动将libvlc相关的DLL放到输出目录下的libvlc\win-x86 和libvlc\win-x64 文件夹下,确认其存在。
-
在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();
}
}
}