作者:可可1994棒_241 | 来源:互联网 | 2023-07-30 14:36
目录
编译动态链接库
如何编译大家可以根据这篇文章的步骤来实现,作者写的非常的详细:编译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