1. 程式人生 > >開源多媒體專案彙總與分析

開源多媒體專案彙總與分析

1.概述

多媒體資訊處理,特指視訊、音訊媒體資料的處理。媒體資料包括原始訊號資料(未壓縮)和編碼後媒體流資料(已壓縮),處理域可能在空間域、時間域或變換域上。其中視訊處理具體包括視訊編碼、解碼、採集、顯示、分組(打包)、解分組(拆包)、合成、分割、上取樣、下采樣、OSD疊加等等;音訊處理具體包括音訊編碼、解碼、採集、回放、分組、解分組、混音、噪聲抑制、回聲消除、增益控制等等;此外還有音視訊流化、音視訊的複用與解複用、音視訊同步等處理技術。多媒體資訊處理應用的硬體平臺涵蓋x86平臺、ARM平臺、DSP平臺、GPU平臺,作業系統包含伺服器PC機上主流的OS,如Windows(x86)、Linux(x86)以及嵌入式OS,如Embedded Linux、Android、iOS等。技術領域覆蓋通訊基礎、計算機硬體原理、計算機網路、計算機軟體架構、音視訊編碼協議與演算法等等。本文僅簡要分析一些常見的多媒體處理的軟體開源工程,暫不包括硬體技術、多媒體通訊信令標準等內容。
近幾年來,本人在工作中接觸到的開源多媒體專案如下圖所示,其中綠色代表僅支援x86平臺的Windows OS,紅色代表僅支援x86平臺的Linux OS,黃色代表支援x86平臺上兩種OS,藍色代表僅支援嵌入式平臺。直角方框表示開源庫,圓角方框代表構建於開源庫上的應用。

arch pic

2.軟體框架類

2.1 Directshow/Media Foundation

dx pic

DirectShowMedia Foundation是微軟在Windows平臺上推出的兩個多媒體應用庫,為Windows平臺提供一個統一的多媒體影音解決方案,兩個應用庫都是基於COM(Component Object Model)的流媒體處理的開發包,差別僅在於支援Windows的版本不同。其中Directshow是早年間從事多媒體軟體開發的老程式設計師們(如10多年前的豪傑超級解霸)最為青睞的開發庫,且整個框架本身的原始碼都已公開。該庫使用Filter Graph的模型來管理整個資料流的處理過程,可以很方便地從支援WDM驅動模型的採集卡上捕獲資料,並且進行相應的後期處理如合成、編碼、網路傳送或儲存到檔案,廣泛地支援各種媒體格式,為多媒體流的捕捉和回放提供了強有力的支援。Filter Graph示例如下:

fg pic

如上圖所示,Filter Graph中每個模組稱為Filter,視訊採集模組為Source Filter,網路傳送模組為Sink Filter,其餘中間模組為Transform Filter,模組間以管腳相連,連線管腳稱為Pin,一個最簡單的例子是視訊流從左至右經過視訊採集、視訊分析、視訊編碼後傳送至網路。

2.2 GStreamer

gstreamer pic

GStreamer是Linux平臺下用來構建流媒體應用的開源多媒體框架,為Linux平臺提供一個統一的音/視訊應用程式的開發方法,該多媒體框架庫基於Glib核心庫函式,是一個處理外掛、資料流和媒體操作的框架。開發者利用API可以構建一系列的媒體處理元件模組,並能夠很方便的接入到任意的管道當中。這個優點使得利用GStreamer編寫一個萬能的可編輯音視訊應用程式成為可能。目前該庫目前廣泛地支援各種媒體格式,其管道能夠被GUI編輯器編輯, 能夠以XML檔案來儲存。該庫使用Bin模型來管理整個資料流的處理過程,示例如下:

bin pic

如上圖所示,Bin中每個模組稱為Element,視訊採集模組為Source Element,網路傳送模組為Sink Element,其餘中間模組為Filter Element,模組間以管腳相連,連線管腳稱為Pad。一個最簡單的例子是視訊流從左至右經過視訊採集、視訊分析、視訊編碼後傳送至網路。

2.3 OpenMAX

OpenMAX(全稱Open Media Acceleration),是一個C語言實現的、處理多媒體的跨平臺的軟體抽象層,其目標在於創造一個統一的介面,加速大量多媒體資源的處理,目前支援嵌入式Linux、Android等作業系統。隨著從事移動開發的程式設計師越來越多,移動處理晶片的多媒體處理硬核加速的需求將該開源庫的關注度日益增高。

該框架自上而下分為如下三個層次:
1. OpenMAX AL:Application Layer,應用程式和多媒體中間層的標準介面,使得應用在多媒體介面上具有了可移植性;
2. OpenMAX IL:Integration Layer,作為在嵌入式和移動裝置中使用的audio,video,images codecs的底層介面。使得應用層和多媒體框架可以以統一的方式訪問多媒體codec和支援元件,Codec可以是硬體和軟體的任意組合,對使用者透明;
3. OpenMAX DL: Development Layer定義了一套API,包含了audio,video和imaging使用的函式集合,這些函式可以由晶片廠商針對新的處理器進行實現和優化,然後被codec 廠商在各種codec上使用。
其結構如下圖所示:

omx pic

由上述結構可看出OpenMAX框架整體屬於分層架構模式,而非管道過濾器模式,OpenMAX優勢在於:
1. 加速跨OS和silicon平臺的多媒體組建的開發、整合和程式設計;
2. 使library和codec實現者能夠快速有效的利用潛在的加速功能,而不關心下層的硬體結構。
雖然OpenMAX框架整體屬於分層模式,但其Codec模組可按照Gstreamer的介面進行封裝適配,故兩個框架可以互相融合。其中由Nokia, NXP, Collabora,STMicroelectronics, Texas Instruments以及開源社群共同推動的gst-openmax是一系列Gstreamer的外掛,實現了OpenMAX IL介面對Gstreamer的適配封裝。

2.4 FFmpeg

ffmpeg pic

此部分將來作為專題進行講解