从ffmpeg的3.1版本开始,加入了对Android的MediaCodec硬解支持,目前支持的格式包括h264、h265、mpeg4、vp8和vp9,下面以h264为例说明一下
1、编译ffmpeg
在configure阶段首需要enable相关的组件,如下所示:
--enable-jni
--enable-mediacodec
--enable-decoder=h264_mediacodec
--enable-hwaccel=h264_mediacodec
此外,必须指定编译平台 --target-os=android,否则会报错:ERROR:jni not found
2、使用MediaCodec
第一步:为ffmpeg设置java虚拟机
因为用到了jni,所以第一步需要为ffmpeg设置java虚拟机,在JNI_OnLoad函数中调用av_jni_set_java_vm,该函数在libavcodec/jni.h文件中
第二步:使用MediaCodec
MediaCodec对应的ffmpeg的组件名称为“h264_mediacodec”,需要通过指定名字来获得相应的codec,如果获得硬件解码器失败,再通过id来获得软件解码器
AVCodec *codec = avcodec_find_decoder_by_name("h264_mediacodec");
if (codec == NULL) {
codec = avcodec_find_decoder(id);
}
到此即可使用了,其他地方不需要修改