Vlc.DotNet 是一个封装 libvlc 的第三方.net库。而所谓 Airspace(翻译为:空域)问题是指在使用 WPF 开发的时候,没办法像使用普通的WPF控件一样来使用这个 VLC控件,具体表现为控件无法响应鼠标事件,并且控件永远处于顶层无法在其上一层放置任何子控件等。这些对于一个需要和用户进行诸多交互的播放器来说是致命的。
前记
早些时候用 C# WPF 尝试做了一个简单的Demo,为解决“空域”问题,在VLC控件上覆盖一个独立Form窗体,并设置为透明,最终无法控制两个窗体同步而放弃,后来使用经过改良的pupop控件,但是pupop无法超出屏幕边缘,会自动变换位置,导致不确定因素,也只能搁置。
2019年3月份发布的 Vlc.DotNet 3.0 新版本已经解决空域问题,但是官方还是建议尽量使用 winform 的方式去做,性能效率都会优秀很多。
示例
1、VS使用 NuGet 搜索 安装 “VLC.DOtNet.Wpf”
2、Xaml:添加Vlc的引用:
xmlns:vlc="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
<vlc:VlcControl x:Name="vlcPlayer" />
3、cs文件:
using System.IO; using System.Windows; using System.Windows.Input; namespace VLC3 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); string currentDirectory = @"D:\Program Files\VideoLAN\VLC"; var vlcLibDirectory = new DirectoryInfo(currentDirectory); var options = new string[] { "--file-logging", "-vvv", "--logfile=Logs.log" }; //初始化播放器 this.vlcPlayer.SourceProvider.CreatePlayer(vlcLibDirectory, options); //设置播放源 this.vlcPlayer.SourceProvider.MediaPlayer.Play(new Uri(@"J:\Movie\123456.mkv"));//本地文件。 this.vlcPlayer.MouseDoubleClick += VlcPlayer_MouseDoubleClick; } private void VlcPlayer_MouseDoubleClick(object sender, MouseButtonEventArgs e) { MessageBox.Show("响应鼠标双击事件!"); } } }
注意:解码器可以直接引用PC上安装的VLC播放器的目录,或者拷贝到项目文件夹内做引用。如果使用的是64位的VLC解码器,则 VS 工程项目也必须设置为 x64 状态下调试,否则报错无法运行。
后记
然后呢,现在VLC官方也有了自己的 libvlcsharp 库,这是跨平台的.net库,很想用,毕竟趋势是官方大一统,但折腾了半天 Demo都没跑起来,太难了我。
一年多都没去关注了,突然会回头去看是因为,最近看到PT和BL播放器显示EPG的方式是在视频上左侧,然后半透明显示,虽然觉得PC端空间足够宽裕,可以不用像在手机上一样挤在一起,但着并不代表这种显示方式不好,由于WPF 可以更容易地做出这类效果,站长希望以后在黑鸟播放器也可选择是独立窗口显示EPG 还是在视频上左侧半透明显示EPG,对,两个都要。