![vlc做流媒體播放器_第1頁](http://file4.renrendoc.com/view/dc61f485aeaeefbbe4bfca88fbd0f8a7/dc61f485aeaeefbbe4bfca88fbd0f8a71.gif)
![vlc做流媒體播放器_第2頁](http://file4.renrendoc.com/view/dc61f485aeaeefbbe4bfca88fbd0f8a7/dc61f485aeaeefbbe4bfca88fbd0f8a72.gif)
![vlc做流媒體播放器_第3頁](http://file4.renrendoc.com/view/dc61f485aeaeefbbe4bfca88fbd0f8a7/dc61f485aeaeefbbe4bfca88fbd0f8a73.gif)
![vlc做流媒體播放器_第4頁](http://file4.renrendoc.com/view/dc61f485aeaeefbbe4bfca88fbd0f8a7/dc61f485aeaeefbbe4bfca88fbd0f8a74.gif)
![vlc做流媒體播放器_第5頁](http://file4.renrendoc.com/view/dc61f485aeaeefbbe4bfca88fbd0f8a7/dc61f485aeaeefbbe4bfca88fbd0f8a75.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
vlc的應(yīng)用之一:在命令行下的使用2008-11-2813:45:34標(biāo)簽:command休閑line職場vlc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/115910如果編譯得到?jīng)]有界面的vlc,雙擊運(yùn)行后就沒法手動(dòng)選打文件或網(wǎng)絡(luò)了。在這介紹幾個(gè)vlc的命令行命令。vlc幫助vlc--helporvlc--help--advancedvlc的debuglogvlc-vv--extraintf=logger運(yùn)行的log將會(huì)保存在vlc-log.txt中。vlc打開文件vlc-vv--extraintf=loggerd:/01.avi作為服務(wù)器通過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職場ActiveX原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/1159432009-05-14補(bǔ)充:8.ActiveX的卸載;9.讓vlc自動(dòng)安裝ActiveX;10.關(guān)于vlc的ActiveX的說明。vlc自帶了ActiveX控件--axvlc.dll,在編譯完vlc之后的activex文件夾下。ActiveX是個(gè)好東西,axvlc.dll可以隨意放到任何位置,成功注冊之后可以方便的應(yīng)用在程序和網(wǎng)頁之中。可以參考activex文件夾下的test.html和README.TXT。ActiveX控件的接口有第一版和第二版,第一版簡單,功能少,已經(jīng)不再維護(hù)建議用第二版本,功能多一點(diǎn)。(參考的[1])vlc-0.8.6i和vlc-0.9.4的ActiveX注冊方法略有不同。做ActiveX的網(wǎng)頁測試之前需要把Internet選項(xiàng)-->安全-->本地Intranet的安全級別調(diào)到最低Jeremiah的網(wǎng)頁測試環(huán)境是IE7,其他瀏覽器未進(jìn)行測試。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內(nèi)容如下:雙擊install.bat后會(huì)提示“dlls\axvlc.dll中的DllRegisterServer成功”。然后用打開test.html,文本框輸入MRL就可以播放了。vlc-0.9.4的ActiveX注冊0.9.4不光要告訴計(jì)算機(jī)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內(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)行測試了。一點(diǎn)點(diǎn)小提示如果注冊成功,但是test.html播放文件的時(shí)候會(huì)報(bào)錯(cuò)說decodermodules會(huì)找不到之類信息,那請將0.8.6i和0.9.4交替注冊,可能會(huì)解決這個(gè)問題。(Jeremiah因?yàn)檫@個(gè)問題搞了一天,NND)(2009-05-14補(bǔ)充:直接看8吧,以前這個(gè)地方寫的不大對。)制作cab文件如果要類似與test.html作個(gè)播放器服務(wù)器,但是我們卻不能手動(dòng)操縱客戶端去下載注冊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平臺下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注意:請根據(jù)安裝文件的版本修改此文件。命令行到BIN目錄下,執(zhí)行以下命令生成cab文件:CABARC.EXENaxvlc.cabaxvlc.infaxvlc.dllvlc-0-8.6i-win32.execab文件的使用html頁面下使用cab文件可以通過以下方式:<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客戶端無須手動(dòng)注冊axvlc.dll就可以使用了。一點(diǎn)比較嚴(yán)重小問題由于vlc的安裝文件一般是比較大,所以制作出來的cab文件也是很大的,在網(wǎng)絡(luò)帶寬不是很好的時(shí)候,光下載這個(gè)cab可能就很長很長時(shí)間,基本上可以說這樣的方式是行不通的。所以我們需要根據(jù)自己的業(yè)務(wù)需求去精簡vlc。Jeremiah將在下一篇日志介紹。C#下使用vlc的ActiveXvs2005新建一個(gè)windows應(yīng)用程序,在左側(cè)工具箱右鍵-->選擇項(xiàng)-->com組件-->VideoLANVLCActiveXpluginv2,工具箱里面就添加了vlc的ActiveX控件,可以在窗體里面隨便畫了。調(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è)簡單的調(diào)用程序(WindowsApplicationl.rar),不過需要注意的是,在用它測試0.9.4的ActiveX,當(dāng)正常播放文件時(shí)點(diǎn)擊X關(guān)閉窗口產(chǎn)生異常,電腦會(huì)重新啟動(dòng)。在主窗體的FormClosing事件中讓主線程睡了1000ms,并不能完全保證電腦不重啟,所以請根據(jù)自己的情況進(jìn)行本附件的調(diào)試。ActiveX的卸載卸載是安裝的反向操作,知道怎么安裝,卸載很簡單。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)安裝。但是安裝過程中,出現(xiàn)這樣一步:ActiveXplugin默認(rèn)是沒有被選中的,如何讓它這一步默認(rèn)是選中的,或者選中并且是灰色的(比如像MediaPlayer這一項(xiàng)),不讓客戶改變呢?我們需要修改編譯完的vlc的vlc.win32.nsi文件。然后用它重新制作vlc-0.9.4-win32.exe.具體修改過程如下:在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的過程執(zhí)行一遍,然后再制作cab包就okay了。關(guān)于vlc的ActiveX的說明根據(jù)我對vlc的ActiveX的使用,發(fā)現(xiàn)這個(gè)ActiveX做的真是不好,很多方法沒有封裝進(jìn)來,如果擴(kuò)展這個(gè)ActiveX,工作量不小。如果是做C/S程序,強(qiáng)烈不建議用ActiveX來開發(fā)。除非是想簡單做一下,快速開發(fā)等。做C/S播放器還是看我這篇博客:《vlc的應(yīng)用之三:動(dòng)態(tài)調(diào)用vlc-0.9.4的libvlc.dll》,開發(fā)過程雖然慢點(diǎn),但是比較可控。ActiveX只適合應(yīng)用于B/S項(xiàng)目,只適合WEB開發(fā),這是Jeremiah的一點(diǎn)忠告,但是只屬于個(gè)人意見,僅供參考。參考網(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í)請務(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è)簡易播放器。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類usingSystem;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classCoreHandle:SafeHandle{〃構(gòu)造方法publicCoreHandle():base(IntPtr.Zero,true){}I〃重寫的方法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類,注意里面的非英文路徑處理方法。usingSystem;usingSystem.Runtime.InteropServices;namespaceMyOwnPlayer{classMediaHandle:SafeHandle{〃構(gòu)造方法publicMediaHandle():base(IntPtr.Zero,true){}〃重寫的方法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類usingSystem;usingSystem.Runtime.InteropServices;InamespaceMyOwnPlayer{classMediaPlayerHandle:SafeHandle{〃構(gòu)造方法publicMediaPlayerHandle():base(IntPtr.Zero,true){}I〃重寫的方法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,里面畫一個(gè)Panel(播放容器),畫一個(gè)Textbox(播放地址),畫一個(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對象的創(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)的。其他接口請參考源碼下面的\include\vlc\libvlc.h文件,里面有比較詳細(xì)的對外接口的說明。以上代碼已經(jīng)發(fā)送到附件中(MyOwnPlayer.rar),參考網(wǎng)址的樓主寫的代碼也在附件中(Marx_libvlc_wrapper(2).zip)。調(diào)試附件請注意第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í)請務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/136931最近Jeremiah在增加以前播放器的功能的時(shí)候,被一個(gè)中文路徑轉(zhuǎn)碼問題惡心了兩天,最后終于讓我給解決了。在這跟大家分享這個(gè)轉(zhuǎn)碼的解決方法,以及用視頻本次存儲(chǔ)的接口實(shí)現(xiàn)。在看本篇日志之前,請先看我以前寫的《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ǔ)。對libvlc_new的argv進(jìn)行轉(zhuǎn)碼的主要目的就是為了進(jìn)行本地存儲(chǔ),由于要將存儲(chǔ)路徑傳入到argv中,所以要對中文的存儲(chǔ)路徑進(jìn)行轉(zhuǎn)碼。下面的做法是將視頻流默認(rèn)存儲(chǔ)為ts流,邊播放邊存儲(chǔ)。//avPath是本地存儲(chǔ)路徑,需要注意路徑的\和/的問題。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。不過,請注意將:sout換成--sout。windows平臺下vlc編譯之六:vlc-0.9.8a的編譯2008-12-2011:18:20標(biāo)簽:windowscygwincompile休閑vlc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/121316首先感謝vlc的qq群*阿來*幫忙解決了一個(gè)關(guān)鍵問題。vlc用Cygwin編譯老是會(huì)出這樣那樣的問題,所以編譯起來是相當(dāng)相當(dāng)?shù)挠魫?。vlc-0.9.6版的官方提供的版本會(huì)有幾個(gè)嚴(yán)重的缺陷,在官方網(wǎng)站上面已經(jīng)鄭重道歉了。vlc-0.9.8a是目前發(fā)行的最新版,所以對其編譯是勢在必行的。廢話了這么多,進(jìn)入正題。簡單寫一下,如果有不明白的,看看前面幾篇日志。編譯環(huán)境,目前最新的Cygwin。(《windows平臺下vlc編譯之五:vlc-0.9.6的編譯》提供下載地址)源碼和庫:源碼:[url]/pub/videolan/vlc/0.9.8a/vlc-0.9.8a.tar.bz2[/url]庫: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ù)可能不對,用搜索功能吧)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ù)定義有問題,修改了下,編譯成功。由于Jeremiah在寫這篇日志的時(shí)候官方?jīng)]有發(fā)布1.0.0的源代碼,git版本是很不穩(wěn)定的,比如運(yùn)行了一下發(fā)現(xiàn)界面做的就很不好,播放的畫面是另外的一個(gè)窗口,而不是播放器本身的窗口。閑言少敘,開始正題。編譯環(huán)境,目前最新的Cygwin。(《windows平臺下vlc編譯之五:vlc-0.9.6的編譯》提供下載地址)源碼和庫由于源碼官網(wǎng)未提供,git下載速度確實(shí)有點(diǎn)不敢恭維。有些朋友的公司還會(huì)用代理上網(wǎng),比如我們公司就這樣。git通過代理麻煩的很。所以,Jeremiah把自己下載的源碼放到網(wǎng)盤里面了,請需要的直接點(diǎn)擊下載。并且,由于不知道git是不是每天更新,所以不能保證用git下載的和Jeremiah編譯的是一個(gè)版本。源碼:(在我的公共郵箱提供了下載,具體下載方式為:.登錄.用戶名:jeremiah_vlc.密碼:發(fā)郵件給我(jeremiah.vlc@),我會(huì)告知。.在“我的文件夾”的“Jeremiah_VLC相關(guān)資源”有所有資料的超大附件連接。)庫: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請自己修改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職場mfc原創(chuàng)作品,允許轉(zhuǎn)載,轉(zhuǎn)載時(shí)請務(wù)必以超鏈接形式標(biāo)明文章原始出處、作者信息和本聲明。否則將追究法律責(zé)任。/539865/184115本篇博客將簡單介紹MFC調(diào)用libvlc.dll作一個(gè)簡單的播放器,拋磚引玉,各位VC++達(dá)人繼續(xù)深入研究,Jeremiah對VC++確實(shí)不太感興趣,所以就不做太深入的研究了。2009.10.29修改:加入clip_children屬性設(shè)置。參考第1步。2010.04.14修改:中文路徑問題。參考第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――庫。這些都是我們用MFC調(diào)用libvlc.dll所必須的。頭文件沒啥好說的,庫里面的libvlc.dll.a及l(fā)ibvlccore.dll.a就是上一篇博客所說的靜態(tài)庫,我們分別手動(dòng)改成libvlc.lib及l(fā)ibvlccore.lib就可以在VC環(huán)境中調(diào)用啦。下面簡要說一下調(diào)用的過程,對各位VC++達(dá)人來說絕對是小菜一碟。建立工程新建MFCAppWizard(exe)工程,名字為:MFCVLC。選擇項(xiàng)目為Dialogbased,點(diǎn)擊完成。刪除Dialog窗體上的所有的控件,包括“確定”、“取消”按鈕及"TODO"靜態(tài)文本。勾選窗口的clip_children屬性,這樣就會(huì)避免拖動(dòng)、最大化最小化及全屏還原時(shí)找不到圖像的缺陷。畫控件畫四個(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類型,命名為m_path。按鈕的Caption改為“播放”,并為BN_CLICKED增加一個(gè)Function。在CMFCVLCdlg的構(gòu)造方法中加入一下語句方便調(diào)試。m_path=_T("d:/01.avi");//輸入常用的視頻地址拷貝vlc的相關(guān)庫及頭文件在資源管理器的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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度建筑工程保溫材料環(huán)保性能檢測與認(rèn)證合同
- 淮南安徽淮南市中醫(yī)院招聘專業(yè)技術(shù)人員40人筆試歷年參考題庫附帶答案詳解
- 曲靖云南曲靖市馬龍區(qū)應(yīng)急管理局招聘10名綜合應(yīng)急救援隊(duì)員筆試歷年參考題庫附帶答案詳解
- 惠州廣東惠州市惠東縣吉隆鎮(zhèn)人民政府招聘治安聯(lián)防隊(duì)員13人筆試歷年參考題庫附帶答案詳解
- 2025年輕便傻瓜機(jī)項(xiàng)目可行性研究報(bào)告
- 2025年色織絲油提花面料項(xiàng)目可行性研究報(bào)告
- 2025至2031年中國纏繞膜復(fù)卷機(jī)行業(yè)投資前景及策略咨詢研究報(bào)告
- 2025年電動(dòng)式潤滑泵項(xiàng)目可行性研究報(bào)告
- 2025年洗甲護(hù)甲水項(xiàng)目可行性研究報(bào)告
- 2025年有線電視鄰頻調(diào)制器項(xiàng)目可行性研究報(bào)告
- 小學(xué)數(shù)學(xué)六年級解方程練習(xí)300題及答案
- 大數(shù)據(jù)在化工行業(yè)中的應(yīng)用與創(chuàng)新
- 光伏十林業(yè)可行性報(bào)告
- 小學(xué)綜合實(shí)踐《我做環(huán)保宣傳員 保護(hù)環(huán)境人人有責(zé)》
- 鋼煤斗內(nèi)襯不銹鋼板施工工法
- 公司人事招聘面試技巧培訓(xùn)完整版課件兩篇
- 出國勞務(wù)派遣合同(專業(yè)版)電子版正規(guī)范本(通用版)
- 公路工程安全風(fēng)險(xiǎn)辨識與防控手冊
- 供應(yīng)商評估報(bào)告范本
- 職業(yè)生涯規(guī)劃-自我認(rèn)知-價(jià)值觀
- 建筑集團(tuán)公司商務(wù)管理手冊(投標(biāo)、合同、采購)分冊
評論
0/150
提交評論