對多媒體框架的幾點看法

轉載地址:http://blog.csdn.net/huibailingyu/article/details/7565861

對多媒體框架的幾點看法
WiKi上定義: A multimedia framework is a software framework that handles media on a computer and through a network. A good multimedia framework offers an intuitive API and a modular architecture to easily add support for new audio, video and container formats and transmission protocols. It is meant to be used by applications such as media players and audio or video editors, but can also be used to build videoconferencing applications, media converters and other multimedia tools.
多媒體框架可以理解爲一個軟件平臺,在這個平臺上設計了一套直觀緊湊的API接口。上層應用程序通過這些接口,能夠透明化的使用下層的編解碼器(具體使用的哪一種解碼器,可能上層應用程序根本不知道);而下層的軟硬件編解碼器也可以很容易的添加到這個框架中,這就需要對市面上的多種編解碼器提煉出相同的功能接口。
就目前我的理解,一個多媒體框架在解碼部分需要完成的主要功能有:
1. 文件/流的接收讀取,涉及到本機文件的讀取,流式媒體的接收,流媒體傳輸協議的支持;
2. AV文件的解交織(Demux),多種Container的探測、識別,音視頻包的分發;
3. 音視頻的解碼(Decoding),多標準音視頻解碼,這是計算量最大的部分;
4. 音視頻的同步(Sync),一般是以音頻同步視頻的方式,也有音視頻都同步一個外部時鐘的方式;這裏還包括了Frame Buffer的管理;
5. 音視頻的展現(Display),音頻的重新採樣,視頻的縮放等,以及與硬件驅動的接口。
當前主流的開源多媒體框架主要有:
1. GStreamer. GStreamer 2009年開始開發,是一種pipeline-based 的跨平臺多媒體框架。GStreamer的體系非常龐大,在我看來他的具有3個核心的優點:
a. Plug-in,插件。他將每個實現具體單一功能(decoding、filter、…)的單元稱爲一個組件(component),組件有相對固定的接口;
b. Pipeline-based,因爲有插件的存在,在實現具體功能的時候就可以,通過接口間的pad把相應的功能組件串聯起來,以完成特定的功能。
c. 跨平臺性
有很多人在爲GStreamer工作,提供了各式各樣的插件,插件繼承相同的基類,但彼此之間互相獨立,不會互相影響。
GStreamer有FFmpeg的插件,以完成音視頻的解碼,GStreamer還有Open Max IL插件,這爲他可以連接其他硬件的編解碼功能提供了可能。
2. Mplayer. 有些人認爲Mplayer只是一個多媒體播放器,只是因爲Mplayer專注於音視頻的解碼部分,它不涉及編碼部分(MEncoder實現編碼)。如果僅說編碼部分,Mplayer的功能已經強大到可以實現一個多媒體框架的程度。
3. OpenCore. 這是Google在Android2.0版本前採用的多媒體框架,結構比較複雜,支持的音視頻標準不多。他支持OpenMax IL,可以支持硬件解碼器;
4. StageFright. 這是Google在Android2.0版本後採用的多媒體框架,相對於OpenCore,他的結構相對簡單一些,但目前支持的音視頻標準很少,他保留了OpenMax IL。
5. DirectShow. 這是微軟在Windows系統上設計的多媒體框架,當然他不是開源的,只是公開很多的API接口。
6. 還有一些其他的專有的多媒體框架,這裏就不詳細說了。

一個好的多媒體框架需要考慮那些問題呢?
1. 擴展性,音視頻標準、文件格式都還在發展,不知道以後還會有什麼新的格式出現,因此一個好的多媒體架構應該能夠很容易的將新的標準格式融合進來。GStreamer的組件概念,是一個比較好的想法。其實現在主要的多媒體框架都在提組件。
2. 升級性,擴展是增加新東西,升級是增強舊東西。這種升級也有可能是用硬件實現代替軟件實現,越來越多的音視頻解碼功能需要硬件的支持,不同廠家的硬解碼芯片千差萬別,想要把他們都能很好的融合到一個多媒體框架裏面是一件很難的任務。OpenMax就是爲了實現這一目的出現的,對OpenMax的支持將是多媒體框架的必選。
3. 豐富性,是指支持的音視頻標準以及文件格式的多少。目前在Android系統上讓大家頭疼的一個問題就是StageFright支持的音視頻標準實在是太少了,完全不能滿足市場的需要。這個問題當然可以依靠Google慢慢的解決,或者某些好心的第三方發佈源碼來解決,但這都不是可靠的方式。由此也有公司在Android上跳過StageFright而直接用Gstreamer或者Mplayer。

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