




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
vlc的應(yīng)用之一:在命令行下的使用2008-11-2813:45:34標(biāo)簽:command休閑line職場(chǎng)vlc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/115910如果編譯得到?jīng)]有界面的vlc,雙擊運(yùn)行后就沒(méi)法手動(dòng)選打文件或網(wǎng)絡(luò)了。在這介紹幾個(gè)vlc的命令行命令。vlc幫助vlc--helporvlc--help--advancedvlc的debuglogvlc-vv--extraintf=logger運(yùn)行的log將會(huì)保存在vlc-log.txt中。vlc打開(kāi)文件vlc-vv--extraintf=loggerd:/01.avi作為服務(wù)器通過(guò)rtp往客戶端發(fā)送ts流vlc-vvv--extraintf=loggerd:/01.avi:sout=#duplicate{dst=rtp{dst=localhost,mux=ts,port=1234}}作為客戶端接收rtp流vlc-vv--extraintf=loggerrtp://@:1234vlc的應(yīng)用之二:vlc的ActiveX及cab2008-11-2815:38:01標(biāo)簽:vlc休閑cab職場(chǎng)ActiveX原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/1159432009-05-14補(bǔ)充:8.ActiveX的卸載;9.讓vlc自動(dòng)安裝ActiveX;10.關(guān)于vlc的ActiveX的說(shuō)明。vlc自帶了ActiveX控件--axvlc.dll,在編譯完vlc之后的activex文件夾下。ActiveX是個(gè)好東西,axvlc.dll可以隨意放到任何位置,成功注冊(cè)之后可以方便的應(yīng)用在程序和網(wǎng)頁(yè)之中??梢詤⒖糰ctivex文件夾下的test.html和README.TXT。ActiveX控件的接口有第一版和第二版,第一版簡(jiǎn)單,功能少,已經(jīng)不再維護(hù)建議用第二版本,功能多一點(diǎn)。(參考的[1])vlc-0.8.6i和vlc-0.9.4的ActiveX注冊(cè)方法略有不同。做ActiveX的網(wǎng)頁(yè)測(cè)試之前需要把Internet選項(xiàng)-->安全-->本地Intranet的安全級(jí)別調(diào)到最低Jeremiah的網(wǎng)頁(yè)測(cè)試環(huán)境是IE7,其他瀏覽器未進(jìn)行測(cè)試。vlc-0.8.6i的ActiveX注冊(cè)在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內(nèi)容如下:雙擊install.bat后會(huì)提示“dlls\axvlc.dll中的DllRegisterServer成功”。然后用打開(kāi)test.html,文本框輸入MRL就可以播放了。vlc-0.9.4的ActiveX注冊(cè)0.9.4不光要告訴計(jì)算機(jī)vlc的axvlc.dll的位置,還要告訴注冊(cè)表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內(nèi)容如下:WindowsRegistryEditorVersion5.00[HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN\VLC]"InstallDir"="E:\\vlc-0.9.4ActiveX\\dlls"新建文本文件install.bat內(nèi)容如下:regsvr32dlls\axvlc.dllregedit/sinstall.reg雙擊install.bat后就可以用test.html進(jìn)行測(cè)試了。一點(diǎn)點(diǎn)小提示如果注冊(cè)成功,但是test.html播放文件的時(shí)候會(huì)報(bào)錯(cuò)說(shuō)decodermodules會(huì)找不到之類(lèi)信息,那請(qǐng)將0.8.6i和0.9.4交替注冊(cè),可能會(huì)解決這個(gè)問(wèn)題。(Jeremiah因?yàn)檫@個(gè)問(wèn)題搞了一天,NND)(2009-05-14補(bǔ)充:直接看8吧,以前這個(gè)地方寫(xiě)的不大對(duì)。)制作cab文件如果要類(lèi)似與test.html作個(gè)播放器服務(wù)器,但是我們卻不能手動(dòng)操縱客戶端去下載注冊(cè)vlc的ActiveX,解決方法就是自己制作cab文件。到本日志的附件(cabsdk.rar)或者以下地址去下載cabsdk.exe:[url]/download/platformsdk/cab/2.0/w98nt42kmexp/en-us/cabsdk.exe[/url]安裝cabsdk.exe將axvlc.dll及vlc的安裝文件拷貝到cabsdk安裝路徑/BIN/下。Jeremiah這里用的是vlc-0.8.6i-win32.exe。(關(guān)于如何制作vlc的安裝文件,參考日志《windows平臺(tái)下vlc編譯之二:vlc-0.8.6i的編譯》)在/BIN下新建文本文件axvlc.inf,內(nèi)容如下:;VersionnumberandsignatureofINFfile.;[version]signature="$CHICAGO$"AdvancedINF=2.0[Add.Code]vlc-0-8.6i-win32.exeaxvlc.dll=axvlc.dll[axvlc.dll]FileVersion=0,8,6,0clsid={9BE31822-FDAD-461B-AD51-BE1D1C159921}RegisterServer=nohook=nsiinstaller[vlc-0-8.6d-win32.exe]FileVersion=0,8,6,0file-win32-x86=thiscab[nsiinstaller]run=%EXTRACT_DIR%\vlc-0.8.6i-win32.exe注意:請(qǐng)根據(jù)安裝文件的版本修改此文件。命令行到BIN目錄下,執(zhí)行以下命令生成cab文件:CABARC.EXENaxvlc.cabaxvlc.infaxvlc.dllvlc-0-8.6i-win32.execab文件的使用html頁(yè)面下使用cab文件可以通過(guò)以下方式:<OBJECTclassid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"codebase="your/path/of/cabfile/axvlc.cab"width="640"height="480"id="vlc"events="True"><paramname="Src"value=""/><paramname="ShowDisplay"value="True"/><paramname="AutoLoop"value="False"/><paramname="AutoPlay"value="False"/></OBJECT>這樣web客戶端無(wú)須手動(dòng)注冊(cè)axvlc.dll就可以使用了。一點(diǎn)比較嚴(yán)重小問(wèn)題由于vlc的安裝文件一般是比較大,所以制作出來(lái)的cab文件也是很大的,在網(wǎng)絡(luò)帶寬不是很好的時(shí)候,光下載這個(gè)cab可能就很長(zhǎng)很長(zhǎng)時(shí)間,基本上可以說(shuō)這樣的方式是行不通的。所以我們需要根據(jù)自己的業(yè)務(wù)需求去精簡(jiǎn)vlc。Jeremiah將在下一篇日志介紹。C#下使用vlc的ActiveXvs2005新建一個(gè)windows應(yīng)用程序,在左側(cè)工具箱右鍵-->選擇項(xiàng)-->com組件-->VideoLANVLCActiveXpluginv2,工具箱里面就添加了vlc的ActiveX控件,可以在窗體里面隨便畫(huà)了。調(diào)用函數(shù)如下:Iprivatevoidbutton1_Click(objectsender,EventArgse){〃輸入?yún)?shù)stringparameter=":sout=#duplicate{dst=display}:no-overlay";〃判斷是否正在播放if(this.axVLCPlugin21.playlist.isPlaying){〃如果正在播放,則停止this.axVLCPlugin21.playlist.stop();}〃清空播放列表this.axVLCPlugin21.playlist.clear();〃添加播放列表this.axVLCPlugin21.playlist.add(textBox1.Text,null,parameter);〃播放列表更新到新添加的播放項(xiàng)this.axVLCPlugin21.playlist.next();//播放Ithis.axVLCPlugin21.playlist.play();}其他函數(shù)調(diào)用參考activex/README.TXT。Jeremiah在附件里面提供了一個(gè)簡(jiǎn)單的調(diào)用程序(WindowsApplicationl.rar),不過(guò)需要注意的是,在用它測(cè)試0.9.4的ActiveX,當(dāng)正常播放文件時(shí)點(diǎn)擊X關(guān)閉窗口產(chǎn)生異常,電腦會(huì)重新啟動(dòng)。在主窗體的FormClosing事件中讓主線程睡了1000ms,并不能完全保證電腦不重啟,所以請(qǐng)根據(jù)自己的情況進(jìn)行本附件的調(diào)試。ActiveX的卸載卸載是安裝的反向操作,知道怎么安裝,卸載很簡(jiǎn)單。vlc-0.8.6i的ActiveX的卸載:新建uninstall.bat,內(nèi)容如下:regsvr32dlls\axvlc.dll/uvlc-0.9.4的ActiveX的卸載:新建uninstall.reg,內(nèi)容如下:WindowsRegistryEditorVersion5.00[-HKEY_LOCAL_MACHINE\SOFTWARE\VideoLAN]新建uninstall.bat,內(nèi)容如下:regsvr32dlls\axvlc.dll/uregedit/suninstall.reg雙擊uninstall.bat,提示dlls\axvlc.dll中的DllUnregisterServer成功。就卸載完畢了。讓vlc安裝的時(shí)候自動(dòng)安裝ActiveX4里面提到cab包的制作及5里面提到了cab包的使用。cab其實(shí)就是讓客戶自動(dòng)下載vlc的安裝文件,然后啟動(dòng)安裝。但是安裝過(guò)程中,出現(xiàn)這樣一步:ActiveXplugin默認(rèn)是沒(méi)有被選中的,如何讓它這一步默認(rèn)是選中的,或者選中并且是灰色的(比如像MediaPlayer這一項(xiàng)),不讓客戶改變呢?我們需要修改編譯完的vlc的vlc.win32.nsi文件。然后用它重新制作vlc-0.9.4-win32.exe.具體修改過(guò)程如下:在vlc.win32.nsi文件中,找到:Section/o$Name_Section04SEC04SectionIn3修改為:Section$Name_Section04SEC04SectionIn123或者在123后面加入“空格RO”,表示這項(xiàng)是必須的不能去掉,就是選中并且是灰色的。$Name_Section04可以替換為"MyActiveXplugin(required))等自己的名字。然后根據(jù)前面博客講的制作vlc-0.9.4-win32.exe的過(guò)程執(zhí)行一遍,然后再制作cab包就okay了。關(guān)于vlc的ActiveX的說(shuō)明根據(jù)我對(duì)vlc的ActiveX的使用,發(fā)現(xiàn)這個(gè)ActiveX做的真是不好,很多方法沒(méi)有封裝進(jìn)來(lái),如果擴(kuò)展這個(gè)ActiveX,工作量不小。如果是做C/S程序,強(qiáng)烈不建議用ActiveX來(lái)開(kāi)發(fā)。除非是想簡(jiǎn)單做一下,快速開(kāi)發(fā)等。做C/S播放器還是看我這篇博客:《vlc的應(yīng)用之三:動(dòng)態(tài)調(diào)用vlc-0.9.4的libvlc.dll》,開(kāi)發(fā)過(guò)程雖然慢點(diǎn),但是比較可控。ActiveX只適合應(yīng)用于B/S項(xiàng)目,只適合WEB開(kāi)發(fā),這是Jeremiah的一點(diǎn)忠告,但是只屬于個(gè)人意見(jiàn),僅供參考。參考網(wǎng)址:[url]/?p=157[/url][url]/ActiveX/HTML[/url][url]/ActiveX[/url]4.[url]/viewtopic.php?f=14&t=48812&p=155832&hilit=regsvr#p156070[/url]5.[url]/blog2/zyjzyj2000/10184.html[/url]vlc的應(yīng)用之三:動(dòng)態(tài)調(diào)用vlc-0.9.4的libvlc.dll2008-12-0317:38:46標(biāo)簽:WinFormC#休閑libvlc.dllvlc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/116981vlc-0.9.4提供的libvlc.dll是可以動(dòng)態(tài)調(diào)用的,Jeremiah這一篇博客就介紹下如何用C#和WinForm框架調(diào)用libvlc.dll作個(gè)簡(jiǎn)易播放器。vs2005新建工程,將vlc-0.9.4的libvlc.dll,libvlccore.dll,plugins目錄全部拷貝到工程目錄下面\bin\Debug中創(chuàng)建異常結(jié)構(gòu)體usingSystem;IusingSystem.Collections.Generic;IusingSystem.Text;InamespaceMyOwnPlayer{〃異常結(jié)構(gòu)體publicstructExceptionStruct{privateintraised;privateintcode;privatestringmessage;}IclassMediaException{}}CoreHandle和Core類(lèi)usingSystem;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classCoreHandle:SafeHandle{〃構(gòu)造方法publicCoreHandle():base(IntPtr.Zero,true){}I〃重寫(xiě)的方法publicoverrideboolIsInvalid{get{returnhandle==IntPtr.Zero;}}IprotectedoverrideboolReleaseHandle(){if(!IsInvalid){libvlc_release(this);handle=IntPtr.Zero;}returntrue;}IprotectedoverridevoidDispose(booldisposing){ReleaseHandle();base.Dispose(disposing);}I//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]privatestaticexternvoidlibvlc_release(CoreHandlecoreHandle);}}usingSystem;usingSystem.Runtime.InteropServices;
namespaceMyOwnPlayer{classCore{//coreHandle字段和屬性privateCoreHandlecoreHandle;publicCoreHandleCoreHandle{get{returncoreHandle;}}〃構(gòu)造方法publicCore(string[]argv,refExceptionStructex){coreHandle=libvlc_new(argv.Length,argv,refex);}//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]args,privatestaticexternCoreHandlelibvlc_new(intargc,string[]refExceptionStructex);args,}3.MediaHandle和Media類(lèi),注意里面的非英文路徑處理方法。usingSystem;usingSystem.Runtime.InteropServices;namespaceMyOwnPlayer{classMediaHandle:SafeHandle{〃構(gòu)造方法publicMediaHandle():base(IntPtr.Zero,true){}〃重寫(xiě)的方法publicoverrideboolIsInvalid{get{returnhandle==IntPtr.Zero;}}IprotectedoverrideboolReleaseHandle(){if(!IsInvalid){libvlc_media_release(this);handle=IntPtr.Zero;}returntrue;}IprotectedoverridevoidDispose(booldisposing){ReleaseHandle();base.Dispose(disposing);}I//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]privatestaticexternvoidlibvlc_media_release(MediaHandlemediaHandle);}}usingSystem;usingSystem.Text;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classMedia{//mediaHandle字段和屬性privateMediaHandlemediaHandle;publicMediaHandleMediaHandle{get{returnmediaHandle;}}I〃構(gòu)造方法publicMedia(CoreHandlecoreHandle,Stringfilename,refExceptionStructex){//c#為UTF-16編碼,libvlc.dll為UTF-8編碼,需要轉(zhuǎn)換.UTF8Encodingutf8=newUTF8Encoding();mediaHandle=libvlc_media_new(coreHandle,utf8.GetBytes(filename),refex);}I//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]privatestaticexternMediaHandlelibvlc_media_new(CoreHandlecoreHandle,[MarshalAs(UnmanagedType.LPArray)]byte[]link,refExceptionStructex);}}MediaPlayerHandle和MediaPlayer類(lèi)usingSystem;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classMediaPlayerHandle:SafeHandle{〃構(gòu)造方法publicMediaPlayerHandle():base(IntPtr.Zero,true){}I〃重寫(xiě)的方法publicoverrideboolIsInvalid{get{returnhandle==IntPtr.Zero;}}IprotectedoverrideboolReleaseHandle(){if(!IsInvalid){libvlc_media_player_release(this);handle=IntPtr.Zero;}returntrue;}IprotectedoverridevoidDispose(booldisposing){ReleaseHandle();base.Dispose(disposing);}I//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]privatestaticexternvoidlibvlc_media_player_release(MediaPlayerHandlemediaPlayerHandle);}}usingSystem;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classMediaPlayer{//mediaPlayerHandle字段和屬性privateMediaPlayerHandlemediaPlayerHandle;publicMediaPlayerHandleMediaPlayerHandle{get{returnmediaPlayerHandle;}}I〃構(gòu)造方法publicMediaPlayer(MediaHandlemediaHandle,refExceptionStructex){mediaPlayerHandle=libvlc_media_player_new_from_media(mediaHandle,refex);}I〃設(shè)置父窗口publicvoidVedioSetParent(CoreHandlecoreHandle,IntPtrhDT,refExceptionStructex){libvlc_video_set_parent(coreHandle,hDT,refex);}I//播放publicvoidPlay(refExceptionStructex){libvlc_media_player_play(mediaPlayerHandle,refex);}I//停止publicvoidStop(refExceptionStructex){libvlc_media_player_stop(mediaPlayerHandle,refex);}I//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]privatestaticexternMediaPlayerHandlelibvlc_media_player_new_from_media(MediaHandlelibvlc_media_handle,refExceptionStructex);I[DllImport("libvlc")]privatestaticexternvoidlibvlc_video_set_parent(CoreHandlecoreHandle,IntPtrhDT,refExceptionStructex);I[DllImport("libvlc")]privatestaticexternvoidlibvlc_media_player_play(MediaPlayerHandlemediaPlayerHandle,refExceptionStructex);I[DllImport("libvlc")]privatestaticexternvoidlibvlc_media_player_stop(MediaPlayerHandlemediaPlayerHandle,refExceptionStructex);}}基本工作做好了。下一步建立一個(gè)Form,里面畫(huà)一個(gè)Panel(播放容器),畫(huà)一個(gè)Textbox(播放地址),畫(huà)一個(gè)Button(播放按鈕),Button的點(diǎn)擊事件為:Iprivatevoidbutton1_Click(objectsender,EventArgse){〃要播放的文件的uristringuri=this.textBox1.Text;〃進(jìn)行播放的控件的句柄IntPtrhdl=this.panell.Handle;〃播放參數(shù)string[]argv=newstring[]{"-I","--ignore-config"};//vlc對(duì)象的創(chuàng)建ExceptionStructex=newExceptionStruct();Corecore=newCore(argv,refex);Mediamedia=newMedia(core.CoreHandle,uri,refex);MediaPlayerplayer=newMediaPlayer(media.MediaHandle,refex);〃垃圾回收GC.Collect();//播放player.VedioSetParent(core.CoreHandle,hdl,refex);player.Play(refex);〃繼續(xù)回收垃圾等相關(guān)操作GC.Collect();GC.WaitForPendingFinalizers();基本的播放功能就是這樣實(shí)現(xiàn)的。其他接口請(qǐng)參考源碼下面的\include\vlc\libvlc.h文件,里面有比較詳細(xì)的對(duì)外接口的說(shuō)明。以上代碼已經(jīng)發(fā)送到附件中(MyOwnPlayer.rar),參考網(wǎng)址的樓主寫(xiě)的代碼也在附件中(Marx_libvlc_wrapper(2).zip)。調(diào)試附件請(qǐng)注意第1步。vlc的應(yīng)用之五:動(dòng)態(tài)調(diào)用libvlc.dll的補(bǔ)充2009-03-0915:16:17標(biāo)簽:libvlc_newlibvlc.dllWinFormvlcC#原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/136931最近Jeremiah在增加以前播放器的功能的時(shí)候,被一個(gè)中文路徑轉(zhuǎn)碼問(wèn)題惡心了兩天,最后終于讓我給解決了。在這跟大家分享這個(gè)轉(zhuǎn)碼的解決方法,以及用視頻本次存儲(chǔ)的接口實(shí)現(xiàn)。在看本篇日志之前,請(qǐng)先看我以前寫(xiě)的《vlc的應(yīng)用之三:動(dòng)態(tài)調(diào)用vlc-0.9.4的libvlc.dll》補(bǔ)充一:libvlc_new(...)接口的中文路徑轉(zhuǎn)碼處理usingSystem;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classCore{//coreHandle字段和屬性privateCoreHandlecoreHandle;publicCoreHandleCoreHandle{get{returncoreHandle;}}I〃構(gòu)造方法publicCore(string[]argv,refExceptionStructex){byte□口argvbytes=newbyte[argv.Length][];Ifor(inti=0;i<argv.Length;i++){argvbytes[i]=Encoding.UTF8.GetBytes(argv[i]);}IcoreHandle=libvlc_new(argv.Length,ReturnIntPtr(argvbytes,argv.Length),refex);}I〃轉(zhuǎn)換函數(shù)privateIntPtrReturnIntPtr(byte[][]data,intlength){IntPtr[]dataIntPtrArr=newIntPtr[length];for(inti=0;i<length;i++){dataIntPtrArr[i]=Marshal.AllocHGlobal(data[i].Length*sizeof(byte));Marshal.Copy(data[i],0,dataIntPtrArr[i],data[i].Length);}IntPtrdataIntPtr=Marshal.AllocHGlobal(length*Marshal.SizeOf(typeof(IntPtr)));Marshal.Copy(dataIntPtrArr,0,dataIntPtr,length);returndataIntPtr;}I//Dll動(dòng)態(tài)導(dǎo)入[DllImport("libvlc")]privatestaticexternCoreHandlelibvlc_new(intargc,IntPtrargv,refExceptionStructex);}}補(bǔ)充二:本地存儲(chǔ)。對(duì)libvlc_new的argv進(jìn)行轉(zhuǎn)碼的主要目的就是為了進(jìn)行本地存儲(chǔ),由于要將存儲(chǔ)路徑傳入到argv中,所以要對(duì)中文的存儲(chǔ)路徑進(jìn)行轉(zhuǎn)碼。下面的做法是將視頻流默認(rèn)存儲(chǔ)為ts流,邊播放邊存儲(chǔ)。//avPath是本地存儲(chǔ)路徑,需要注意路徑的\和/的問(wèn)題。argv=newstring[]{"--sout=#duplicate{dst=display,dst=std{access=file,mux=ts,dst="+avPath+"}}"};〃其他的就跟上一篇博客一樣了。core=newCore(argv,refex);media=newMedia(core.CoreHandle,link,refex);player=newMediaPlayer(media.MediaHandle,refex);player.Play(refex);//一面播放一面存儲(chǔ)關(guān)于其他形式的argv,可以在vlc的存儲(chǔ)里面獲得。vlc->媒體->convert/save->轉(zhuǎn)換/保存。根據(jù)選擇不同的形式,在vlc界面的下半部分會(huì)有Generatedstreamoutputstring。這個(gè)就是具體的argv。不過(guò),請(qǐng)注意將:sout換成--sout。windows平臺(tái)下vlc編譯之六:vlc-0.9.8a的編譯2008-12-2011:18:20標(biāo)簽:windowscygwincompile休閑vlc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/121316首先感謝vlc的qq群*阿來(lái)*幫忙解決了一個(gè)關(guān)鍵問(wèn)題。vlc用Cygwin編譯老是會(huì)出這樣那樣的問(wèn)題,所以編譯起來(lái)是相當(dāng)相當(dāng)?shù)挠魫?。vlc-0.9.6版的官方提供的版本會(huì)有幾個(gè)嚴(yán)重的缺陷,在官方網(wǎng)站上面已經(jīng)鄭重道歉了。vlc-0.9.8a是目前發(fā)行的最新版,所以對(duì)其編譯是勢(shì)在必行的。廢話了這么多,進(jìn)入正題。簡(jiǎn)單寫(xiě)一下,如果有不明白的,看看前面幾篇日志。編譯環(huán)境,目前最新的Cygwin。(《windows平臺(tái)下vlc編譯之五:vlc-0.9.6的編譯》提供下載地址)源碼和庫(kù):源碼:[url]/pub/videolan/vlc/0.9.8a/vlc-0.9.8a.tar.bz2[/url]庫(kù):contrib-20081021-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2(在我的公共郵箱提供了下載,具體下載方式為:.登錄.用戶名:jeremiah_vlc.密碼:發(fā)郵件給我(jeremiah.vlc@),我會(huì)告知。.在“我的文件夾”的“Jeremiah_VLC相關(guān)資源”有所有資料的超大附件連接。)執(zhí)行sed-i's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g'configure.ac./bootstrap保存如下腳本為configure-vlc01.shPATH=/usr/win32/bin:$PATH\PKG_CONFIG_LIBDIR=/usr/win32/lib/pkgconfig\CPPFLAGS="-I/usr/win32/include-I/usr/win32/include/ebml"\LDFLAGS=-L/usr/win32/lib\CC="gcc-mno-cygwin"CXX="g++-mno-cygwin"\./configure\--host=i686-pc-mingw32\--enable-nls--enable-sdl--with-sdl-config-path=/usr/win32/bin\--enable-avcodec--enable-avformat--enable-swscale\--enable-faad--enable-flac--enable-theora\--enable-freetype\--enable-fribidi\--enable-live555--with-live555-tree=/usr/win32/\--enable-caca--with-caca-config-path=/usr/win32/bin\--with--config-path=/usr/win32/bin\--with-dvdnav-config-path=/usr/win32/bin\--disable-cddax--disable-vcdx--enable-goom\--enable-twolame--enable-dvdread\--enable-debug--enable-dca\--disable-mkv--disable-taglib\--disable-zvbi\--enable-mozilla--with-mozilla-sdk-path=/usr/win32/gecko-sdk執(zhí)行./configure-vlc01.sh執(zhí)行make前改兩個(gè)文件。(行數(shù)可能不對(duì),用搜索功能吧)libtool第156行:修改global_symbol_pipe=""為global_symbol_pipe="sed-n-e's/八.*[]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[ ][]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1\\2\\3\\3/p”‘Makefile.am第695行修改cp"$(top_srcdir)/extras/package/win32/vlc.exe.manifest""$(win32_destdir)/"為cp"$(top_srcdir)/extras/package/win32/vlc.exe.manifest""$(win32_destdir)/'Makefile.am第725行:cp$(top_srcdir)/projects/mozilla/npvlc.dll.manifest$(win32_destdir)/mozilla/為cp$(top_srcdir)/projects/mozilla/npvlc.dll.manifest$(win32_destdir)/mozilla/Makefile.am第736行修改cp$(top_srcdir)/projects/activex/axvlc.dll.manifest$(win32_destdir)/activex/為cp$(top_srcdir)/projects/activex/axvlc.dll.manifest$(win32_destdir)/activex/執(zhí)彳亍make&&makepackage-win32-base。搞定!周末在家用git下載了vlc-1.0.0-git版本,編譯了一下,出現(xiàn)了一個(gè)小錯(cuò)誤倒騰了半天,源碼里面的一函數(shù)定義有問(wèn)題,修改了下,編譯成功。由于Jeremiah在寫(xiě)這篇日志的時(shí)候官方?jīng)]有發(fā)布1.0.0的源代碼,git版本是很不穩(wěn)定的,比如運(yùn)行了一下發(fā)現(xiàn)界面做的就很不好,播放的畫(huà)面是另外的一個(gè)窗口,而不是播放器本身的窗口。閑言少敘,開(kāi)始正題。編譯環(huán)境,目前最新的Cygwin。(《windows平臺(tái)下vlc編譯之五:vlc-0.9.6的編譯》提供下載地址)源碼和庫(kù)由于源碼官網(wǎng)未提供,git下載速度確實(shí)有點(diǎn)不敢恭維。有些朋友的公司還會(huì)用代理上網(wǎng),比如我們公司就這樣。git通過(guò)代理麻煩的很。所以,Jeremiah把自己下載的源碼放到網(wǎng)盤(pán)里面了,請(qǐng)需要的直接點(diǎn)擊下載。并且,由于不知道git是不是每天更新,所以不能保證用git下載的和Jeremiah編譯的是一個(gè)版本。源碼:(在我的公共郵箱提供了下載,具體下載方式為:.登錄.用戶名:jeremiah_vlc.密碼:發(fā)郵件給我(jeremiah.vlc@),我會(huì)告知。.在“我的文件夾”的“Jeremiah_VLC相關(guān)資源”有所有資料的超大附件連接。)庫(kù):contrib-20081021-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2(在我的公共郵箱提供了下載,具體下載方式為:.登錄.用戶名:jeremiah_vlc.密碼:發(fā)郵件給我(jeremiah.vlc@),我會(huì)告知。.在“我的文件夾”的“Jeremiah_VLC相關(guān)資源”有所有資料的超大附件連接。)Jeremiah提供的源碼里面修改了modules\stream_out\raop.c,如果是用git得到的,make的時(shí)候可能會(huì)遇到錯(cuò)誤:.libs/libstream_out_raop_plugin_la-raop.o:Infunction'SplitHeader':/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:550:undefinedreferenceto'_vlc_strsep'/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:558:undefinedreferenceto'_vlc_strsep'.libs/libstream_out_raop_plugin_la-raop.o:Infunction'ExecRequest':/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:593:undefinedreferenceto'_vlc_strsep'/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:646:undefinedreferenceto'_vlc_strsep'/home/wangwei1/vlc-1.0.0/modules/stream_out/raop.c:602:undefinedreferenceto'_vlc_strsep'Creatinglibraryfile:.libs/libstream_out_raop_plugin.dll.acollect2:ldreturned1exitstatusmake[5]***[libstream_out_raop_plugin.la]Error1make[5]Leavingdirectory'/home/wangwei1/vlc-1.0.0/modules/stream_outmake[4]***[all-recursive]Error1make[4]Leavingdirectory'/home/wangwei1/vlc-1.0.0/modules/stream_outmake[3]***[all]Error2make[3]Leavingdirectory'/home/wangwei1/vlc-1.0.0/modules/stream_outmake[2]***[all-recursive]Error1make[2]Leavingdirectory'/home/wangwei1/vlc-1.0.0/modules'make[1]***[all-recursive]Error1make[1]Leavingdirectory'/home/wangwei1/vlc-1.0.0'make:***[all]Error2請(qǐng)自己修改modules\stream_out\raop.c,在一堆宏定義下面加入:Ichar*vlc_strsep(char**ppsz_string,constchar*psz_delimiters){char*psz_string=*ppsz_string;if(!psz_string)returnNULL;Ichar*p=strpbrk(psz_string,psz_delimiters);if(!p){*ppsz_string=NULL;returnpsz_string;}*p++='\0';I*ppsz_string=p;returnpsz_string;}執(zhí)行sed-i's/AM_GNU_GETTEXT_VERSION(0.17)/AM_GNU_GETTEXT_VERSION(0.15)/g'configure.ac./bootstrapcopy腳本configure-vlc01.sh到源碼中。腳本在附件(file.rar)里面提供了,與vlc-0.9.6的編譯腳本完全相同。執(zhí)行./configure-vlc01.sh執(zhí)行make前改個(gè)文件libtool第144行:修改global_symbol_pipe=""為global_symbol_pipe="sed-n-e's/八.*[ ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[][ ]*\\(\\)\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1\\2\\3\\3/p'"不想改就直接覆蓋附件(file.rar)中提供的這個(gè)文件。執(zhí)彳亍make&&makepackage-win32-base。搞定!vlc的應(yīng)用之八:MFC調(diào)用libvlc.dll2009-07-2723:00:58標(biāo)簽:libvlc休閑vlc職場(chǎng)mfc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請(qǐng)務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/184115本篇博客將簡(jiǎn)單介紹MFC調(diào)用libvlc.dll作一個(gè)簡(jiǎn)單的播放器,拋磚引玉,各位VC++達(dá)人繼續(xù)深入研究,Jeremiah對(duì)VC++確實(shí)不太感興趣,所以就不做太深入的研究了。2009.10.29修改:加入clip_children屬性設(shè)置。參考第1步。2010.04.14修改:中文路徑問(wèn)題。參考第7步。環(huán)境:VC6SP5vlc-0.9.9a0.引言根據(jù)上一篇博客的研究,任何一個(gè)VC環(huán)境都可以調(diào)用MinGW/Gcc編譯得到的libvlc.dlloVLC在編譯打包之后(也就是執(zhí)行完makepackage-win32-base),或者去官網(wǎng)下載zip包解壓之后,或者是安裝完VLC之后,在vlc-0.9.9a目錄下有個(gè)sdk文件夾,里面又包含兩個(gè)文件夾:include――頭文件及l(fā)ib――庫(kù)。這些都是我們用MFC調(diào)用libvlc.dll所必須的。頭文件沒(méi)啥好說(shuō)的,庫(kù)里面的libvlc.dll.a及l(fā)ibvlccore.dll.a就是上一篇博客所說(shuō)的靜態(tài)庫(kù),我們分別手動(dòng)改成libvlc.lib及l(fā)ibvlccore.lib就可以在VC環(huán)境中調(diào)用啦。下面簡(jiǎn)要說(shuō)一下調(diào)用的過(guò)程,對(duì)各位VC++達(dá)人來(lái)說(shuō)絕對(duì)是小菜一碟。建立工程新建MFCAppWizard(exe)工程,名字為:MFCVLC。選擇項(xiàng)目為Dialogbased,點(diǎn)擊完成。刪除Dialog窗體上的所有的控件,包括“確定”、“取消”按鈕及"TODO"靜態(tài)文本。勾選窗口的clip_children屬性,這樣就會(huì)避免拖動(dòng)、最大化最小化及全屏還原時(shí)找不到圖像的缺陷。畫(huà)控件畫(huà)四個(gè)控件,兩個(gè)靜態(tài)文本框,一個(gè)輸入框,一個(gè)按鈕。其中,第一個(gè)靜態(tài)文本框修改Caption為“路徑:”,第二個(gè)文本框?yàn)橐曨l的顯示區(qū)域,所以講ID改為IDC_DISPLAY,Caption去掉。輸入框關(guān)聯(lián)一個(gè)變量,CString類(lèi)型,命名為m_path。按鈕的Caption改為“播放”,并為BN_CLICKED增加一個(gè)Function。在CMFCVLCdlg的構(gòu)造方法中加入一下語(yǔ)句方便調(diào)試。m_path=_T("d:/01.avi");//輸入常用的視頻地址拷貝vlc的相關(guān)庫(kù)及頭文件在資源管理器的MFCVLC工程目錄下新建文件夾vlc,lib,將vlc-0.9.9a/sdk/include/vlc.h拷貝到MFCVLC工程目錄下,將vlc-0.9.9a/sdk/include除了vlc.h之外的所有文件拷貝到vlc目錄下,將vlc-0.9.9a/sdk/lib下的libvlc.dll.a及l(fā)ibvlccore.dll
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通安全知識(shí)競(jìng)賽題
- 教師專(zhuān)業(yè)發(fā)展的路徑試題及答案
- 制作植物標(biāo)本指南課件
- 將精力投入最有價(jià)值的財(cái)務(wù)活動(dòng)計(jì)劃
- 庫(kù)存預(yù)警機(jī)制的建立與實(shí)踐計(jì)劃
- 精細(xì)化管理年度工作計(jì)劃
- 探索社區(qū)文化活動(dòng)的創(chuàng)新計(jì)劃
- 年度流程優(yōu)化計(jì)劃
- 加強(qiáng)銷(xiāo)售管理的經(jīng)驗(yàn)總結(jié)計(jì)劃
- 2024年人地關(guān)系與環(huán)境保護(hù)的和諧試題及答案
- 事故隱患內(nèi)部報(bào)告獎(jiǎng)勵(lì)制度
- 《阿Q正傳》(課件)2023-2024高二語(yǔ)文選擇性必修下冊(cè)
- TSDPIA 05-2022 寵物貓砂通用技術(shù)規(guī)范
- 光伏電站工程標(biāo)準(zhǔn)化監(jiān)理作業(yè)手冊(cè)(完整版)資料
- GB/T 19189-2011壓力容器用調(diào)質(zhì)高強(qiáng)度鋼板
- GB 8537-2018食品安全國(guó)家標(biāo)準(zhǔn)飲用天然礦泉水
- 保安公司客戶滿意度調(diào)查表
- 小學(xué)五年級(jí)語(yǔ)文說(shuō)明方法爆款課件
- 簡(jiǎn)約中國(guó)戲曲文化鑒賞工作匯報(bào)工作總結(jié)PPT模板
- 一文讀懂泡泡瑪特
- 2022年《江蘇省機(jī)動(dòng)車(chē)維修費(fèi)用結(jié)算清單》格式
評(píng)論
0/150
提交評(píng)論