提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、下载ffmpeg源码
1.1 注意
我们可以在如上图中所示的地方,下载已经编译好的ffmpeg二进制文件,免去编译工作。
二、配置编译脚本
2.1 修改配置文件
解压下载的ffmpeg源码压缩文件, 进行解压缩操作,获得ffmpeg源码文件夹。在其子目录下存在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)'
修改为:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
2.2 编写shell 编译脚本
shell 脚本内容如下:
#!/bin/bash
#指定临时文件,用来缓存编译信息用的
export TMPDIR=/Users/zhangfengcheng/android/canjun/ffmpeg/tmp
ADDI_CFLAGS="-marm"
API=19
PLATFORM=arm-linux-androideabi
#指定CPU架构
CPU=armv7-a
# 设置NDK 路径
NDK=~/android/android-ndk-r17c
SYSROOT=$NDK/platforms/android-$API/arch-arm/
ISYSROOT=$NDK/sysroot
ASM=$ISYSROOT/usr/include/$PLATFORM
TOOLCHAIN=$NDK/toolchains/$PLATFORM-4.9/prebuilt/darwin-x86_64
# 编译产物输出路径
OUTPUT=/Users/zfc/android/canjun/ffmpeg/out
# 显式指定c语言编译器路径变量
CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
# 显式指定C++编译器路径变量
CXX=$TOOLCHAIN/bin/arm-linux-androideabi-g++
# 声明方法
function build
{
./configure \
--prefix=$OUTPUT \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=android \
--arch=arm \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-I$ASM -isysroot $ISYSROOT -Os -fpic -marm" \
--extra-ldflags="-marm" \
--cc=$CC \
--cxx=$CXX \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j8
make install
}
build
接下来,就是执行该脚本:
(假设脚本问价命名为:android_build.sh)
chmod 777 android_build.sh //赋予脚本执行权限,这里是最高权限
sudo ./android_build.sh //以root用户的权限执行该脚本
2.3 查看编译结果
在路径/Users/zfc/android/canjun/ffmpeg/out 下:
三、总结
当我们想要在Android、iOS上自己定制化一个音视频工具,ffmpeg是一个非常好的选择。在使用ffmpeg库时,在PC针对移动平台进行交叉ffmpeg则是这开头的第一步。对于App开发者来说,稍有不慎,交叉编译可能会阻碍你的步伐。于是,我也记录一下编译时遇到的问题,供各位道友参考。
3.1 No such file or directory
解决办法:
执行./configure --disable-x86asm 生成config.mak文件
3.2 C compiler test failed
根据 ffbuild/config.log的日志发现,指定的编译器不存在。
3.3 参考链接
问题解决,参考链接如下:
Clang编译FFmpeg常见问题
移植FFMpeg到Android:Ubuntu(Linux) FFMpeg编译