FFmpeg编译MediaCodec

从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);
}

到此即可使用了,其他地方不需要修改

你可能感兴趣的:(Android,音视频编解码,FFmpeg)