在介绍怎么用C#实现播放器之前,先说明下为什么选择C#。随着.NET Core的发布,使得.Net支持跨平台,并且支持独立打包的方式发布,使得使用C#开发不再需要依赖.Net环境。
使用C#实现播放器,有以下几种方式:
1、使用MediaPlayer ActiveX控件;
2、使用VLC ActiveX控件
3、使用LIB VLC库
4、使用FFMPEG库
第1、2种,都一定依赖客户端环境。如果客户端较少,可以人工维护的话,可以考虑。
第4种,使用ffmpeg,就拥有了更加底层的api了,此时可以实现更加强大的功能。并且它是跨平台的,对于移动平台的音视频开发也是非常有帮助的。
今天我们就是采用第3种方式,它不依赖客户端环境,在Github上也有比较完善的对它的封装,具体请看项目Vlc.DotNet。采用这种方式可以实现一些底层的控制,当然了相对于ffmpeg,会少一些。
一、什么是Vlc.DotNet
我们从NuGet可以看到,它包含了这5个类库:
Vlc.DotNet.Core
Vlc.DotNet.Core.Interops
Vlc.DotNet.Wpf
Vlc.DotNet.Forms
VideoLAN.LibVLC.Windows
1)Vlc.DotNet.Forms :是包含winform界面控件的库,使用的时候需要加入到工具箱,再拖拽到界面;是对VLC.DotNet.Core的再次封装。
2)Vlc.DotNet.Wpf : 包括wpf的,在hood方式下是使用WinForm控件。
3)Vlc.DotNet.Core 、Vlc.DotNet.Core.Interops : 基础依赖包,如果是转换、编解码、做服务不需要界面的,可以考虑用这个来实现。
4)VideoLAN.LibVLC.Windows:应用于安装libvlc库,分为win-x64和win-x86。
今天我们是开发界面应用,使用到是Vlc.DotNet.Forms和VideoLAN.LibVLC.Windows,我们只要安装这两个就可以。
二、控件使用
我们安装相应的类库后,在工具箱就可以看到相应的控件,只要把它拖进相应的界面就可以。
这一步做完后,使用上有一个需要注意的,就是需要指定一下libvlc库的位置,否则会报错。虽然装了VideoLAN.LibVLC.Windows包,但这里不会自动配置。控件初始化是会触发VlcLibDirectoryNeeded事件,在这个事件中配置libvlc的地址,如果,你不安装上面的VideoLAN.LibVLC.Windows包,可以制定另外的地址。
三、视频播放
//网络媒体播放
var videoUri =new Uri("udp://@:ip:port");
vlcControl.Play(videoUri );
//本地文件播放
vlcControl.Play(new FileInfo("本地视频路径"));
四、实际效果
最后我们一起来看看最终实现的效果,以下视频是我开发的视频、图片去水印的工具。
转自:https://zhuanlan.zhihu.com/p/204998521?utm_source=com.microsoft.todos