Vlc.DotNet 库终于解决了 WPF 开发的 Airspace 问题

Vlc.DotNet 是一个封装 libvlc 的第三方.net库。而所谓 Airspace(翻译为:空域)问题是指在使用 WPF 开发的时候,没办法像使用普通的WPF控件一样来使用这个 VLC控件,具体表现为控件无法响应鼠标事件,并且控件永远处于顶层无法在其上一层放置任何子控件等。这些对于一个需要和用户进行诸多交互的播放器来说是致命的。

《Vlc.DotNet 库终于解决了 WPF 开发的 Airspace 问题》

前记

早些时候用 C# WPF 尝试做了一个简单的Demo,为解决“空域”问题,在VLC控件上覆盖一个独立Form窗体,并设置为透明,最终无法控制两个窗体同步而放弃,后来使用经过改良的pupop控件,但是pupop无法超出屏幕边缘,会自动变换位置,导致不确定因素,也只能搁置。

《Vlc.DotNet 库终于解决了 WPF 开发的 Airspace 问题》

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.DotNet 库终于解决了 WPF 开发的 Airspace 问题》

后记

然后呢,现在VLC官方也有了自己的 libvlcsharp 库,这是跨平台的.net库,很想用,毕竟趋势是官方大一统,但折腾了半天 Demo都没跑起来,太难了我。

一年多都没去关注了,突然会回头去看是因为,最近看到PT和BL播放器显示EPG的方式是在视频上左侧,然后半透明显示,虽然觉得PC端空间足够宽裕,可以不用像在手机上一样挤在一起,但着并不代表这种显示方式不好,由于WPF 可以更容易地做出这类效果,站长希望以后在黑鸟播放器也可选择是独立窗口显示EPG 还是在视频上左侧半透明显示EPG,对,两个都要。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注