目前大概知道的:
1. android多媒体框架有两个:OpenCore和Stagefright。
2. android中的mediaplayer解码的时候会使用OpenMAX标准。
3. 硬件厂商可以通过OpenMAX标准支持硬件解码。
问题是:
1. 应用程序员是否可以通过jni的方式调用厂商支持的硬解码功能,如果可以,需要怎么做?
2. 应用程序员如果要做一个软解码的支持,比如针对flv的软解码,有没有可能让系统的多媒体框架调用,如果可以调用,需要做哪些工作?
十分感谢您的关注和回复。
1. android多媒体框架有两个:OpenCore和Stagefright。
2. android中的mediaplayer解码的时候会使用OpenMAX标准。
3. 硬件厂商可以通过OpenMAX标准支持硬件解码。
问题是:
1. 应用程序员是否可以通过jni的方式调用厂商支持的硬解码功能,如果可以,需要怎么做?
2. 应用程序员如果要做一个软解码的支持,比如针对flv的软解码,有没有可能让系统的多媒体框架调用,如果可以调用,需要做哪些工作?
十分感谢您的关注和回复。
可以通过改framework 实现,或者是用NDK使用FFMPEG 软解码。例如rockplayer 就是用ffmpeg软解。
http://rockplayer.freecoder.org/tech_cn.html
一,自己在framework增加自己的类似于stagefright的media framework,自己的应用通过JNI调到,然后再去调自己的解码器如ffmpeg
二,把自己的解码器包装成stagefright能使用的组件,应用通过调用android标准的media framework来实现
当然你可以不是用opencore/stagefright,自己实现框架,这样的华工作就打了,需要NDK,JNI等技术
系统so在不设置的情况下不会调用用户级应用的so的吧,似乎要一个.cfg配置文件,而这个文件是系统级的。OpenCore和Stagefright是支持硬件编解码,不过他的实现方式似乎是调用了底层的OpenMAX框架,而设备制造商会在驱动层实现OpenMAX的实现。我的意思是能不能通过jni直接调用OpenMAX的decode函数,因为OpenCore或Stagefright框架把demux和decode都封装在一起了,实际上demux基本上也是软件的方式实现的,主要的瓶颈在decode上,如果能直接调用OpenMAX的decode,就可以很轻松的实现类似于FLV这样格式视频的“硬解码”了。
我的意思是如何给系统框架添加demux的支持.如果使用插件的方式支持,就需要修改多媒体框架,至少需要修改多媒体框架加载demux的流程,而这个过程是应用层开发无法实现的(我的理解,也许可以?).所以打算自己用软件方式demux,然后通过OpenMAX调用硬件的decode。
可否指点指点~~