【C#】VlcControl、libvlc使用汇总
一、VLC播放库简介
FFMPEG和VLC的关系:VLC调用了FFMPEG的库;
FFMPEG和libav的关系:libav是FFMPEG的开发人员中独立出来一部分后创建的一个新的工程。
VLC.DotNet类库:
(1)Vlc.DotNet.Forms :是包含winform界面控件的库,使用的时候需要加入到工具箱,在拖拽到界面;是对VLC.DotNet.Core的再次封装。
(2)Vlc.DotNet.Wpf : 包括wpf的,在hood方式下是使用WinForm控件;
(3)Vlc.DotNet.Core : 基础依赖包,如果是转换、编解码、做服务不需要界面的,可以考虑用这个来实现。
出处
二、环境配置
1、libvlc
下载VideoLAN.LibVLC.Windows.3.0.8.1可获取:
到VLC官网下载vlc播放器安装包可达到同样的目的(在安装路径中获取)。
把这三个文件放到项目bin\Debug文件夹下。
附:
在NuGet管理器安装包失败的解决方法:https://www.cnblogs.com/Mars-0603/p/17119323.html
2、VlcControl
如果是使用VlcControl控件开发,除了VideoLAN.LibVLC.Windows.3.0.8.1的三个文件外,还需要:
Vlc.DotNet.Core.Interops.3.1.0:Vlc.DotNet.Core.Interops.dll
Vlc.DotNet.Core.3.1.0:Vlc.DotNet.Core.dll
Vlc.DotNet.Forms.3.1.0:Vlc.DotNet.Forms.dll(如果是WPF则下载Vlc.DotNet.WPF.3.1.0)
如果有现成的dll就不需要再在NuGet管理器下载包了,但这几个包的版本号一定要一致,否则添加控件会报错。
把这几个dll也放到项目bin\Debug文件夹下。
(1)如果是Winform,则在设计器工具箱右键点击“选择项...”,在“.NET FrameWork组件”选项卡中点击“浏览”,然后选择Vlc.DotNet.Forms.dll,就可以添加VlcControl控件了。
(2))如果是WPF,则添加命名空间:
xmlns:vlc="clr-namespace:Vlc.DotNet.Wpf;assembly=Vlc.DotNet.Wpf"
引用控件:
<vlc:VlcControl x:Name="VlcControl1"/>
三、例程
1、C#编写的基于VLC的播放器(libvlc)
https://blog.csdn.net/u012342996/article/details/51271596
2、基于VLC库C#开发可播放摄像头及任意格式视频的播放器(WPF)
https://www.shuzhiduo.com/A/GBJr09wZd0/(源码我都有,评论留邮箱可发)
3、实现边播放RTSP流边保存为mp4(VlcControl)
string SavePath = string.Format("{0}\\{1}.mp4", AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "Video", DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss")); //audio-desync音频不同步补偿 //network-caching 网络缓存 (ms) //rtsp-tcp 使用 RTP over RTSP (TCP) //clock-synchro 时钟同步关闭 //live-caching直播捕获缓存 (ms) //file-caching文件缓存 (ms) //grayscale以黑白方式输出视频 (默认关闭) List<string>() options = new List<string>(); options.AddRange(new string[]{ ":audio-desync=0", ":network-caching=300", ":rtsp-tcp", ":clock-synchro=0", ":live-caching=0", ":file-caching=0", ":grayscale", ":sout=#duplicate{dst=display, dst=standard{access=file,mux=flv,dst=\"" + SavePath + "\"}}"//关键语句 })); vlcControl1.ResetMedia(); vlcControl1.SetMedia(new Uri(filePath), options.ToArray()); vlcControl1.Play();
四、问题汇总
1、VlcControl回放视频文件时截图不成功
调用vlcControl1.TakeSnapshot(Path);一直返回false,后来发现是vlcControl1.SetMedia(new Uri(filePath), options);时options参数配置影响的。
我是在别人例程的基础上改的代码,原来的配置是:
options = new[] { ":sout=#duplicate{dst=display,dst=std{access=file,mux="+ed+",dst="+dest+"}}", ":sout-keep", ":sout-all", ":sout-audio", ":sout-audio-sync", };
其中
":sout=#duplicate{dst=display,dst=std{access=file,mux="+ed+",dst="+dest+"}}"
意思是VLC播放视频的同时,将视频保存为dest指定的文件。把这一句注释掉以后就可以保存截图了。
duplicate模块功能简介:https://blog.csdn.net/u012459903/article/details/89402843
其他的options参数含义见:https://blog.csdn.net/csdn_zxw/article/details/114264625
https://blog.csdn.net/ufocode/article/details/49823151
2、libvlc.dll实现暂停后再播放,画面花屏
找遍全网也没找到这个解决办法。后面换成直接用VlcControl控件来开发,发现没有这个问题,而且各功能实现也更简单。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战