在C#中实现视频播放器
当我们需要在C#中实现视频播放器的时候,可以使用如下几种方法:
一、使用MediaPlayer ActiveX控件
在C#中支持视屏播放器最简单的方式就是插入MediaPlayer控件了,在WPF中还内置了对MediaPlayer的封装MediaElement,可以通过它直接打造一个播放器。
使用MediaPlayer控件的好处是简单,它已经基本封装了常用的功能,只需要很少的几行代码就可以实现媒体播放器的功能。并且,由于操作系统中已经内置了MediaPlayer,不需要额外集成播放器的文件。
不过,它的一个最大的问题是视频支持格式有限。这个问题本身并不严重,在十年前就可以通过安装Media Player Codec Pack的方式来扩展其支持格式的。对于一些私有格式的视频文件播放,也可以采用这种方案。
这种方式本身还是非常强大的,不过它带来了插件的安装问题了。如果你的程序是被许多客户端所使用的话,还是会有不少的麻烦的。
- 插件不容易被集成安装
- 安装完了后又不少参数要设置,并且不容易通过程序来设置它
- 第三方插件容易和客户端环境冲突,出问题不容易定位和处理
- 插件更新不方便
当然,如果客户端较少,可以人工维护的话,用MediaPlayer也不失为一种简单易行的方案。
二、使用VLC ActiveX控件
为了免除插件的麻烦,一种替换方案是直接使用一个比较强大的播放器VLC Player,通过它的ActiveX控件实现视频播放的功能。

该方法本质上和方法一一样,是调用的ActiveX控件,好处是可以非常快捷的实现播放器的功能。
axVLCPlugin21.playlist.add("mms://new-media/publishingpoint1", "", " :mms-caching=1000");
axVLCPlugin21.playlist.play();
这种方式和前面的方法一样,涉及到第三方程序的安装。不过,使用VLC的好处是,它的安装和更新比MediaPlayer的插件简单一些。出问题的几率也少一些。但一样存在acitvex控件的安装、注册、更新和冲突问题。
三、使用LIB VLC库
这种方式依然是依赖的VLC播放器的功能,不过它并不使用VLC的activex控件,通过pinvoke vlc的dll实现播放器的功能。相当于利用vlc的api实现了一个vlc的播放器。
Github上也有比较完善的对它的封装:https://github.com/ZeBobo5/Vlc.DotNet。如果要详细了解其结构可以参看园子里的这篇入门文章: c#万能视频播放器
这种方式比较成熟了,网上对libvlc的介绍非常多,集成起来还是非常容易的。出问题时相应的定位也比较容易,可以直接用vlc player对比。
这种方式比起直接使用VLC ActiveX来,开发起来要麻烦一些,但是可以实现一些更底层的控制。另外,由于不需要安装部署和更新都是可控的。可以满足绝大部分情况下的视频播放需要。
四、使用FFMPEG库
LibVLC的方式比虽然算简单易用,但是如果我们想实现一些更底层的功能时,此时就要则可以使用ffmpeg库了。实际上,vlc player的底层也是依赖于ffmpeg库的实现的, 他们之间是这样的一个关系。

使用ffmpeg的时,就拥有了更加底层的api了,此时可以实现更加强大的功能。并且它是跨平台的,对于移动平台的音视频开发也是非常有帮助的。
关于ffmpeg的介绍,网上还是有比较多的文章的,不过它相关的内容也比较多,后续我也会写一些文章介绍一些我使用过程中的一些心得。
如果只是想实现一个播放器的话,网上也有一些现成的封装的。
https://github.com/unosquare/ffmediaelement
也有文章介绍这个库如何使用:
https://github.com/DG-Wangtao/FFMEVideoPlayer
这个库本身没有什么大问题,基本上可以满足大多数场景的使用。但我试用了一下,一些异常的情况下的处理还是不如vlc来的完善。
在C#中实现视频播放器的更多相关文章
- 7款Flash和Javascript网页视频播放器
Flash和javascript网页视频播放器.梦想中的视频播放器是这样的: 支持所有格式,兼容所有主流视频网站,支持播放列表.视频缩略图.全屏播放.画面调节.预加载.体积贼小,功能贼多……. 也许你 ...
- 网页中插入Flvplayer视频播放器代码
http://blog.csdn.net/china_skag/article/details/7424019 原地址:http://yuweiqiang.blog.163.com/blog/stat ...
- 22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现
1 编写以下案例: 当点击了"播放"之后,在手机上的/mnt/sdcard2/natural.mp3就会播放. 2 编写布局文件activity_main.xml <Line ...
- 在网站中嵌入VideoJs视频播放器
一个博客难免需要引用视频来说明内容,但想要自己来实现一个视频播放器是不是一时半会就能完成的,更重要的是这需要对视频播放技术有一定的了解.于是自然而然的有人会想到开源项目.一个不错的选择便是video. ...
- html中的flv视频播放器
项目中要播放flv视屏,第一时间想到html5的<video>标签,只是很可惜<video>兼容性差也就算了,居然还对格式有明确限制,也就是说只支持Ogg.MPEG4.WebM ...
- Swift中使用MPMoviePlayerController实现自定义视频播放器界面
默认情况下播放器自带各种控制按钮,比如前进后退播放暂停等: var url = NSBundle.mainBundle().URLForResource("1", withExte ...
- Python应用03 使用PyQT制作视频播放器
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁任何形式转载. 最近研究了Python的两个GUI包,Tkinter和PyQT.这两个GUI包的底层分别是Tcl/ ...
- 打造自己的html5视频播放器
前段时间重新学习了一下html5的video部分,以前只是停留在标签的使用上,这一次决定深入了解相关的API,并运用这些API打造一个简单的视频播放器.所谓“打造自己的”,就是要自己重写video标签 ...
- 一款开源免费跨浏览器的视频播放器--videojs使用介绍
最近项目中的视频功能,需要做到浏览器全兼容,所以之前用html5实现的视频功能就需要进行改造了.在网上翻了个遍,试来试去,在所有的视频播放器中,就数它最实际了.首先我们来看看它的优点: 1.它是开源免 ...
随机推荐
- 06 Frequently Asked Questions (FAQ) 常见问题解答 (常见问题)
Frequently Asked Questions (FAQ) Origins 起源 What is the purpose of the project? What is the history ...
- 配置vuejs加载模拟数据
[个人笔记,非技术博客] 1.使用前确保安装axios插件,vuejs官方推荐,当然使用其他插件也可以 2.配置dev-server.js var router = express.Router(); ...
- Linux 下用 smartd 监测硬盘状况
https://blog.csdn.net/hanxuehen/article/details/6024826
- Spark(十)Spark之数据倾斜调优
一 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作 ...
- ASP.NET MVC之验证终结者篇
有时候我觉得,很多人将一个具体的技术细节写的那么复杂,我觉得没有必要,搞得很多人一头雾水的,你能教会别人用就成了,具体的细节可以去查MSDN什么的,套用爱因斯坦的名言:能在网上查到的就不要去记,用的时 ...
- 【LOJ】#2292. 「THUSC 2016」成绩单
题解 神仙dp啊><(也有可能是我菜) 我们发现,想要拿一段区间的话,只和这个区间的最大值和最小值有关系,那么我们考虑,如果一个区间[l,r]我们拿走了一些数后,使它的最小值是a,最大值是 ...
- JS 如何准确获取当前页面URL网址信息
在WEB开发中,时常会用到javascript来获取当前页面的url网址信息,在这里是一些获取url信息的小总结. 下面我们举例一个URL,然后获得它的各个组成部分:http://i.cnblogs. ...
- 浅谈jvm
1 .说起jvm,很多人感觉jvm离我们开发实际很远.但是,我们开发缺每时每刻都离不开jvm. a: java源码 编译后成.class字节码文件, b:根据classpath找到这个字节码文件, c ...
- hadoop集群的搭建(分布式安装)
集群 计算机集群是一种计算机系统,他通过一组松散集成的计算机软件和硬件连接起来高度紧密地协同完成计算工作. 集群系统中的单个计算机通常称为节点,通常通过局域网连接. 集群技术的特点: 1.通过多台计算 ...
- 利用过滤器对string类型的入参进行统一trim
背景 最近做的一些项目都是后台管理系统,主要是对表单数据的增删改查操作,其中有些表单项是字符串类型的,对于这些类型的表单项就需要在保存或编辑之前要进行.trim()处理,刚开始感觉没什么,遇到了就手动 ...