(转)关于VLC 播放器

时间:2023-01-14 19:29:18

最近比较忙,忙来忙去也不知道干了些什么
一直在了解 VLC 播放器方面的东西,目标是实现一个基于 VLC 的 Client ,
来播放 RTP / RTSP 的流媒体。

下面是我对这东西的个人理解,写下来免得以后糊涂了,也欢迎有兴趣的朋友来交流

关于 VLC ,这东西很 nb 。嗯
它可以:
1。播放除了rm 系列格式之外的所有视频。额,好吧是几乎所有。。
由于采用了plugin 的编解码器,它是能够扩展的。
2。可以播放不完整的视频文件,比如BT下了一半的电影。
3。可以方便的获取输入流媒体,并且输出。
VLC 的输入可以是本地视频,也可以是 mms 、rtsp 流媒体,或者是FTP上面的文件
甚至用 screen:// 你可以把你的屏幕当成输入。VLC 可以根据不同的输入调用不同的解码程序。
获得了输入并且解码了以后你可以选择显示视频到窗口(播放器)、存储到硬盘、或者输出到网络(点播)。
好吧。。你可以选择即显示视频又存储,或者输出给别的计算机。
嗯 是不是很乱。。比如说我有个avi格式的视频,我可以一边播放一边把他转换成mp4格式存到我的手机里,或者我有一部电影想给朋友看,怎么办?开FTP传么。。哦,用VLC你可以在自己浏览的同时通过 rtp 协议发送给你的朋友看。
额,的确比较乱,不过这也是VLC强大的地方。

要在程序中使用VLC的功能,据我所知有几个方法:
1。直接使用源码。。这个有点麻烦,在windows下编译VLC只能用 Mingw32 或者 Cygwin。
2。使用 libvlc.dll 。由于已经有了 source ,直接找到需要的函数的定义从 libvlc.dll 中导出相应功能即可。劳动量大,而且基于此开发的DD得遵守GPL。。
3。使用 ActiveX。VLC for windows 安装程序提供了axvlc.dll ,实现了 VLC 基本功能的封装。
初衷是为了能在web中调用VLC播放视频,所以对于一个控件浏览是没问题的,
但是要想在单个web页面同时浏览一路以上不同源的流媒体,会出现IE崩溃的问题(fixed in v0.9.0 Nightly Builds)。
对于在 App 中使用 ActiveX ,静态调用比较简单,嗯 。无论是 MFC 还是 VCL,在窗体上安置好控件后,封装好的对象都自动生成了。
关于 ActiveX 的动态调用 ,( 这个我还不是很熟。。)在 BCBuilder 中 IDE 会自动将 VLCPlugin 封装成 VCL控件 , 直接new即可,甚至不用手动delete。在VC中 先用MIDL生成wapper文件,如果是MFC中,用CWnd.CreateControl创建,如果是WINX、WTL,可以用ATL::CAxWindow.CreateControl创建(这种方式似乎有内存泄漏问题。至于SDK。。。好像是用用CreateWindow。
btw:0.8.6提供的ActiveX有些BUG,在BCB中如果new了两个以上的VLCPlugin ,动态delete掉一个,再创建就会出错,多个VLCPlugin 播放停止操作也会出问题(fixed in v0.9.0 Nightly Builds)。

现在初步用AxtiveX在BCBuilder做了个演示,正在考虑直接封装dll以获得更多功能。