ffmpeg android jni端调用mediaCodec实现硬解码

硬解码

1、在jni层导入 ffmpeg的jni.h头文件

extern "C"{
    #include "libavcodec/avcodec.h"
    #include <libavformat/avformat.h>
    #include "libavcodec/jni.h"
}

2、实现jni.h里的方法,固定的方法名

extern "C"
JNIEXPORT
jint JNI_OnLoad(JavaVM *vm, void *res) {
    av_jni_set_java_vm(vm, 0);
    // 返回jni版本
    return JNI_VERSION_1_4;
}


3、打开硬解码,编译ffmpeg的时候要支持硬解码。

AVCodec *videoCodec = avcodec_find_decoder_by_name("h264_mediacodec");
AVCodecContext*videoCodecContext = avcodec_alloc_context3(videoCodec);
avcodec_parameters_to_context(videoCodecContext, ic->streams[videoStream]->codecpar);
videoCodecContext->thread_count = 1;
re = avcodec_open2(videoCodecContext,0,0);
// 转自网络:https://blog.csdn.net/zhangpengzp/article/details/88943867 感谢