目錄

編譯動(dòng)態(tài)鏈接庫
如何編譯大家可以根據(jù)這篇文章的步驟來實(shí)現(xiàn),作者寫的非常的詳細(xì):編譯FFmpeg for Android
我使用的是基于Ubuntu 18.04的系統(tǒng)編譯的中間沒有什么卡頓

集成到項(xiàng)目
1.拷貝動(dòng)態(tài)鏈接庫到項(xiàng)目
這里我放在libs目錄下,注意這里拷貝的是那些帶數(shù)字的so庫


2.拷貝頭文件到項(xiàng)目
將編譯生成的include文件夾拷貝到cpp文件目錄下


3.配置CMakeLists.txt文件
配置如下
cmake_minimum_required(VERSION 3.10.2)
project("ffmpegdemo")
#導(dǎo)入頭文件(可以讓項(xiàng)目找到頭文件,這樣才能調(diào)用函數(shù))
include_directories("${CMAKE_SOURCE_DIR}/include")
#配置動(dòng)態(tài)鏈接庫所在的目錄
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
#下面這些是鏈接的庫名稱(其實(shí)就是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 {
//配置自己寫的代碼生成的架構(gòu)類型
cmake {
cppFlags ''
abiFilters 'armeabi-v7a'
}
}
ndk{
//配置第三方庫的架構(gòu)類型,由于我們這里只有armeabi-v7a的因此只配置了它
abiFilters 'armeabi-v7a'
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
5.顯示FFmpeg版本號(hào)
為了查看是否配置成功,我們將原來的native-lib.cpp中返回Hello from C++的代碼改為返回FFmpeg的版本號(hào)
#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());
}
效果如下就說明配置成功了
