Mac OS如何编译Android ffmpeg库

3 阅读1分钟

ffmpeg-android-maker 轻量、模块化,且非常容易针对 NDK 27+ 和 Android 15 (16KB Page Size) 进行深度定制。

1、编译前环境准备

安装必要依赖:


brew install automake autoconf libtool pkg-config cmake ninja yasm nasm

确认ndk路径:

xxx/Android/sdk/ndk/27.0.12077973

2、下载并配置脚本


git clone https://github.com/Javernaut/ffmpeg-android-maker.git

cd ffmpeg-android-maker

export ANDROID_NDK_HOME=xxx/Android/sdk/ndk/27.0.12077973

3、Android 15以上 设备强制要求适配 16KB 内存页

 指定了使用ndk27好像生成so已经适配16KB 内存页(待确认)。

否则找到 scripts 目录下的 ffmpeg/build.sh,在链接参数中添加

-Wl,-z,max-page-size=16384

或者直接在执行脚本前通过环境变量注入:


export LDFLAGS=“-Wl,-z,max-page-size=16384"

4、执行编译命令


./ffmpeg-android-maker.sh  \

  --target-abis=arm64-v8a,armeabi-v7a \

  --enable-x264 \

  --enable-mediacodec \

  —android-api-level=24

5、获取输出文件

编译完成后,所有的 .so 文件和头文件都会出现在: build/

6、验证 16KB 适配是否成功

xxx/Android/sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-readelf -l xxx/app/build/intermediates/merged_native_libs/debug/mergeDebugNativeLibs/out/lib/arm64-v8a/libavcodec.so | grep LOAD

所有LOAD段的Align值都是 0x4000 (16384字节 = 16KB), 这说明:已正确对齐:SO文件已经按照16KB页面大小进行对齐.

7、使用

加载顺序请遵循依赖链(从底层到高层)


System.loadLibrary("avutil") 

System.loadLibrary("swresample") System.loadLibrary("swscale") 

System.loadLibrary(“avcodec")

System.loadLibrary(“avformat")

System.loadLibrary("avfilter") 

System.loadLibrary(“avdevice”)

8、模拟推流到android设备

ffmpeg -re -i xxx.mp4 -vcodec libx264 -preset ultrafast -tune zerolatency -g 25 -b:v 2000k -maxrate 2500k -bufsize 4000k -x264-params "repeat-headers=1:keyint=25" -f mpegts "udp://android设备IP:5000?pkt_size=1316"