FFmpeg

FFmpeg源码的编译和裁剪,生成安卓使用的.so库

2019-10-31  本文已影响0人  ZebraWei

版权声明:本文为卫伟学习总结文章,转载请注明出处!
本文在Linux环境下编译ffmpeg源码:

FFmpeg 直接解压到工作目录下:

我们发现目录下已经有写好的 Makefile 编译文件了,那是不是可以直接编译运行呢?使用 make 命令出现如下错误:
Makefile:2: config.mak: No such file or directory
Makefile:67: /common.mak: No such file or directory
Makefile:114: /libavutil/Makefile: No such file or directory
Makefile:114: /library.mak: No such file or directory
Makefile:116: /doc/Makefile: No such file or directory
Makefile:206: /tests/Makefile: No such file or directory
make: *** No rule to make target '/tests/Makefile'.  Stop.
这些文件怎么来?在 configure 脚本文件里面,当然刚开始基本看不懂,后来查看红橙博客,只需要再写一个build,sh脚本来执行./configure脚本文件即可,至于需要传递哪些参数,怎么裁剪 so 动态库这里先不详细讲,大家可以用 来查看。

根据自身需求编译FFmpeg库文件脚本ffmpeg_build.sh内容:

#!/bin/bash
. /etc/profile
function build
{
echo "start build ffmpeg for $ARCH"
./configure --target-os=linux \
--prefix=$PREFIX --arch=$ARCH \
--disable-doc \
--enable-shared \
--disable-static \
--disable-yasm \
--disable-asm \
--disable-symver \
--enable-gpl \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--cross-prefix=$CROSS_COMPILE \
--enable-cross-compile \
--sysroot=$SYSROOT \
--enable-small \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
echo "build ffmpeg for $ARCH finished"
}

ARCH=arm
CPU=arm
PREFIX=$(pwd)/android/$ARCH
TOOLCHAIN=$NDK_PATH/android-toolchains/arm-19
CROSS_COMPILE=$TOOLCHAIN/bin/arm-linux-androideabi-
ADDI_CFLAGS="-marm"
SYSROOT=$TOOLCHAIN/sysroot
build

如果大家不出意外会得到以上文件,我们发现编译出来是 linux 的命名方式。只能在Linux平台下运行。如果想到android平台下运行,还需要用到NDK目录下make_standalone_toolchain.py交叉工具链,生成android平台的so库文件

ubuntu@VM-0-9-ubuntu:~/ffmpeg-3.3.9/android/arm/lib$ ls
libavcodec.so            libavformat.so            libswresample.so
libavcodec.so.57         libavformat.so.57         libswresample.so.2
libavcodec.so.57.89.100  libavformat.so.57.71.100  
libswresample.so.2.7.100
libavdevice.so           libavutil.so              libswscale.so
libavdevice.so.57        libavutil.so.55           libswscale.so.4
libavdevice.so.57.6.100  libavutil.so.55.58.100    libswscale.so.4.6.100
libavfilter.so           libpostproc.so            pkgconfig
libavfilter.so.6         libpostproc.so.54
libavfilter.so.6.82.100  libpostproc.so.54.5.100

用的ndk build/tools路径下的make-standalone-toolchain.py 脚本文件

 book@www.100ask.org:/lib/ndk/androanid-ndk-r20/build/tools$ sudo ./make_standalone_toolchain.py --arch arm --api 19 --install-dir /lib/ndk/android-ndk-r20/android-toolchains/android-19/arch-arm

我们还需要在 configure 中改一下生成文件名的格式:

# SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
# LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
# SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
# SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
替换成如下

添加congfigure和ffmpg_build.sh的执行权限:

chmod u+x ffmpeg_build.sh 
执行ffmpeg_build.sh脚本后生成如下图绿色的颜色的.so文件就可以在arm平台上运行啦。
上一篇下一篇

猜你喜欢

热点阅读