自定义基于 VLC 的视频播放器

前言(蛋疼的背景故事)

  前段时间,接了一个小项目,有个需求是要在系统待机一段时间以后,循环播放 MV(类似于 Windows 系统的屏幕保护)。

  听到这个需求,我首先想到的是 MediaPlayer 和 Flash,因为这两个组件几乎所有 Windows 平台的电脑都会安装。但客户说不能用 Flash,原因是以前使用过,太不稳定,所以我决定使用 MediaPlayer。

  MediaPlayer 做为一个 COM 组件可以很方便的加载到 VS 工具箱中,使用的时候直接拖放到 Form 上,用起来超级简单。而且,网上随便搜一下都有大把的示例。所以,进展很顺利。。。

  后来,上线几天以后,问题来了。客户反应有一次下午下班,系统运行以后忘关了,第二天早上就只显示系统桌面,不确定什么时候“闪退”了。所以他们第二天就专门测试了待机问题,然后发现待机的时候很频繁的会出现闪退问题。。我当时直觉就是:一堆SB啊,别 TM 网上下载 GHO 镜象安装带着一堆病毒和插件的系统,别 TM 装个杀毒软件把老子进程给杀掉(因为我测试的时候程序里的某段操作代码被360当成病毒杀了,我以为也是杀毒软件的问题)。

  我抱着对 Microsoft 无比信任的情怀,一边默默骂着SB,一边让他们用官方的 ISO 重装系统。并且要求不要安装杀毒软件或者在杀毒软件里把我的程序设为信任。同时,我重新检查了一下系统里的所有方法,确保所有的操作都都异常处理,并且,增加了 Application 级的异常处理。。然而,没什么卵用。

  无奈,去现场调查。。他们果然没有忽悠我,正当我舒服的靠在椅子上欣赏我喜欢的那首MV的时候,程序没了,就那样直接没了,连一个错误消息都没有。做 .NET 这么久,一直信赖的异常处理机制竟然没起作用。。那感觉,就好像冬天的大早上突然被人掀了被子那样的渴求温暖,就好像脱光了正和妹子缠绵的时候妹子突然消失了的那种空洞。。。

  后来,和他们仔细的确认了一下问题出现的频率。他们说这个问题出现的时间不定,有时候三四个小时,有时候六七个小时。有时候报错“***.exe 已停止运行”,有时候啥都没有,直接程序界面就消失了,仿佛从来没有启动过似的。。他们曾经换了一台电脑测试,问题更甚,有时候半个小时就会崩溃一次。

  程序直接消失,异常捕获的代码肯定是没有执行,事实上也是,Log 都是突然中断,没有任何异常和关闭逻辑的日志。深入调查时,发现更奇葩的情况是这个错误连系统日志都不一定记录。。听他们反应这两天系统闪退过七八次,但是系统里关于这个应用的日志只有三条,而且没有刚才我看到的那次闪退的任何日志记录。。只是在其中一个错误记录里,查到的错误代码说是“组件异常”。。组件,那只有 MediaPlayer 了。。。

  百度、Google、Bing、360搜索,然而并没有什么卵用。。网上大多是对 MediaPlayer 组件的介绍和易用性、便捷性的赞美,就是那种能教会小白们写一个简单的播放窗体的那种满满的成就感,一点深入的线索都没找到。。

  无奈,决定放弃 MediaPlayer。

  后来,找到了一个博客中介绍的 VLC Player(不过我忘了具体是哪位前辈的文章了)。

  按博客里的介绍,下载了组件,写了一个简单的Demo,然后加入系统,运行起来貌似好多了。只是后来他们反应有一个 MV 播放到某个时间点的时候,会报错,又查资料,终于在一个EN文网站上查到原因说是版本问题,下载最新的 VLC Player ,拿到最新的库使用就行了。

  然后,下载了 VLC Player ,安装,在安装目录里找到最新的 DLL 和插件包,覆盖到项目里,果然再没出现闪退的问题。

  又可以懒洋洋的靠在椅背上喝着客户公司漂亮妹子做好的咖啡装逼了,顺便欣赏着咖啡上心形的拉花,YY着妹子丰满的身材。。。

正文开始

  VLC Player 是一个功能非常非常强大的播放器,界面低调简洁,完全不像其它播放器那样有一个风骚又混乱的外观。

   再看它支持播放的媒体文件格式,完甩 MediaPlayer 几十条街:

  在 GitHub 上有一个关于 VLC Player 的开源项目,叫 Vlc.DotNet,貌似也是基于播放器里的 DLL 封装的类库,地址是:https://github.com/ZeBobo5/Vlc.DotNet 。这个类库功能很强大,但是功能强大也意味着比较复杂。我没有使用这个程序包,而是网上找了一个简单的直接映射 DLL 库函数的方式实现的播放功能。

第一步:获取 VLC 类库。

  获取 VLC 类库有两种方式:

  1,从上面那个开源项目 Vlc.DotNet 里,可以下载到整个项目的源码和所用到的 VLC 库文件,我们这里只使用 VLC 的库文件,如图:

(为了以防客户32位和64位系统一起使用,所以这里使用了32位的库x86)

  2,下载一个 VLC 播放器,安装,然后在安装目录里能找到需要的类库,如图:

  我们只需要 libvlc.dll、libvlccore.dll 和 plugins 目录,所以可以忽略其它文件。

  libvlc.dll、libvlccore.dll 文件中是 VLC 的库函数,plugins 目录里是 VLC 对各种不同媒体文件提供支持的插件。

第二步:映射、封装 dll 库函数。

   libvlc.dll、libvlccore.dll 这两个不是.NET 类库,所以没办法直接引用到我们的项目里,这里我参考其他前辈们的示例,对其进行封装,方便使用。

  因为代码较长,所以这里不直接贴出来了,需要的朋友可以在这里下载 http://files.cnblogs.com/files/zhhh/VlcPlayerBase.zip

  代码里封装了 播放、暂停、停止、音量控制、进度控制等一些常用功能,以便后面使用。

  
第三步:使用

  封装完以后就可以直接调用了,设计一个简单的界面。如图:

  添加相应的功能,就OK了。

  项目代码可以从下面链接下载:http://files.cnblogs.com/files/zhhh/VlcPlayer.zip

  

第四步:装逼

  最后,项目运行之前,一定要将前面我们准备好的库文件(libvlc.dll、libvlccore.dll 和 plugins 目录) Copy 到程序运行根目录,比如 Debug 目录,如图:

  Copy 完,就可以装逼了。

  运行 -> 打开 -> 播放,非常完美,Pen Pineapple Apple Pen:

   

最后

  DLL 实际上是使用 VLC 的参数对播放器进行的配置和操作,对于这些参数的介绍,可以参考 VLC Player 安装目录下的 帮助文件 vlc-help.txt,如图:

时间: 2024-10-21 09:11:32

自定义基于 VLC 的视频播放器的相关文章

基于VLC的视频播放器(转载)

最近在研究视频播放的功能,之前是使用VideoView.在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性很大. 找到了一个比较合适的播放器, Github地址为 https://github.com/xiaomo/AndroidPlayerLibrary  . 这个播放器是基于vlc这个软件, 在将我们的demo导入到Eclipse中之后,可以发现,这样一个libvlc文件夹. 在Media这个类中我们可以发现,这些是支持的格式还

基于VlC的视频播放器

最近在研究视频播放的功能,之前是使用VideoView.在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性很大. 找到了一个比较合适的播放器,Github地址为https://github.com/xiaomo/AndroidPlayerLibrary .这个播放器是基于vlc这个软件,在将我们的demo导入到Eclipse中之后,可以发现,这样一个libvlc文件夹. 在Media这个类中我们可以发现,这些是支持的格式还是比较多的

最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器

本文记录使用libVLC的开发的最简单的视频播放器示例.VLC Media Player是一款优秀的播放器,但是由于它的源代码编译的难度比较大,一直没有深入研究过它的开发方面的技术.此前触到了一些VLC开发方面的东西,因此总结了一下libVLC的开发示例程序. 如何获取VLC的SDK VLC开发所需的库文件可以有2种获取方法: 1. 自行编译2. 直接从安装目录里面拷贝出来 第一种方法难度要大一些.尤其是在Windows下编译VLC是个比较麻烦的事情.一般情况下可以选择第二种方法获取VLC开发所

转:基于libVLC的视频播放器

本文来自于:http://blog.csdn.net/leixiaohua1020/article/details/42363079 ? 最简单的基于libVLC的例子:最简单的基于libVLC的视频播放器 本文记录使用libVLC的开发的最简单的视频播放器示例.VLC Media Player是一款优秀的播放器,但是由于它的源代码编译的难度比较大,一直没有深入研究过它的开发方面的技术.此前触到了一些VLC开发方面的东西,因 此总结了一下libVLC的开发示例程序. 如何获取VLC的SDK VL

转:最简单的基于 DirectShow 的视频播放器

50行代码实现的一个最简单的基于 DirectShow 的视频播放器 本文介绍一个最简单的基于 DirectShow 的视频播放器.该播放器对于初学者来说是十分有用的,它包含了使用 DirectShow 播放视频所有必备的函数. 直接贴上代码,具体代码的含义都写在注释中了: /* 雷霄骅 * 中国传媒大学/数字电视技术 * [email protected] * */ // aviplayer.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #incl

OpenCV:基于MFC的视频播放器和图片读取器

实例工程包下载[OpenCV:基于MFC的视频播放器和图片读取器] 一.实现的功能 1.打开本地视频进行读取.播放.暂停.停止控制 2.图片打开功能分为两种:可使用"打开图片"按钮打开本地图片,或者点击comobox里面设定的图片列表选择并显示图片 二.编译环境 OS:Win8.1 x64 IDE:  Visual Studio 2013 OpenCV: 2.4.8 三.主要思路 1.视频的滑动条控制: ①主窗体的OnHScroll()响应函数负责响应slider滑动条的变化,这样就轻

自定义基于XML的验证器

1 a.编写一个类,继承FieldValidatorSupport类. 2 b.在public void validate(Object object)编写你的验证逻辑 3 不符合要求的就向fieldErrors中放消息 4 String fieldName=getFieldName(); 5 String fieldValue=(String) getFieldValue(fieldName, object); 6 c.一定注册你的验证器才能使用在src底下建立validators.xml定义

基于VLC的播放器开发

VLC的C++封装 因为工作需要,研究了一段时间的播放器开发,如果从头开始做,可以学习下FFmpeg(http://www.ffmpeg.org/),很多播放器都是基于FFmpeg开发的,但是这样工作量和难度都比较大,如果想很快能拿出一个播放器来用的,可以研究下开源的播放器,参考下射手播放器作者的文章:媒体播放器三大底层架构. 对比下现有的主流播放器:媒体播放器列表,VLC是在各个方面都表现很突出的一款.VLC 是一款免费.自由.开源的跨平台多媒体播放器及框架,可播放大多数多媒体文件,DVD.音

C#编写的基于VLC的播放器

首先看一下最终的程序效果 实现的功能: 1:打开播放的音视频文件((1)菜单栏"文件"->"打开",(2)工具栏(下面)"打开"(3)播放器右键->打开) 2:暂停,继续播放,停止音视频文件 3:进度条和右下角文本框显示播放进度 4:拖动进度条对视频定位播放 5:工具栏(下面)"快进","快退"均为5s 6:音量调节 7:菜单栏"文件"下可记录最近播放的三个文件 8:在有记录