美文网首页Android
Android集成FFmpeg

Android集成FFmpeg

作者: itfitness | 来源:发表于2021-08-28 17:42 被阅读0次

    目录

    编译动态链接库

    如何编译大家可以根据这篇文章的步骤来实现,作者写的非常的详细:编译FFmpeg for Android
    我使用的是基于Ubuntu 18.04的系统编译的中间没有什么卡顿

    集成到项目

    1.拷贝动态链接库到项目
    这里我放在libs目录下,注意这里拷贝的是那些带数字的so库



    2.拷贝头文件到项目
    将编译生成的include文件夹拷贝到cpp文件目录下


    3.配置CMakeLists.txt文件
    配置如下
    cmake_minimum_required(VERSION 3.10.2)
    project("ffmpegdemo")
    #导入头文件(可以让项目找到头文件,这样才能调用函数)
    include_directories("${CMAKE_SOURCE_DIR}/include")
    #配置动态链接库所在的目录
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}../../../../libs/${ANDROID_ABI}")
    add_library( # Sets the name of the library.
                 native-lib
                 SHARED
                 native-lib.cpp )
    
    find_library( # Sets the name of the path variable.
                  log-lib
                  log )
    target_link_libraries( # Specifies the target library.
                           native-lib
                            #下面这些是链接的库名称(其实就是so文件去掉前面的lib和后面的.so)
                            avcodec-58
                            avdevice-58
                            avfilter-7
                            avformat-58
                            avutil-56
                            postproc-55
                            swresample-3
                            swscale-5
                           ${log-lib} )
    

    4.配置app的build.gradle文件

    externalNativeBuild {
                //配置自己写的代码生成的架构类型
                cmake {
                    cppFlags ''
                    abiFilters 'armeabi-v7a'
                }
            }
            ndk{
                //配置第三方库的架构类型,由于我们这里只有armeabi-v7a的因此只配置了它
                abiFilters 'armeabi-v7a'
            }
    sourceSets {
            main {
                jniLibs.srcDirs = ['libs']
            }
        }
    

    5.显示FFmpeg版本号
    为了查看是否配置成功,我们将原来的native-lib.cpp中返回Hello from C++的代码改为返回FFmpeg的版本号

    #include <jni.h>
    #include <string>
    //混合C代码编译
    extern "C"{
    #include "libavcodec/avcodec.h"
    }
    extern "C" JNIEXPORT jstring JNICALL
    Java_com_itfitness_ffmpegdemo_MainActivity_stringFromJNI(
            JNIEnv* env,
            jobject /* this */) {
        return env->NewStringUTF(av_version_info());
    }
    

    效果如下就说明配置成功了


    案例源码

    https://gitee.com/itfitness/ffmpeg-build

    相关文章

      网友评论

        本文标题:Android集成FFmpeg

        本文链接:https://www.haomeiwen.com/subject/rinbiltx.html