vlc的應用之二:vlc的ActiveX及cab

請移步https://higoge.github.io/,全部下載資料在那個博客都能找到。謝謝。 php

--------------------------------------------------------------------html

   2009-05-14補充:8. Activex的卸載;9. 讓vlc自動安裝Activex ;10. 關於vlc的Activex的說明。
git

    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.6iActiveX註冊

    在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內容以下:github

regsvr32 dlls\axvlc.dllweb

    雙擊install.bat後會提示「dlls\axvlc.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

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC]
"InstallDir"="E:\\vlc-0.9.4ActiveX\\dlls"瀏覽器

    新建文本文件install.bat內容以下:

regsvr32 dlls\axvlc.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 dlls\axvlc.dll /u

    vlc-0.9.4的Activex的卸載:新建uninstall.reg,內容以下:

Windows Registry Editor Version 5.00

[-HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN]

    新建uninstall.bat,內容以下:

regsvr32 dlls\axvlc.dll /u

regedit /s uninstall.reg

    雙擊uninstall.bat,提示dlls\axvlc.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的一點忠告,可是隻屬於我的意見,僅供參考。


參考網址:1. [url]http://rogerfd.cn/?p=157[/url]2. [url]http://wiki.videolan.org/ActiveX/HTML[/url]3. [url]http://wiki.videolan.org/ActiveX[/url]4. [url]http://forum.videolan.org/viewtopic.php?f=14&t=48812&p=155832&hilit=regsvr#p156070[/url]5. [url]http://www.onlyblog.com/blog2/zyjzyj2000/10184.html[/url]

相關文章
相關標籤/搜索