Skip to content

Commit 832cbe7

Browse files
committed
add sh script
0 parents  commit 832cbe7

File tree

1 file changed

+169
-0
lines changed

1 file changed

+169
-0
lines changed

build_ffmpeg.sh

Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
#!/bin/bash
2+
3+
# Set NDK path
4+
ANDROID_NDK_HOME="/opt/android-ndk"
5+
6+
# Update FFmpeg version
7+
FFMPEG_VERSION="7.1"
8+
9+
# Use current directory
10+
WORK_DIR=$(pwd)
11+
echo "Working directory: $WORK_DIR"
12+
echo "Build started at: 2025-03-28 11:45:31 by husen-hn"
13+
echo "FFmpeg version: $FFMPEG_VERSION"
14+
15+
# Clean old build if exists
16+
if [ -d "ffmpeg-${FFMPEG_VERSION}" ]; then
17+
echo "Cleaning old FFmpeg build directory..."
18+
rm -rf "ffmpeg-${FFMPEG_VERSION}"
19+
fi
20+
21+
# Extract FFmpeg
22+
echo "Extracting FFmpeg..."
23+
if [ -f "ffmpeg-${FFMPEG_VERSION}.tar.bz2" ]; then
24+
tar xjf "ffmpeg-${FFMPEG_VERSION}.tar.bz2" || {
25+
echo "Failed to extract FFmpeg"
26+
exit 1
27+
}
28+
else
29+
echo "Error: ffmpeg-${FFMPEG_VERSION}.tar.bz2 not found!"
30+
echo "Please download FFmpeg 7.1 from:"
31+
echo "https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2"
32+
echo ""
33+
echo "You can download it using:"
34+
echo "wget https://ffmpeg.org/releases/ffmpeg-7.1.tar.bz2"
35+
exit 1
36+
fi
37+
38+
cd "ffmpeg-${FFMPEG_VERSION}"
39+
40+
# Verify NDK path
41+
echo "Checking NDK path: $ANDROID_NDK_HOME"
42+
if [ ! -d "$ANDROID_NDK_HOME" ]; then
43+
echo "Error: NDK path not found: $ANDROID_NDK_HOME"
44+
exit 1
45+
fi
46+
47+
TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64
48+
49+
if [ ! -d "$TOOLCHAIN" ]; then
50+
echo "Error: Toolchain not found: $TOOLCHAIN"
51+
exit 1
52+
fi
53+
54+
function build_ffmpeg
55+
{
56+
ABI=$1
57+
ANDROID_API=21
58+
59+
echo "Building FFmpeg for $ABI"
60+
61+
case ${ABI} in
62+
armeabi-v7a)
63+
ARCH=arm
64+
CPU=armv7-a
65+
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
66+
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi${ANDROID_API}-clang
67+
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi${ANDROID_API}-clang++
68+
;;
69+
arm64-v8a)
70+
ARCH=aarch64
71+
CPU=armv8-a
72+
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
73+
CC=$TOOLCHAIN/bin/aarch64-linux-android${ANDROID_API}-clang
74+
CXX=$TOOLCHAIN/bin/aarch64-linux-android${ANDROID_API}-clang++
75+
;;
76+
x86_64)
77+
ARCH=x86_64
78+
CPU=x86-64
79+
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
80+
CC=$TOOLCHAIN/bin/x86_64-linux-android${ANDROID_API}-clang
81+
CXX=$TOOLCHAIN/bin/x86_64-linux-android${ANDROID_API}-clang++
82+
;;
83+
esac
84+
85+
PREFIX=$WORK_DIR/android/$ABI
86+
mkdir -p $PREFIX
87+
88+
echo "Configuring FFmpeg for $ABI"
89+
./configure \
90+
--prefix=$PREFIX \
91+
--enable-shared \
92+
--disable-static \
93+
--disable-doc \
94+
--disable-programs \
95+
--disable-everything \
96+
--disable-vulkan \
97+
--disable-ffmpeg \
98+
--disable-ffplay \
99+
--disable-ffprobe \
100+
--disable-avdevice \
101+
--disable-devices \
102+
--disable-hwaccels \
103+
--disable-dxva2 \
104+
--disable-vaapi \
105+
--disable-vdpau \
106+
--enable-protocol=file \
107+
--enable-decoder=h264,aac,mp3 \
108+
--enable-encoder=libx264,aac \
109+
--enable-parser=h264,aac \
110+
--enable-demuxer=mov,mp4,matroska \
111+
--enable-muxer=mp4,matroska \
112+
--enable-gpl \
113+
--enable-pic \
114+
--cross-prefix=$CROSS_PREFIX \
115+
--target-os=android \
116+
--arch=$ARCH \
117+
--cpu=$CPU \
118+
--cc=$CC \
119+
--cxx=$CXX \
120+
--enable-cross-compile \
121+
--sysroot=$TOOLCHAIN/sysroot \
122+
--extra-cflags="-Os -fpic" \
123+
--extra-ldflags="" || {
124+
echo "Configure failed for $ABI"
125+
return 1
126+
}
127+
128+
echo "Building FFmpeg for $ABI"
129+
make clean
130+
make -j$(nproc) || {
131+
echo "Make failed for $ABI"
132+
return 1
133+
}
134+
make install || {
135+
echo "Make install failed for $ABI"
136+
return 1
137+
}
138+
echo "Successfully built FFmpeg for $ABI"
139+
}
140+
141+
# Build only for specified architectures
142+
for ABI in armeabi-v7a arm64-v8a x86_64
143+
do
144+
echo "Starting build for $ABI..."
145+
build_ffmpeg $ABI
146+
if [ $? -ne 0 ]; then
147+
echo "Build failed for $ABI"
148+
exit 1
149+
fi
150+
done
151+
152+
# Copy .so files to the project
153+
PROJECT_LIBS="$WORK_DIR/android/project_libs"
154+
mkdir -p $PROJECT_LIBS
155+
156+
# Copy only for specified architectures
157+
for ABI in armeabi-v7a arm64-v8a x86_64
158+
do
159+
ABI_LIBS="$PROJECT_LIBS/$ABI"
160+
mkdir -p $ABI_LIBS
161+
cp $WORK_DIR/android/$ABI/lib/*.so $ABI_LIBS/ || {
162+
echo "Failed to copy .so files for $ABI"
163+
exit 1
164+
}
165+
done
166+
167+
echo "Build completed! .so files are in $PROJECT_LIBS"
168+
echo "Built architectures: armeabi-v7a arm64-v8a x86_64"
169+
echo "FFmpeg version: $FFMPEG_VERSION"

0 commit comments

Comments
 (0)