开源多媒体项目汇总与分析
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,藍色代表僅支持嵌入式平臺。直角方框表示開源庫,圓角方框代表構建于開源庫上的應用。
2.軟件框架類
2.1 Directshow/Media Foundation
DirectShow和Media Foundation是微軟在Windows平臺上推出的兩個多媒體應用庫,為Windows平臺提供一個統一的多媒體影音解決方案,兩個應用庫都是基于COM(Component Object Model)的流媒體處理的開發包,差別僅在于支持Windows的版本不同。其中Directshow是早年間從事多媒體軟件開發的老程序員們(如10多年前的豪杰超級解霸)最為青睞的開發庫,且整個框架本身的源代碼都已公開。該庫使用Filter Graph的模型來管理整個數據流的處理過程,可以很方便地從支持WDM驅動模型的采集卡上捕獲數據,并且進行相應的后期處理如合成、編碼、網絡發送或存儲到文件,廣泛地支持各種媒體格式,為多媒體流的捕捉和回放提供了強有力的支持。Filter Graph示例如下:
如上圖所示,Filter Graph中每個模塊稱為Filter,視頻采集模塊為Source Filter,網絡發送模塊為Sink Filter,其余中間模塊為Transform Filter,模塊間以管腳相連,連接管腳稱為Pin,一個最簡單的例子是視頻流從左至右經過視頻采集、視頻分析、視頻編碼后發送至網絡。
2.2 GStreamer
GStreamer是Linux平臺下用來構建流媒體應用的開源多媒體框架,為Linux平臺提供一個統一的音/視頻應用程序的開發方法,該多媒體框架庫基于Glib核心庫函數,是一個處理插件、數據流和媒體操作的框架。開發者利用API可以構建一系列的媒體處理組件模塊,并能夠很方便的接入到任意的管道當中。這個優點使得利用GStreamer編寫一個萬能的可編輯音視頻應用程序成為可能。目前該庫目前廣泛地支持各種媒體格式,其管道能夠被GUI編輯器編輯, 能夠以XML文件來保存。該庫使用Bin模型來管理整個數據流的處理過程,示例如下:
如上圖所示,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上使用。
其結構如下圖所示:
由上述結構可看出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
此部分將來作為專題進行講解
總結
以上是生活随笔為你收集整理的开源多媒体项目汇总与分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 事件相关电位(ERP)的简单处理流程(含
- 下一篇: IP电话无法启动及注册