ffmpeg 在 win平台下的编译以及集成.docx
第
ffmpeg?在?win平台下的编译以及集成
#buildarmeabi
#build_binarmarmeabiarm-linux-androideabiarm-linux-androideabi$ANDROID_ARMV5_CFLAGS
#buildarmeabi-v7a
#build_binarmarmeabi-v7aarmv7a-linux-androideabi${API}arm-linux-androideabi$ANDROID_ARMV7_CFLAGS
#buildarm64-v8a
build_binarm64arm64-v8aaarch64-linux-android${API}aarch64-linux-android$ANDROID_ARMV8_CFLAGS
#buildx86
#build_binx86x86i686-linux-android${API}i686-linux-android$ANDROID_X86_CFLAGS
#buildx86_64
#build_binx86_64x86_64x86_64-linux-android${API}x86_64-linux-android$ANDROID_X86_64_CFLAGS
相关解释:
CC:指定c编译器路径CROSS_PREFIX:指定交叉编译工具文件路径的统一前缀。各个工具的最终文件路径为:cross-prefix+工具名,比如上面脚本的prefix为TOOLCHAIN/bin/arm-linux-androideabi-,那么ar工具的路径即为TOOLCHAIN/bin/arm-linux-androideabi-artarget-os:指定目标平台,因为ffmpeg可以在各平台上运行的,各平台上一些配置不太一样,所以需要指定的
另外编译脚本里边还有大量的enabledisable,这些都是configure脚本里的编译选项,比如说--enable-shared意思就是编译动态库,所以上面的脚本最终会生成so文件,而不会生成a文件。
这些编译选项都可以使用configure--help,可以查询到,大家可以试试
不管是这些enable编译选项,还是像CC一类的选项,都是在配置configure脚本,通过文本方式打开configure文件,可以看到:
--cc=CCuseCcompilerCC[$cc_default]
--target-os=OScompilertargetsOS[$target_os]
--enable-sharedbuildsharedlibraries[no]
运行编译脚本之后,如果编译成功了就会看到相关so库了,so库在lib文件夹中
3、FFmpeg集成
首先看cmakelist怎么写:
#设置最小使用版本
cmake_minimum_required(VERSION3.18.1)
project(demo)
include_directories(include)
#添加本地so库native-lib:这个是声明引用so库的名称SHARED:表示共享so库文件
#构建so库的源文件
add_library(
demo
SHARED
native-lib.cpp
set(SO_DIR${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI})
#使用系统ndk提供的库,如log库
#log-lib这个指定的是在NDK库中每个类型的库会存放一个特定的位置,而log库存放
#在log-lib中
#log指定使用log库
find_library(
log-lib
message(c_CMAKE_SOURCE_DIR:${CMAKE_SOURCE_DIR})
#加载avcodec-57库
add_library(avcodec
SHARED
IMPORTED)
set_target_properties(avcodec
PROPERTIESIMPORTED_LOCATION
${SO_DIR}/libavcodec.so)
add_library(avutil
SHARED
IMPORTED)
set_target_properties(avutil
PROPERTIESIMPORTED_LOCATION
${SO_DIR}/libavutil