VLC 採用的是全模塊化結構,在系統內部,動態載入所需的模塊,放入一個module_bank的結構體進行統一管理,連VLC的Main模塊也是經過插件的方 式動態載入的(經過module_InitBank函數在初始化創建module_bank時)。對於不支持動態載入插件的系統環境中,VLC也能夠採用 builtin的方式,在VLC啓動的時候靜態載入所須要的插件,並放入module_bank統一管理。服務器
VLC 的模塊分紅不少類別主要有:access、access_filter、access_output、audio_filter、 audio_mixer、audio_output、codec、control、demux、gui、misc、mux、packetizer、 stream_output、video_filter、video_output、interface、input、playlist等(其中黑體爲核 心模塊)。VLC不管是做爲流媒體服務器仍是多媒體播放器,它的實質思路就是一個「播放器」,之因此這麼形象描述,是由於它實質處理的是ES、PES、PS、TS等流間的轉換、傳輸與顯示。對於流媒體服務器,若是從文件做爲輸入 即:PS->DEMUX->ES->MUX->TS;對於多媒體播放器若是採用UDP方式傳輸 即:TS->DEMUX->ES。網絡
這裏我簡單的從流程,關鍵模塊及其核心庫libvlc進行說明我本身的理解。ide
1. 主要流程模塊化
1). 讀取源數據;2)解封裝; 3)解碼;4) 渲染;函數
流程圖描述以下所示:ui
2. 關鍵模塊spa
1). Input Modules : 用於數據流(本地或者網絡文件或者流)的讀入;解封裝,輸出原始流ES(用於後續的解碼操做);讀取buffer中的數據進行交互;插件
2). Audio Modules:視頻輸出視頻渲染,輸出和窗口管理;多路複用模塊用於格式封裝,封裝過程不涉及編解碼過程;線程
3). Video Modules:視頻輸出視頻渲染,輸出和窗口管理;多路複用模塊用於格式封裝,封裝過程不涉及編解碼過程;code
4). Stream Modules:音視頻文件的解碼操做;將解碼後的數據流送入FIFO,進行渲染。
5). UI Modules:用戶用戶和vlc各module之間的交互線程管理
3. libvlc
vlc核心的是libvlc,它提供界面,應用處理功能,全部的libvlc的源代碼都放在src目錄及其子目錄,其結構以下所示:
今天的總結就到這裏了,歡迎你們多多點評指導啊。