1,新建一个studio项目名为XmInterPhoneFfmpeg,(目录为:
svn_new_projects\code\AppV2.0\ffmpeg_total\base\XmInterPhoneFfmpeg)
在android studio上依次点击 File-->New-->New Project,再弹出的窗口中Phone and Tablet分支里,下拉选择Native C++,让新建的项目支持C语音静态库,点击创建项目。
2,在app\src\main\cpp文件夹下,将编译好的ffmpeg文件目录下的include和lib两个文件夹下的所有文件都复制到cpp文件夹下。
3,打开cpp文件夹下的CMakeLists.txt,输入以下参数,用以配置ffmpeg。
# I . 指定 CMake 最低版本
cmake_minimum_required(VERSION 3.4.1)
# II . 设置函数库编译
add_library( # 参数 1 : 设置生成的动态库名称
native-lib
# 参数 2 : 设置生成的函数库类型 : ① 静态库 STATIC ② 动态库 SHARED
SHARED
# 参数 3 : 配置要编译的源文件
native-lib.cpp)
# III . 到预设的目录查找 log 库 , 将找到的路径赋值给 log-lib
# 这个路径是 NDK 的 ndk-bundle\platforms\android-29\arch-arm\usr\lib\liblog.so
# 不同的 Android 版本号 和 CPU 架构 需要到对应的目录中查找 , 此处是 29 版本 32 位 ARM 架构的日志库
#
# 可以不配置 :
# 可以不进行该配置, 直接在后面的 target_link_libraries 中链接 log 也不会出错
find_library(
log-lib
log)
# IV . 指定 FFMPEG 头文件查找目录
# CMAKE_SOURCE_DIR 指的是当前的文件地址
include_directories(${CMAKE_SOURCE_DIR}/include)
# V . 指定 FFMPEG 静态库
# CMAKE_CXX_FLAGS 表示会将 C++ 的参数传给编译器
# CMAKE_C_FLAGS 表示会将 C 参数传给编译器
# 参数设置 : 传递 CMAKE_CXX_FLAGS C+= 参数给编译器时 , 在 该参数后面指定库的路径
# CMAKE_SOURCE_DIR 指的是当前的文件地址
# -L 参数指定动态库的查找路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${CMAKE_SOURCE_DIR}/lib")
# V . 链接函数库
# 参数 1 : 本构建脚本要生成的动态库目标
# 参数 2 ~ ... : 后面是之前预编译的动态库或静态库 , 或引入的动态库
target_link_libraries(
native-lib
# FFMPEG 静态库
# 注意这些库的顺序必须按照如下进行 , 否则会报错
# 这些库之间有依赖的关系 , 必须按照顺序加载库 , 如 avcodec 内部依赖 avformat 库
avfilter
avformat
avcodec
avutil
swresample
swscale
# 日志库
${log-lib}
)
4,找到app目录下的build.gradle,打开,找到externalNativeBuild,在里面的cmake{}里的
cppFlags "" 下面一行添加:abiFilters "armeabi-v7a",用以配置编译 C/C++ 源文件为哪几个 CPU 指令集的函数库;在externalNativeBuild{}后面回车再起一行,输入:
ndk{
abiFilters "armeabi-v7a" /*, "arm64-v8a", "x86", "x86_64"*/
}
用以打包生成的 APK 文件指挥包含 ARM 指令集的动态库。
5,打开cpp目录下的native-lib.cpp,先删除里面的内容,输入以下内容:
#include <jni.h>
#include <string>
extern "C"{
#include <libavcodec/avcodec.h>
}
用以初始化ffmpeg基础配置。
如此,ffmpeg基础支持库配置完成。