FFmpeg 编译集成至android

FFmpeg 编译问题记录

1.此前没有编译大型的C项目的场景,甚至对整个编译过程已经陌生了,重拾编译之路,以前的编译都是开IDE去操作,现在需要使用编译工具链去编译整套项目,所以需要了解CMake,configure等工具的使用。

2. 简单学习configure,cmake等构建工具后,开始编译 Cmake 学习记录
3. ffmpeg的目录下已经有生成了configure脚本

4.大致了解完作用后 跟着这个https://www.jianshu.com/p/94bb964b4305 这个链接走一遍编译流程

版本说明
ndk:23.1.7779620
编译完成
主要是需要根据编译的问题去处理
strip文件找不到 需要到其它ndk版本的文件夹去寻找
编译ffpmpeg 之后在项目的ffmpeg-android 文件夹中有对应so 和 include文件夹 可供android引入进行二次开发

5. 集成至android ndk 开发
ndk开发的原型是cmake 所以得按照这个工具的思路去集成
按照android集成 这个博客的思路可以集成成功
但是我的代码是最新的版本 时间点 2023.1.16 版本应该是ffpmeg 5.1
但是其中FFmpeg4.0版本以后,avcodec_register_all()等方法已经过时 所以android集成中的内容还需要稍微更改一下,主要是修改遍历编解码器的遍历
主要实现

JNIEXPORT jstring JNICALL
Java_com_joker_ffmpeg_FfmpegJni_00024Companion_ffmpegInfo(JNIEnv *env, jobject thiz) {
    char info[40000] = {0};
    const AVCodec *current_codec = nullptr;
    void *i = 0;
    while ((current_codec = av_codec_iterate(&i))) {
        if (av_codec_is_encoder(current_codec)) {
            sprintf(info, "%s encoder [%s]\n",info, current_codec->name);
        }else if(av_codec_is_decoder(current_codec)){
            sprintf(info, "%s decoder [%s]\n",info, current_codec->name);
        }
    }
    return env->NewStringUTF(info);
}

6.效果

 

posted @ 2023-04-14 12:34  J0K3Rzz  阅读(117)  评论(0编辑  收藏  举报