VLC 關鍵模塊結構分析

    VLC 採用的是全模塊化結構,在系統內部,動態載入所需的模塊,放入一個module_bank的結構體進行統一管理,連VLCMain模塊也是經過插件的方 式動態載入的(經過module_InitBank函數在初始化創建module_bank時)。對於不支持動態載入插件的系統環境中,VLC也能夠採用 builtin的方式,在VLC啓動的時候靜態載入所須要的插件,並放入module_bank統一管理。服務器

    VLC 的模塊分紅不少類別主要有:accessaccess_filteraccess_outputaudio_filter audio_mixeraudio_outputcodeccontroldemuxguimiscmuxpacketizer stream_outputvideo_filtervideo_outputinterfaceinputplaylist等(其中黑體爲核 心模塊)。VLC不管是做爲流媒體服務器仍是多媒體播放器,它的實質思路就是一個播放器,之因此這麼形象描述,是由於它實質處理的是ESPESPSTS等流間的轉換、傳輸與顯示。對於流媒體服務器,若是從文件做爲輸入 即: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目錄及其子目錄,其結構以下所示:


今天的總結就到這裏了,歡迎你們多多點評指導啊。

相關文章
相關標籤/搜索