• vlc的应用之二:vlc的ActiveX及cab


    请移步https://higoge.github.io/,所有下载资料在那个博客都能找到。谢谢。 

    http://jeremiah.blog.51cto.com/

    2009-05-14补充:8. Activex的卸载;9. 让vlc自动安装Activex ;10. 关于vlc的Activex的说明。

        vlc自带了ActiveX控件--axvlc.dll,在编译完vlc之后的activex文件夹下。ActiveX是个好东西,axvlc.dll可以随意放到任何位置,成功注册之后可以方便的应用在程序和网页之中。可以参考activex文件夹下的test.html和README.TXT。ActiveX控件的接口有第一版和第二版,第一版简单,功能少,已经不再维护建议用第二版本,功能多一点。(参考的[1])
        vlc-0.8.6i和vlc-0.9.4的ActiveX注册方法略有不同。
        做ActiveX的网页测试之前需要把Internet选项-->安全-->本地Intranet的安全级别调到最低。Jeremiah的网页测试环境是IE7,其他浏览器未进行测试。

        1. vlc-0.8.6i的ActiveX注册
        在E:下新建文件夹vlc-0.8.6iActiveX,拷贝vlc-0.8.6i目录下的plugins,libvlc.dll,activex/axvlc.dll到vlc-0.8.6iActiveX/dlls目录下,拷贝activex/test.html到vlc-0.8.6iActiveX下。新建文本文件install.bat内容如下:

    regsvr32 dllsaxvlc.dll

        双击install.bat后会提示“dllsaxvlc.dll中的DllRegisterServer成功”。然后用打开test.html,文本框输入MRL就可以播放了。

        2. vlc-0.9.4的ActiveX注册
        0.9.4不光要告诉计算机vlc的axvlc.dll的位置,还要告诉注册表installdir的位置,也就是libvlc.dll的位置
        在E:下新建文件夹vlc-0.9.4ActiveX,拷贝vlc-0.9.4目录下的plugins,libvlc.dll,libvlccore.dll,activex/axvlc.dll到vlc-0.9.4ActiveX/dlls目录下,拷贝activex/test.html到vlc-0.9.4ActiveX下。新建文本文件install.reg内容如下:

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINESOFTWAREVideoLANVLC]
    "InstallDir"="E:\vlc-0.9.4ActiveX\dlls"

        新建文本文件install.bat内容如下:

    regsvr32 dllsaxvlc.dll

    regedit /s install.reg

        双击install.bat后就可以用test.html进行测试了。

        3. 一点点小提示
        如果注册成功,但是test.html播放文件的时候会报错说decoder modules会找不到之类信息,那请将0.8.6i和0.9.4交替注册,可能会解决这个问题。(Jeremiah因为这个问题搞了一天,NND)(2009-05-14补充:直接看8吧,以前这个地方写的不大对。)
        
        4. 制作cab文件
        如果要类似与test.html作个播放器服务器,但是我们却不能手动操纵客户端去下载注册vlc的ActiveX,解决方法就是自己制作cab文件。
        (1) 到本日志的附件(cabsdk.rar)或者以下地址去下载cabsdk.exe:[url]http://download.microsoft.com/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/cabsdk.exe[/url]
        (2) 安装cabsdk.exe
        (3) 将axvlc.dll及vlc的安装文件拷贝到cabsdk安装路径/BIN/ 下。Jeremiah这里用的是vlc-0.8.6i-win32.exe。(关于如何制作vlc的安装文件,参考日志《windows平台下vlc编译之二:vlc-0.8.6i的编译》)
        (4) 在/BIN下新建文本文件axvlc.inf,内容如下:

    ; Version number and signature of INF file.
    ;
    [version]
    signature="$CHICAGO$"
    AdvancedINF=2.0

    [Add.Code]
    vlc-0.8.6i-win32.exe
    axvlc.dll=axvlc.dll

    [axvlc.dll]
    FileVersion=0,8,6,0
    clsid={9BE31822-FDAD-461B-AD51-BE1D1C159921}
    RegisterServer=no
    hook=nsiinstaller

    [vlc-0.8.6d-win32.exe]
    FileVersion=0,8,6,0
    file-win32-x86=thiscab

    [nsiinstaller]
    run=%EXTRACT_DIR%vlc-0.8.6i-win32.exe

        注意:请根据安装文件的版本修改此文件。
        (5) 命令行到BIN目录下,执行以下命令生成cab文件:

    CABARC.EXE N axvlc.cab axvlc.inf axvlc.dll vlc-0.8.6i-win32.exe

        
        5. cab文件的使用
        html页面下使用cab文件可以通过以下方式:

    <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"
                    codebase="your/path/of/cabfile/axvlc.cab"
                             width="640" height="480" id="vlc" events="True">
    <param name="Src" value="" />
    <param name="ShowDisplay" value="True" />
    <param name="AutoLoop" value="False" />
    <param name="AutoPlay" value="False" />
    </OBJECT>

        这样web客户端无须手动注册axvlc.dll就可以使用了。

        6. 一点比较严重小问题
        由于vlc的安装文件一般是比较大,所以制作出来的cab文件也是很大的,在网络带宽不是很好的时候,光下载这个cab可能就很长很长时间,基本上可以说这样的方式是行不通的。所以我们需要根据自己的业务需求去精简vlc。Jeremiah将在下一篇日志介绍。

        7. C#下使用vlc的ActiveX
        vs2005新建一个windows应用程序,在左侧工具箱右键-->选择项-->com组件-->VideoLAN VLC ActiveX plugin v2,工具箱里面就添加了vlc的ActiveX控件,可以在窗体里面随便画了。
        调用函数如下:

    InBlock.gifprivate void button1_Click(object sender, EventArgs e)
    InBlock.gif{
    InBlock.gif        //输入参数
    InBlock.gif        string parameter = ":sout=#duplicate{dst=display} :no-overlay";
    InBlock.gif        
    InBlock.gif        //判断是否正在播放
    InBlock.gif        if (this.axVLCPlugin21.playlist.isPlaying)
    InBlock.gif        {
    InBlock.gif                //如果正在播放, 则停止
    InBlock.gif                this.axVLCPlugin21.playlist.stop();
    InBlock.gif        }
    InBlock.gif
    InBlock.gif        //清空播放列表
    InBlock.gif        this.axVLCPlugin21.playlist.clear();
    InBlock.gif
    InBlock.gif        //添加播放列表
    InBlock.gif        this.axVLCPlugin21.playlist.add(textBox1.Text, null, parameter);
    InBlock.gif
    InBlock.gif        //播放列表更新到新添加的播放项
    InBlock.gif        this.axVLCPlugin21.playlist.next();

    InBlock.gif        
    InBlock.gif        //播放
    InBlock.gif        this.axVLCPlugin21.playlist.play();
    InBlock.gif}

        其他函数调用参考activex/README.TXT。
        Jeremiah在附件里面提供了一个简单的调用程序(WindowsApplication1.rar),不过需要注意的是,在用它测试0.9.4的ActiveX,当正常播放文件时点击X关闭窗口产生异常,电脑会重新启动。在主窗体的

    FormClosing事件中让主线程睡了1000ms,并不能完全保证电脑不重启,所以请根据自己的情况进行本附件的调试。

        8. Activex的卸载

        卸载是安装的反向操作,知道怎么安装,卸载很简单。

        vlc-0.8.6i的Activex的卸载:新建uninstall.bat,内容如下:

    regsvr32 dllsaxvlc.dll /u

        vlc-0.9.4的Activex的卸载:新建uninstall.reg,内容如下:

    Windows Registry Editor Version 5.00 

    [-HKEY_LOCAL_MACHINESOFTWAREVideoLAN]

        新建uninstall.bat,内容如下:

    regsvr32 dllsaxvlc.dll /u 

    regedit /s uninstall.reg

        双击uninstall.bat,提示dllsaxvlc.dll中的DllUnregisterServer成功。就卸载完毕了。

        9. 让vlc安装的时候自动安装Activex

        4里面提到cab包的制作及5里面提到了cab包的使用。cab其实就是让客户自动下载vlc的安装文件,然后启动安装。但是安装过程中,出现这样一步:

        Activex plugin默认是没有被选中的,如何让它这一步默认是选中的,或者选中并且是灰色的(比如像Media Player这一项),不让客户改变呢?我们需要修改编译完的vlc的vlc.win32.nsi文件。然后用它重新制作vlc-0.9.4-win32.exe.

        具体修改过程如下:

        在vlc.win32.nsi文件中,找到:

    InBlock.gifSection /o $Name_Section04 SEC04 
    InBlock.gifSectionIn 3

        修改为:

    InBlock.gifSection $Name_Section04 SEC04 
    InBlock.gifSectionIn 1 2 3

        或者在1 2 3后面加入“空格RO”,表示这项是必须的不能去掉,就是选中并且是灰色的。$Name_Section04可以替换为"My ActiveX plugin (required)"等自己的名字。

        然后根据前面博客讲的制作vlc-0.9.4-win32.exe的过程执行一遍,然后再制作cab包就okay了。

        10. 关于vlc的Activex的说明

        根据我对vlc的Activex的使用,发现这个Activex做的真是不好,很多方法没有封装进来,如果扩展这个Activex,工作量不小。如果是做C/S程序,强烈不建议用Activex来开发。除非是想简单做一下,快速开发等。做C/S播放器还是看我这篇博客:《vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll 》,开发过程虽然慢点,但是比较可控。Activex只适合应用于B/S项目,只适合WEB开发,这是Jeremiah的一点忠告,但是只属于个人意见,仅供参考。

  • 相关阅读:
    Redis数据结构之字典
    多路复用
    Redis数据结构之SDS
    记一个图片转换神器vectorizer
    Java基础之面向对象上
    科学
    Linux内核源码分析之setup_arch (二)
    Linux内核源码分析之setup_arch (一)
    printk 流程分析
    多个线程顺序打印问题,一网打尽
  • 原文地址:https://www.cnblogs.com/caicaizi/p/4995546.html
Copyright © 2020-2023  润新知