您的位置:首页 > 移动开发 > Android开发

在Android上实现多格式多媒体播放器的几种方式

2016-10-07 11:15 246 查看
转载地址: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的技术细节,实现的技术难度比较大,

 
究竟采用哪种方式,要看开发周期,开发人员的技术储备,以及对后续系统升级的要求了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: