VLC學習筆記(1): 概述

以前看過VLC的代碼,學習過VLC相關的知識,現將其記下來以作備忘

注:本記錄是以VLC2.0作爲參考,如有出入,請先覈對版本號

一、簡介

VLC多媒體播放器(最初命名爲VideoLAN客戶端)是VideoLAN計劃的多媒體播放器。它支持衆多音頻與視頻解碼器及文件格式,並支持DVD影音光盤,VCD影音光盤及各類流式協議。它也能作爲unicast或 multicast的流式服務器在IPv4或 IPv6的高速網絡連接下使用。它融合了FFmpeg項目的解碼器與libdvdcss程序庫,使其有播放多媒

體文件及加密DVD影碟的功能。

二、特性

簡單、快速、強大的媒體播放器。
可播放任何介質:文件、光盤、攝像頭、設備及流媒體。
可播放大多數格式,而無需安裝編解碼器包,其內已經包含MPEG-2, DivX, H.264, MKV, WebM, WMV, MP3… 等諸多library。
可在所有平臺運行: Windows, Linux, Mac OS X, Unix…
完全免費,無間諜軟件,無廣告,無跟蹤用戶的行爲。
可對媒體進行轉換與串流。
詳細Features見:

http://www.videolan.org/vlc/features.html

三、架構

3.1 整體框架

這裏寫圖片描述

  • libVLCcore: libvlc的核心,抽象出了一個libvlc_instance_t 對象。modules的裝載/
    卸載機制。還有一套多媒體相關的操作接口。如:input, multiplexing,
    demultiplexing, audio output, video output.

  • Modules: modules提供了具體的功能。根據編譯配置module數量200-400之間。
    根據功能可分類爲:輸入輸出(文件、網絡、cd)、編解碼(mp3,h254)、
    模塊化的GUI(基於qt、mac)

  • External libraries: 開源軟件都秉承着不要重複造輪子的思想。所以vlc本身也依賴了大
    量外部開源庫,如知名的ffmpeg、qt、live555等。

  • VLC main: player的main。初始化libVLC並加載用戶界面,注意vlc的用戶界面也是
    以module的形式存在。基於libvlc我們就能自己開發自己的播放器了。

3.2 分層框架結構

這裏寫圖片描述

3.3 modules 按照功能大致分類

這裏寫圖片描述

3.4 源代碼目錄結構

這裏寫圖片描述

3.5 模塊關係

這裏主要是關於模塊的關係,控制接口以及線程再整個框架中的分佈情況(即哪些地方使用到了線程)
這裏寫圖片描述
上圖標有紅色圓圈的模塊就表示其中有使用到線程

3.6 抽象結構

以下,是我按照對VLC的理解抽象出的VLC的結構圖
這裏寫圖片描述

上圖中,每一個虛線框起來的,都可以認定爲是一個較大的模組(由多個模塊組成)

四、運行流程

ELF (Linux下可執行文件的格式) 先被動態加載,然後主線程就變成了接口線程並且在src/interface/interface.c中開始。它執行下列步驟:

  1. cpu探測:什麼型號?所有能力(MMX,MMXEXT,3DNow,AltiVec等等)
  2. 消息接口初始化;
  3. 命令行選項解析組件
  4. 創建播放列表
  5. 倉庫初始化
  6. 加載所有內置和動態組件
  7. 打開接口
  8. 安裝信號處理器:SIGHUP,SIGINT和SIGQUIT(捕獲一個,忽略後來的並退出)。
  9. 派生音頻輸出線程;
  10. 派生視頻輸出線程;
  11. 主循環:事件管理;

下圖爲具體的流程圖
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章