基于libVlc开发Winform视频播放器
最近在开发视频播放以及RTSP流媒体播放相关功能,接触到了libVlc库,赞叹其强大的同时也感叹C#调用其的困难,不过还好有了Vlc.DotNet开源库,这里记录下开发经历.开始使用时并没发现什么问题,但是当仔细整理功能后发现问题不少,而且莫名其妙的出现,下面罗列一下:1、界面上点击按钮弹出文件选择对话框后,判断DialogResult.Ok后进行文件播放这一个流程下来有一定的几率界面会卡
最近在开发视频播放以及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更高的优先级,心里安慰就加上了。。。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)