目前大概知道的:
1. android多媒体框架有两个:OpenCore和Stagefright。
2. android中的mediaplayer解码的时候会使用OpenMAX标准。
3. 硬件厂商可以通过OpenMAX标准支持硬件解码。
问题是:
1. 应用程序员是否可以通过jni的方式调用厂商支持的硬解码功能,如果可以,需要怎么做?
2. 应用程序员如果要做一个软解码的支持,比如针对flv的软解码,有没有可能让系统的多媒体框架调用,如果可以调用,需要做哪些工作?
十分感谢您的关注和回复。
------解决方案--------------------
mark ,
可以通过改framework 实现,或者是用NDK使用FFMPEG 软解码。例如rockplayer 就是用ffmpeg软解。
http://rockplayer.freecoder.org/tech_cn.html
------解决方案--------------------
个人感觉两种方式吧
一,自己在framework增加自己的类似于stagefright的media framework,自己的应用通过JNI调到,然后再去调自己的解码器如ffmpeg
二,把自己的解码器包装成stagefright能使用的组件,应用通过调用android标准的media framework来实现
------解决方案--------------------
OpenCore和Stagefright本身就支持硬件厂商的编解码器,符合openmax标准
如果要增加别的文件格式支持,你需要给opencore或者SVTAGEFRIGHT些插件,实现文件格式的parse,另外软件解码器可以做成openmax的component让框架调用,这些都是使用C/C++实现,最后是so的形式出现,这些的华上层JAVA APP不需要修改任何东西,秩序调用mediaplayer类的方法就可以了,和以前的调用发放一样.
当然你可以不是用opencore/stagefright,自己实现框架,这样的华工作就打了,需要NDK,JNI等技术