linux上编译ffmpeg"/>
在linux上编译ffmpeg
新建一个build_android.sh文件,内容如下:
#!/bin/bash
NDK=/home/xujuan/java/android-ndk-r13b
SYSROOT=$NDK/platforms/android-9/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
TOOLCHAIN=$PREBUILT/linux-x86_64
LIBX=/home/xujuan/java/x264-snapshot-20170214-2245/build
function build_one
{
./configure \
--prefix=$PREFIX \
--target-os=linux \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-I$LIBX/include" \
--extra-ldflags="-L$LIBX/lib" \
--cc=$TOOLCHAIN/bin/arm-linux-androideabi-gcc \
--nm=$TOOLCHAIN/bin/arm-linux-androideabi-nm \
--disable-shared \
--enable-runtime-cpudetect \
--enable-gpl \
--enable-libx264 \
--enable-decoder=h264 \
--enable-encoder=libx264 \
--enable-small \
--enable-cross-compile \
--disable-debug \
--enable-static \
--disable-doc \
--disable-asm \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-postproc \
--disable-avdevice \
--disable-symver \
--disable-stripping \
$ADDITIONAL_CONFIGURE_FLAG
sed -i '' 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i '' 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i '' 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i '' 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i '' 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i '' 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
sed -i '' 's/HAVE_CBRT 0/HAVE_CBRT 1/g' config.h
sed -i '' 's/HAVE_RINT 0/HAVE_RINT 1/g' config.h
}
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
PREFIX=./android/$CPU-vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one
make
make install
$TOOLCHAIN/bin/arm-linux-androideabi-ld \
-rpath-link=$SYSROOT/usr/lib \
-L$SYSROOT/usr/lib \
-L$PREFIX/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$PREFIX/libffmpeg.so \
$LIBX/lib/libx264.a \
libavcodec/libavcodec.a \
libavfilter/libavfilter.a \
libswresample/libswresample.a \
libavformat/libavformat.a \
libavutil/libavutil.a \
libswscale/libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a \
cd ..
运行chmod +x build_android.sh再运行./build_android.sh
其中:
--extra-cflags="-I$LIBX/include" \
--extra-ldflags="-L$LIBX/lib" \
和
--enable-libx264 \
--enable-decoder=h264 \
--enable-encoder=libx264 \
还有
$LIBX/lib/libx264.a \
是编译libx264是配置的。
上面代码是将所有的.a打成一个.so文件的作用。
ffmpeg是不带libx264编码的,需要额外下载源码编译,编译过程如下。
新建一个build_android.sh文件,内容如下
#!/bin/bash
NDK=/home/xujuan/java/android-ndk-r13b
SYSROOT=$NDK/platforms/android-9/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
TOOLCHAIN=$PREBUILT/linux-x86_64
./configure \
--prefix=./build \
--enable-static \
--enable-pic \
--extra-cflags="-march=armv7-a -mfloat-abi=softfp -mfpu=neon " \
--host=arm-linux \
--cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- \
--sysroot=$SYSROOT
cd ..
运行./build_android.sh然后运行make,再运行make install。
更多推荐
在linux上编译ffmpeg
发布评论