Android上jni c++使用MediaCodec的方法



在Android上做媒体开发,避免不了对视频数据进行编解码。

软件编解码有FFmpeg。虽然FFmpeg软件编解码兼容性和适应性很好。但是在大部分主流的机器上,解码720p视频已经很勉强了,更不用提更高的分辨率。编码的话要求更高。

所以在移动平台上做视频编解码应当优先使用机器自带的硬件编解码来实现。
Android系统底层的硬件编解码框架是OpenMaxIL。使用这个可以跨的版本最多。从Android2.3以后支持。不过使用难度大。这里不讨论了。

Android从4.1以后提供了MediaCodec这个框架做视频编解码,但是5.0系统以前只提供了java版,5.0以后才能在jni native code使用。

很多情况下视频处理的数据都是放在native code那边处理的,编解码部分也希望在native code里面一起实现。

虽然可以用java 的MediaCodec稍微封装下,然后在jni 里面用c/c++代码里面用jni的交互接口(FindClass、Call...Method 等配合调用)。但是这种方法不仅代码封装性不好,还得频繁的进程native code与jvm的交互,效率不高。而且破坏代码可读和封装。


所以这里提供个4.1以后的系统都能在native code像5.0那样使用MediaCodec的方法,方便c++开发者使用MediaCodec:

<
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值