重新发布原因:因为NDK r19之后已弃用生成独立工具链,改用内置工具链,而之前脚本是基于NDK r18b编译的。参看NDK 修订历史记录。
每当谈及音视频编程,一定绕不开FFmpeg。FFmpeg没有提供Android的SDK供下载,好在它是跨平台的,可以用NDK交叉编译。
NDK交叉编译需要注意的是:在NDK r19之后独立工具链(已弃用),
用NDK默认安装的工具链替代。交叉编译时不再需要使用make_standalone_toolchain.py
脚本。随着Android 12的发布,NDK r23也发布了,工具链也有不少变化,下面内容基于NDK r23。
NDK默认安装的工具链路径:$NDK_HOME/toolchains/llvm/prebuilt/$HOST_TAG/bin/
$HOST_TAG参看下表:
NDK操作系统变体 |
主机标记 |
macOS |
darwin-x86_64 |
Linux |
linux-x86_64 |
32 位 Windows |
windows |
64 位 Windows |
windows-x86_64 |
shell脚本(基于NDK r23)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
#!/usr/bin/env bash
#git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg && \
CUR_DIR=$(cd $(dirname ${BASH_SOURCE[0]}); pwd )
OUT_DIR=${CUR_DIR}/ffmpeg_build
#生成工具链。 NDK r19 已弃用 https://developer.android.google.cn/ndk/guides/other_build_systems
#if [ -d ${TOOLCHAIN_PATH} ];
#then
# echo "Has toolchain !!"
# #rm -r ${TOOLCHAIN_PATH}
#else
# ${NDK_HOME}/build/tools/make_standalone_toolchain.py --arch arm64 --api 30 --install-dir ${TOOLCHAIN_PATH} --force -v
#fi
# 将独立工具链中的工具包添加到系统环境变量中
#export PATH=${TOOLCHAIN_PATH}/bin:$PATH
if [ -d ${OUT_DIR} ]; then
rm -r ${OUT_DIR}
fi
TOOLCHAIN_PREFIX="${NDK_HOME}/toolchains/llvm/prebuilt/darwin-x86_64/bin"
export CROSS_PREFIX=${TOOLCHAIN_PREFIX}/aarch64-linux-android31
export AR=${TOOLCHAIN_PREFIX}/llvm-ar
export NM=${TOOLCHAIN_PREFIX}/llvm-nm
export STRIP=${TOOLCHAIN_PREFIX}/llvm-strip
export RANLIB=${TOOLCHAIN_PREFIX}/llvm-ranlib
cd ffmpeg &&\
./configure \
--prefix=${OUT_DIR} \
--libdir=${OUT_DIR}/arm64-v8a \
--arch=aarch64 \
--cpu=armv8-a \
--arch=aarch64 \
--nm=${NM} \
--ar=${AR} \
--ranlib=${RANLIB} \
--strip=${STRIP} \
--cross-prefix=${CROSS_PREFIX}- \
--target-os=android \
--extra-ldexeflags=-pie \
--disable-static \
--enable-shared \
--disable-doc \
--disable-programs \
--disable-avdevice \
--disable-swscale \
--disable-postproc \
--disable-symver \
--disable-encoders \
--disable-decoders \
--enable-decoder=flac,ape,mp3 \
--disable-protocols\
--enable-protocol=file \
--disable-muxers \
--disable-demuxers \
--enable-demuxer=flac,ape,mp3 \
--enable-cross-compile \
--disable-indevs \
--disable-outdevs \
--enable-small \
--enable-jni\
&& \
make clean && \
make -j4 && \
make install
#./configure --list-decoders 查看支持的解码器
#./configure --list-protocols 查看支持的协议
|
其他
build-ffmpeg.sh
configure命令参数
Google的编译脚本