音视频之一FFmpeg交叉编译

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、下载ffmpeg源码

FFmpeg官网下载地址
下载最新的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编译

猜你喜欢

转载自blog.csdn.net/dirksmaller/article/details/108727872