WPF 下的 VlcControl 控件,播放视频过程中,闪黑屏问题的排查与解决方法

        在Wpf 下,使用 VlcControl 控件,可以实现很多强大的播放功能和解码功能。但是在使用过程中发现当视频播放时,会有预加载时间,导致出现闪黑屏的情况。如下面gif所展示。

         这种情况其实是VlcControl视频控件在预加载视频,从而导致得切换产生“闪黑”的现象,通过查阅,发现目前网络上大部分得解决方法都是采用双控件切换的方法解决。即,定义两个控件,每次使用另一个进行预加载。之后切换控件解决。

        在实际项目中,采用如上方法会出现一下问题:1.控件占用资源大,当长时间运行得时候,多次加载资源如果不正确释放会产生内存泄漏。2.控件多次实例化会有一定概率奔溃。所以综合考虑放弃。最后自己琢磨出一套解决方案,首先我们要解决的仅仅是”闪黑“问题,所以在视频播放开始隐藏该视屏控件。那么就会看到背景图,所以我们让背景图变成视频结束得最后一帧。然后影藏控件,最后等待加载完成,将视频切换到最开始得界面。最后显示控件,就可以完美解决,下面上一些代码片段供大家参考。

        在视屏播放的时候隐藏控件并设置背景,注意 vlcControl.SourceProvider.VideoSource中存放的是视频当前的图像,是引用类型,所以一定要Clone()。

ImageSource img = vlcControl.SourceProvider.VideoSource.Clone();
ImageBrush ib = new ImageBrush();
ib.ImageSource = img;
this.Background = ib;
vlcControl.Visibility = Visibility.Hidden;

        当设置完背景再进行预加载,通过vlcControl.SourceProvider.MediaPlayer.Position = 0.01f;将视频切换到第一帧并显示播放。

vlcControl.SourceProvider.MediaPlayer.Play(new Uri(videoUrl), options);
 Task ta = new Task(() =>
                 {
                     Thread.Sleep(1500);
                    vlcControl.Dispatcher.Invoke(new Action(() =>
                     {
                         vlcControl.SourceProvider.MediaPlayer.Position = 0.01f;
                         vlcControl.Visibility = Visibility.Visible;
                     }));
                 });
ta.Start();

        以上就是本人在解决”闪黑“问题的方法和心得,欢迎大家一起交流,或者有更好的建议。文章为本人原创,如需转载请注明出处。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新标签页

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值