VLC简介
VLC原指VideoLAN客戶端(VideoLANClient),是一款開源的、跨平臺的、可擴(kuò)展的、多媒體播放器、流媒體服務(wù)器及框架,可播放大多數(shù)多媒體文件,以及DVD、音頻CD、VCD及各類流媒體協(xié)議,現(xiàn)更名為VLC media player,最新版本為2.2.0。
VideoLanServer(VLS)的功能已經(jīng)合并到VLC中,所以VLC不僅僅是一個音/視頻播放器,它也可以作為小型的視頻服務(wù)器(或作為流媒體服務(wù)器使用),更可以一邊播放一邊轉(zhuǎn)碼,把視頻流發(fā)送到網(wǎng)絡(luò)上。VLC最為突出的就是網(wǎng)絡(luò)流的播放功能。
VLC通常不影響也不依賴于系統(tǒng)中自帶的解碼器。
VLC的license是GPL。
VLC采用多線程并行解碼架構(gòu),線程之間通過單獨的一個線程控制所有線程的狀態(tài),解碼器采用filter模式,組織方式為模塊架構(gòu)。
VLC播放一個視頻大致分為4個步驟:(1)、access,從不同的源獲取流;(2)、demux,就是把通常合在一起的音頻和視頻分離(還有可能的字幕);(3)、decode,解碼,包括音頻和視頻的解碼;(4)、output,輸出,也分為音頻和視頻的輸出(aout和vout)。
VLC能夠處理的流類型包括:(1)、ES(ElementaryStreams);(2)、PS(Program Stream);TS(Transport Stream)
下面簡單說明下源碼中各個目錄的作用,其實源碼中大部分每個.h、.c文件的開始處都對此文件的作用進(jìn)行了簡單描述:
1.????????/autotools:
2.????????/bin:此目錄下的winvlc.c文件用于生成.exe執(zhí)行文件;
3.????????/compat:生成libcompat庫的源文件,此目錄下包含了與平臺相關(guān)的一些代碼,比如Windows、POSIX、BSD等;
4.????????/contrib:第三方庫,此目錄下包含很多空的目錄,如果要想編譯這些第三方庫,需要自己單獨下;
5.????????/doc:一些log等說明信息;
6.????????/extras:一些額外的文件;
7.????????/include:所有頭文件的集合;
8.????????/lib:生成libvlc庫的源文件;
9.????????/m4:宏處理器;
10.????/modules:VLC的模塊部分,這些模塊只在程序載入它們時有效;每一個模塊,可提供不同的功能,它們適合特定文件或某一特定的環(huán)境;此外,audio_output/video_output/interface模塊都寫成了可跨平臺的代碼,方便支持新的平臺。如果你想編譯某個模塊可以通過:% ./configure --enable-module_name?;如果不想編譯某個模塊可以通過: %? ./configure? --disable-module_name ;如果想得到某個模塊的幫助信息,可通過:%vlc --advanced -p module_name ;????
11.????/modules/access:從不同的源獲取流;
12.??/modules/access_output:以不同的形式輸出流;
13.??/modules/arm_neon:arm架構(gòu),一些匯編代碼;
14.??/modules/audio_filter:各種音頻濾波器;
15.??/modules/audio_mixer:音量設(shè)置模塊;
16.??/modules/audio_output:音頻輸出模塊,聲音將會輸出到你的音頻系統(tǒng)中;
17.????/modules/codec:音視頻編解碼模塊;
18.????/modules/control:動作控制功能,如鼠標(biāo)手勢控制vlc等;
19.????/modules/demux:將合在一起的音頻和視頻分離(還有可能包括字幕);
20.????/modules/gui:不同平臺的用戶界面模塊;
21.????/modules/hw/vdpau:VDPAU(VideoDecode and Presentation API for Unix)的API可以讓視頻播放器把一部分的視頻解碼和視頻圖像補(bǔ)償交給GPU,最初由NVIDIA開發(fā);
22.????/modules/lua:與Lua腳本語言相關(guān)的模塊;
23.????/modules/meta_engine:
24.????/modules/misc:雜項,包括webservice解析、xml解析、playlist輸出模塊等;
25.????/modules/mux:將視頻、音頻、字幕合并為某一個視頻格式,如.avi、.mp4等;
26.????/modules/notify:notificationplugin;
27.????/modules/packetizer:音視頻打包模塊,如H264/AVC、MLP/TrueHD等;
28.????/modules/services_discovery:servicesdiscovery module;
29.????/modules/stream_filter:streamfilter;
30.????/modules/stream_out:流輸出模塊;
31.????/modules/text_renderer:文本渲染模塊;
32.????/modules/video_chroma:圖像格式轉(zhuǎn)換默認(rèn),如YUV到RGB等;
33.????/modules/video_filter:視頻各種濾波模塊,例如對渲染的圖像進(jìn)行色度、對比度、飽和度的調(diào)整等;
34.????/modules/video_output:視頻輸出模塊,允許VLC顯示視頻到你的屏幕上;
35.????/modules/video_splitter:視頻分割模塊;
36.????/modules/visualization:可視化模塊,包括projectM、GOOM等;
37.????/po:i18n(語言翻譯)文件;
38.????/share:圖標(biāo)、腳本等等;
39.????/src:生成libvlccore庫的源文件;
40.????/src/android:android平臺專用模塊;
41.????/src/audio_output:音頻輸出模塊;
42.????/src/config:配置模塊,從命令行和配置文件加載配置,提供功能模塊的讀取和寫入配置;
43.????/src/darwin:Mac(Darwin)平臺專用模塊;
44.????/src/extras:一些平臺的特殊代碼;
45.????/src/input:獲取流模塊,建立并讀取一個輸入流,并且分離其中的音頻和視頻,然后把分離好的音頻和視頻流發(fā)送給解碼器;
46.????/src/interface:用戶接口模塊,提供代碼中可以調(diào)用的接口;
47.????/src/misc:libvlc庫使用的其它部分功能,是被其它模塊使用的雜項,如數(shù)據(jù)庫管理、CPU檢測、圖像的讀寫等;
48.????/src/modules:模塊管理;
49.????/src/network:提供網(wǎng)絡(luò)接口(socket管理,網(wǎng)絡(luò)錯誤等);
50.????/src/os2:OS/2平臺專用模塊;
51.????/src/playlist:播放列表控制模塊;
52.????/src/posix:與POSIX(可移植操作系統(tǒng)接口)相關(guān)的模塊;
53.????/src/stream_output:輸出音頻流和視頻流到網(wǎng)絡(luò);
54.????/src/test:libvlccore庫的測試模塊;
55.????/src/text:字符集;
56.????/src/video_output:初始化視頻播放器,把從解碼器得到的視頻畫面轉(zhuǎn)化格式(從YUV轉(zhuǎn)為RGB)然后播放它們;
57.????/src/win32:windows平臺專用模塊;
58.????/test:一些腳本和測試代碼;
?
VLC中所有的模塊均以動態(tài)庫(插件)方式來管理,就連main模塊也不例外。可以在windows下查看VLC安裝目錄下的plugin目錄,里面包含了所有的動態(tài)庫。當(dāng)VLC啟動的時候,主模塊采用動態(tài)加入的方式。采用宏定義將該模塊的入口函數(shù)導(dǎo)出,以讓其它函數(shù)調(diào)用,同時入口函數(shù)里面初始化了該模塊相關(guān)的所有函數(shù)指針。
VLC采用全模塊化結(jié)構(gòu),在系統(tǒng)內(nèi)部,通過動態(tài)的載入所需的模塊,放入一個module_bank的結(jié)構(gòu)體中統(tǒng)一管理,連VLC的Main模塊也是通過插件的方式動態(tài)載入的(通過module_InitBank函數(shù)在初始化建立module_bank時)。對于不支持動態(tài)載入插件的系統(tǒng)環(huán)境中,VLC也可以采用builtin的方式,在VLC啟動的時候靜態(tài)載入所需要的插件,并放入module_bank統(tǒng)一管理。VLC無論是作為流媒體服務(wù)器還是多媒體播放器,它的實質(zhì)就是一個”播放器”,它實質(zhì)處理的是ES、PES、PS、TS等流間的轉(zhuǎn)換、傳輸與顯示。
可以通過git下載最新源碼:git ?clone git://git.videolan.org/vlc.git
???????? 從網(wǎng)上https://github.com/sunqueen?tab=repositories下載最新的vlc-2.2.0-rc2.32-2013配置好的vs2013工程,有win32 debug和release兩種配置,其中debug模式已經(jīng)配置好,release模式許多工程模塊還沒有配置,要想運行release模式需要自己仿照著debug模式配置。你可以直接運行debug模式,重新編譯整個winvlc工程,會在/vlc-2.2.0-rc2.32-2013/Debug目錄下生成相應(yīng)的靜態(tài)庫、動態(tài)庫以及winvlc.exe文件,除direct3d工程沒有編譯成功外,其它均能正確生成,此direct3d工程沒有編譯成功的原因是機(jī)子本身并沒有direct3d環(huán)境導(dǎo)致,此庫并不是必須的,先不用去理會。運行winvlc.exe導(dǎo)入一個視頻文件可以播放,后來發(fā)現(xiàn)此winvlc.exe和從官網(wǎng)下載的/vlc-2.2.0/vlc.exe,有時顯示效果不一致,后面會進(jìn)一步分析下原因。
總結(jié)
- 上一篇: 开源库Simd在vs2010中的编译及简
- 下一篇: VLC SDK在VS2010中的配置及简