在Android上實現多格式多媒體播放器的幾種方式

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


Google在Android 2.0版本以後採用了StageFright作爲他的多媒體框架,但是StageFright自帶的音視頻解碼標準實在太少。

    Android 2.3.1裏面原生支持的Extractor有: AMR, MP3, MPEG4, Ogg, WAV

    Android 2.3.1裏面原生支持的Audio解碼器有: AMRNB AMRWB, MP3, AAC, G711

    Android 2.3.1裏面原生支持的Video解碼器有: MPEG4, H264, H264 (Baseline Profile), VPx (應該是VP8)

 

可以說目前最好的支持多標準媒體處理的開源項目是FFMpeg,因此在考慮多格式媒體播放器時自然會想到怎麼樣利用FFmpeg。

1. 通過JNI來調用FFmpeg.

   這種方式不管Android自己的多媒體框架,把FFmpeg作爲一個應用調用起來。Rockplyer貌似就是用這樣的方式實現的。網上有些教程教大家怎麼做。 
 
2. 用Mplayer架構替換StageFright架構
    因爲只是解碼器,所以可以選用支持多格式更加完善的Mplayer來代替(這裏應該叫Bypass更好)StageFright
    仿照StageFright與AwesomePlayer之間的API,在Mplayer上面實現它們, 這樣對於Android應用層是完全不可見的,有點類似Google用StageFright替代OpenCore。
    這種方式的好處是可能開發速度會很快,FFmpeg作爲Mplayer的解碼核,不需要做任何的改動就可以直接使用,網上也有Mplayer的Android版本可供參考;
    這種方式的不好處就是替換了SF架構,這與Google的設計有些衝突。還有Mplayer對OpenMax的支持不足,以後系統擴展升級會遇到困難。
 
3. 按照Google提供的方法,添加不同的Demux, decoder 到SF中
    這種方式需要把不同的Demux, decoder從ffmpeg代碼中提取出來,然後添加到 frameworks/base/media/libstagefright/codecs/ 目錄裏面。
    這種方式的好處在於完全按照google的架構來實現,也可以重用第三方的其他音視頻標準的實現(如果能找到的話);
    這種方式的不好處在於所有的標準都需要一個個的重複做一邊,開發週期可能會很長。
    以後FFMpeg升級了,這邊的代碼如果想做相應升級也會很麻煩,因爲已經被拆分零散了。
 
4. 把FFmpeg看作是一個硬件解碼核,作爲一個OMX core通過OMX接口加載到SF系統中
    這種方式的好處在於不需要對FFmpeg的源代碼進行修改,只需要把他用OMX包起來,然後加載到SF架構上去。
    這種方式的不好處在於需要去了解OpenMax的技術細節,實現的技術難度比較大,

 

究竟採用哪種方式,要看開發週期,開發人員的技術儲備,以及對後續系統升級的要求了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章