VLC的ACtiveX插件使用方法

转载 2011年01月13日 16:51:00

在Roger看来对VLC的二次开发 包括把VLC嵌入自己的应用 ,以及修改VLC本身的功能和特性。本文主要讲前者。总的来说把VLC内嵌入自己的应用有4种途径:
直接调用VLC进程(喂喂喂…这也算?)
VLC的plugin for Mozilla
VLC的ActiveX插件
调用libvlc

    当然,理论上也可以把VLC的源码 直接扣出一部分来放到自己的程序 中,不过这种方法难度太大没多大意义,可以yy一下,嘿嘿。

    先说第一种办法,别怀疑,这是非常有用的一种解决方案 ,特别是对于转码、流转发等应用,通常直接调用VLC就可以了。VLC有HTTP和Telnet的Interface模块(就是和用户交互的界面 ),也很方便和远程交互。Roger做过一个用VLC进行多路直播控制的Web 系统 ,就是用了VLC的HTTP界面,非常方便。而且跨平台 应 用也非常方便,只需要安装不同平台的VLC就行了。直接调用VLC的话最重要的就是参数,可以从 vlc.exe -H 中获取比较详细的命令行参数介绍。对于转码、转发的,命令行参数会比较复杂,可以用GUI先试一下,然后把界面上的Generated stream output string拷下来。

    VLC的Mozilla plugin除了用于Firefox的web页之外,还可以用于任何XUL-base的应用,这种应用通常使用xulrunner来启动。XUL是一种用 XML来写界面的语言,有点像HTML而且也兼容大部分HTML标记,Firefox就是用XUL来写的。VLC的Mozilla插件通常用 Javascript来控制,详细的接口 文档可以参考这里:http://www.videolan.org/doc/play-howto/en/ch04.html#id310965 这 个接口有比较老的第一版和比较新的第二版,建议用新的,功能多一些。用VLC的Mozilla插件的应用并不少,例如比较出名的Miro、 Songbird。因为这个好处是显而易见的:跨平台、可控性强、使用简单;限制也很明显:专为Mozilla设计,应用的范围很窄。

    VLC的ActiveX插件只能用于Windows 平台,当然这是因为ActiveX只是微软 的东西。但是不得不说这个还是很好用的。无论是C++、C#、VB还是网页,都可以轻松地将这个ActiveX利用起来。关于这个的VLC官方文档在这里http://wiki.videolan.org/ActiveX_Controls 开发、使用之前别忘了先要注册ActiveX控件,方法是运行 regsvr32 axvlc.dll。Roger 之前写的 SimpleTV 就是调用了VLC的ActiveX控件,所以这也可以作为一个示例 代码 ,可以主要看看怎么调用这个控件来做串流的代码:

//Create Option for the plugin bool bIPv6 = false;

if (strstr (szMRL, "::")) { bIPv6 = true; }

tagVARIANT opt,var,ip6;

CString sout, ipv6 = "ipv6=1";

SAFEARRAY *psa;

long index;

SAFEARRAYBOUND bound[1] = {0};

bound[0].cElements = bIPv6 ? 2 : 1;

if (m_cfg.bDisplayWhenRecording)

{

    sout.Format(”sout=#duplicate{dst=display,dst=std{access=file,mux=ts,dst=/”%s/”}}”, strName);

}

 else

{

    sout.Format(”sout=#duplicate{dst=std{access=file,mux=ts,dst=/”%s/”}}”, strName);

}

var.vt = VT_BSTR;

var.bstrVal = sout.AllocSysString();

psa = SafeArrayCreate (VT_VARIANT, 1, bound);

index = 0;

SafeArrayPutElement (psa, &index, &var);

if (bIPv6)

{

    ip6.vt = VT_BSTR;

    ip6.bstrVal = ipv6.AllocSysString();

    index = 1;

    SafeArrayPutElement (psa, &index, &ip6);

}

opt.vt = VT_ARRAY | VT_BSTR; opt.parray = psa;

tagVARIANT nul;

nul.vt = VT_NULL;

m_vlc.GetPlaylist ().add (szMRL, nul, opt);

m_vlc.GetPlaylist ().next ();

m_vlc.GetPlaylist ().play ();

     很多人调用VLC的ActiveX控件都会遇到一个问提就是,播放没有反应。大部分的原因都是因为plugins的问题。VLC作为exe运行时会递归搜 索当前目录下的modules和plugins目录来寻找plugin,但是当以ActiveX控件运行时,默认只会检查注册表的 HKLM_Software_VideoLan_VLC_InstallDir,并添上plugins作为模块 搜 索路径,如果这个路径没有设置或者设置不对,VLC将找不到大部分的模块,导致大部分功能缺失而无法运行。如果需要修改这一特性可以修改 /activex/plugin.cpp (0.8.6i)中的 VLCPlugin::getVLC函数。在SimpleTV中,Roger修改的一个片段是

char p_pluginpath[MAX_PATH+1];int iTmp = 0;

/* 得到SimpleTV.exe的全路径 */DWORD dwLen = GetModuleFileNameA (NULL, p_pluginpath, MAX_PATH);for (iTmp = strlen(p_pluginpath) - 1; iTmp >= 0; -- iTmp){ if (p_pluginpath[iTmp] == ‘//’) { p_pluginpath[iTmp] = 0; break; }}

/* 将模块路径设为SimpleTV下的 player/modules */strcat (p_pluginpath, "//player//modules");ppsz_argv[ppsz_argc ++] = “–plugin-path”;ppsz_argv[ppsz_argc++] = p_pluginpath;

 

    还有一点是配置文件vlcrc的路径,如果需要修改的话,可以修改 src/misc/configuration.c 中的 GetDir 函数 , 在Windows下这个目录默认返回 %APPDATA% ,以上两步做好的话其实就可以做出一个Portable的绿色版VLC了。

    和其他ActiveX的播放器,例如WMP、QuickTime、RealPlayer相比,VLC的优点也很明显:自带所需解码器、开源 、功能强大。

    当然ActiveX方式和Mozilla 插件 的方式也是有局限性的,这样的方式功能还不够强大,例如没有截屏的接口…如果需要更多完整的功能,可以考虑直接调用libvlc的接口,VLC官方提供了一些文档和例子http://wiki.videolan.org/Libvlc

    这种方法Roger没有做过,就不多说了。这里还有一个用C#调用libvlc的例子http://jeremiah.blog.51cto.com/539865/116981

    在Windows下libvlc可能默认是不编译的(0.8.6i),可以在configure中开启这一选项 –enable-shared-libvlc

    完整的VLC体积还是不小的,如果只需要VLC一部分功能的话,可以最后做一下精简。这个可以参考Roger的上一篇关于VLC的文章 《VLC(六) 精简》

————————————————————————

作者: roger

Blog:http://rogerfd.cn

Email:roger99707@163.com

本文欢迎转载和引用,请保留本说明并注明出处

————————————————————————

本文转自http://rogerfd.cn/?p=227

相关文章推荐

VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)

VLC毫无疑问是优秀的一款播放软件,子B/S机构的web项目中,如果能把它嵌入页面,做页面预览或者其他,是非常棒的。 第一步:下载VLC安装程序;(推荐1.0.3或者是1.0.5版本,比较稳定) ...

vlc web 插件 js接口

Embed tag attributes To embed the plugin into a webpage use the following template: Require...

vlc 网页插件的 使用与控制 API

vlc 提供了ie浏览器的activeX插件和火狐或者chrome的插件,基本上覆盖了所有浏览器,所以有复杂解码需求的情况下用vlc来解决网页播放视频,也是一种没办法的办法。 下面开始使...

VLC在web系统中应用(x-vlc-plugin 即如何把VLC嵌入HTML中)第一篇

VLC毫无疑问是优秀的一款播放软件,子B/S机构的web项目中,如果能把它嵌入页面,做页面预览或者其他,是非常棒的。 第一步:下载VLC安装程序;(推荐1.0.3或者是1.0.5版本,比较稳定)...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

[转载]在MFC窗口中嵌入VLC ActiveX控件

经过一番的google和折腾,终于把VLC ActiveX控件嵌入MFC窗口并实现简单的视频播放了,虽然发现很多问题(比如vlc参数设置[注1],程序关闭后进程不结束等等),觉得最终可能还是会选择li...

VLC的ACtiveX插件使用方法

VLC的ACtiveX插件使用方法 标签: mozillapluginsdstfirefoxwindows跨平台 2011-01-13 16:51 34206人阅读 评论(4) 收藏 举报...

关于vlc播放器的ActiveX控件调用问题

下了好几个版本的vlc播放器,却发现自带的

VLC media player ActiveX控件制作

昨天折腾折腾这个折腾了一天。大致干了这几件事: 一,重新制作VLC安装包,去掉一些不必要的东东,设置一些必要的东东 二,制作ActiveX cab包 三,给CAB包加数字签名 四,调用代码 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:VLC的ACtiveX插件使用方法
举报原因:
原因补充:

(最多只允许输入30个字)