Android集成FFmpeg

目录

编译动态链接库

如何编译大家可以根据这篇文章的步骤来实现,作者写的非常的详细:编译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 
#include 
//混合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)