Android中调用FFmpeg方法(AndroidStudio版本)

step1.创建新项目

注意“:

  • Native C++
  • API 26 (.so里是23,需要大23)

Step2.把FFmpeg编译后的so文件拷贝到cpp目录下,并创建arm64-v8a目录

注意:可以创建多个,但是目录名需要跟系统支持的一致,这里只编译了一个cpu的so.所以只创建一个。

Step3.FFMpeg编译后的头文件include拷贝到cpp目录中,(直接复制过去就好)

Step4.修改build.gradle.

 cmake {
     cppFlags ""
     // 过滤器,只打包arm-64-v8a,所以只指定一种
    abiFilters 'arm64-v8a'
 }
//指定资源文件夹,必加
sourceSets {
    main{
        jniLibs.srcDirs('src/main/cpp')
    }
}

Step5.native-lib.cpp

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

extern "C" JNIEXPORT jstring JNICALL
Java_com_example_ff004_MainActivity_stringFromJNI(
        JNIEnv* env,
        jobject /* this */) {
    return env->NewStringUTF(avcodec_configuration());
}

Step6.CMakeLists.txt

#引入头文件
include_directories(include)

#设置ffmpeg库所在路径的变量
set(FF ${CMAKE_CURRENT_SOURCE_DIR}/${ANDROID_ABI})
add_library(avcodec SHARED IMPORTED)
set_target_properties(avcodec PROPERTIES IMPORTED_LOCATION ${FF}/libavcodec.so)

target_link_libraries( # Specifies the target library.
                       native-lib
                       avcodec
                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )