在Android上实现多格式多媒体播放器的几种方式
来源:互联网 发布:淘宝不能卖电子书了 编辑:程序博客网 时间:2024/05/18 00:34
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的技术细节,实现的技术难度比较大,
究竟采用哪种方式,要看开发周期,开发人员的技术储备,以及对后续系统升级的要求了。
- 顶
- 踩
- 上一篇对多媒体框架的几点看法
- 下一篇FFmpeg中libstagefright.cpp的认识
阅读全文
0 0
- 在Android上实现多格式多媒体播放器的几种方式
- 在Android上实现多格式多媒体播放器的几种方式
- 在Android上实现多格式多媒体播放器的几种方式
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- android全格式多媒体播放器(三:基于ffmpeg架构的具体实现)
- Android多媒体学习十二:Android中Video的三种播放方式的实现
- Android多媒体学习十二:Android中Video的三种播放方式的实现
- Android多媒体学习十二:Android中Video的三种播放方式的实现 .
- swf 格式Flash 动画播放器在Android上的实现
- Android中的MediaPlayer几种播放器的播放方式
- android实现视频播放的几种方式
- 常见多媒体播放器的几种写法
- android Video的几种播放方式
- Android几种播放视频的方式
- Android 视频播放的几种方式
- Android视频播放 的几种方式
- ajax三级联动
- 正则表达式
- 最大子阵和(百度2017秋招真题)
- oracle安装与卸载
- PTA练习题.高考状元
- 在Android上实现多格式多媒体播放器的几种方式
- 关于OC与JS交互的交流
- CF821A-Okabe and Future Gadget Laboratory
- 分别用CSS3和js两种方法实现图片切换
- 二叉树的所有路径
- 寄存器为什么比内存快
- MAC地址和组播地址的转换
- ARM板Ubuntu平台上编译CANFestival的方法
- 代码实例