基于libVlc开发Winform视频播放器

最近在开发视频播放以及RTSP流媒体播放相关功能,接触到了libVlc库,赞叹其强大的同时也感叹C#调用其的困难,不过还好有了Vlc.DotNet开源库,这里记录下开发经历.

开始使用时并没发现什么问题,但是当仔细整理功能后发现问题不少,而且莫名其妙的出现,下面罗列一下:

1、界面上点击按钮弹出文件选择对话框后,判断DialogResult.Ok后进行文件播放这一个流程下来有一定的几率界面会卡死,这让我一度怀疑这个库,到现在我都没弄明白是为什么?但是我找到了解决办法,播放视频这个动作在OpenFileDialog控件的FileOk事件中去处理,这个问题就解决掉了....

2、在关闭视频播放的时候也有一定的几率会卡死,我真是很无语的,这里到现在我还没有完全弄清楚或者找到更好的解决办法,但是使用窗体的BeginInvoke异步委托去调用关闭方法会有极大的好转。

3、视频截图不能直接在按钮点击事件中触发,会有很大几率卡死,可以使用BackgroundWorker的DoWork事件去调用截图方法,可直接调用,然后在VLC控件的SnapShotTaken事件中获取截图成功消息并获取存储的文件路径。

4、不支持RTSP的视频录制功能,这里我修改了Vlc.DotNet的核心库增加了这个功能,就是调用Vlm开头的几个方法,原先库中并没有实现。

5、不管是截图还是视频录制竟然不支持中文~!!~存储路径有中文就更不行~!就无法成功录制或截图~!!~查找资料一顿折腾竟然发现libVlc支持的是UTF8编码,而C#的String类型是Unicode编码,不管你怎么折腾只要你是用String类型传送就是Unicode编码~!所以,所以我就又改了Vlc.DotNet的核心库,在库中底层转码并直接传送byte[],这样一切就OK了。。。

6、在退出程序的时候Vlc.DotNet库会清理相关资源,这时候会报异常,这里我增加了Release方法,可以提前调用以避免该异常的发生。

最后Stop停止播放视频的问题偶尔还是会出现的,特别是在FormClosing事件中,不知道谁有更好的办法?!

最后记录下libVlc用到的启动参数:

--demux=h264
--network-caching=500
--rtsp-tcp
--sout=

以上这些是用于播放RTSP视频用到的参数,--sout=用于视频录制参数输入

--no-video-on-top

这个是想不报每次打开视频就输出video out can not top这个异常,但貌似没用。。。。

--no-osd
--no-snapshot-preview

这些主要是截图不显示预览不显示文字

--high-priority

更高的优先级,心里安慰就加上了。。。

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页