系列的目录
NDK实践(二)将编译的ffmpeg静态库集成到Android工程
上一篇我演示了如何编译android平台的fmmpeg静态库,这一篇我们就试着来把静态库集成到android工程中,为以后的音视频开发做准备,由于一些原因,有些小伙伴可能暂时没有环境来练习自己编译ffmpeg静态库,大家也可以用我编译好的:
接下来开始我们的集成之旅,首先我们新建一个带有NDK开发环境的新项目
打开项目后,把静态库下载解压后,按图所示放到相应的文件夹中
ok,接下来配置下build.gradle文件,设置项目了所支持的cpu类型:
abiFilters "armeabi-v7a"
我编译的这个库只对绝对主流的arm做了支持,原因就是静态库文件较大会严重影响app的体积,如果有需要支持“x86”的小伙伴就需要自己去编译了,可以参考上一篇,然后将生成的“armeabi-v7a”和“x86”都放入libs目录即可。所以我们这个项目只能运行在真机上。
接下来我们在CMakeLists文件中配置ffmpeg:
cmake_minimum_required(VERSION 3.4.1)
#CMAKE_SOURCE_DIR代表的是CMakeLists.txt的路径
file(GLOB SOURCE ${CMAKE_SOURCE_DIR}/*.cpp)
add_library(
# liveplayer这个是可以随意取名的
liveplayer
SHARED
${SOURCE})
find_library( # Sets the name of the path variable.
log-lib
log)
#引入头文件
include_directories(${CMAKE_SOURCE_DIR}/include)
#CMAKE_CXX_FLAGS是一个系统变量
#ANDROID_ABI:内置系统变量,表示当前编译的平台即("armeabi-v7a")
#my_lib_path 是我们自己定义的变量(可以自己命名)
#千万需要注意的是这个路径是相对于CMakeLists.txt的路径,否则在编译时会提示找不到静态库文件
#注意:Ndk版本不同CMakeLists.txt的位置是不同的,低版本的CMakeLists.txt文件是放在src目录中的
set(my_lib_path ${CMAKE_SOURCE_DIR}/../../../libs/${ANDROID_ABI})
#设置静态库路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -L${my_lib_path}")
target_link_libraries(
#和上面add_library中的库名保持一致
liveplayer
#这些是要引入的静态库,编译时会在头尾加上lib和.a,即lib+avfilter+.a
avfilter avformat avcodec avutil swresample swscale
${log-lib})
更多CMakeLists常用语法可参考NDK开发(一):初识NDK,从CMakeLists开始
ok,到此就集成完毕了,我们来检验下能否成功调用ffmpeg
我们来调用下查看ffmpeg版本的函数,然后运行到手机上
OK,成功的显示了我们集成的ffmpeg的版本号,后续文章我们将分享如何使用ffmpeg进行音视频开发。