1 前言
环境:Win10主机+VMware15.5+Ubuntu18.04.1
嵌入式主机:armv71 GNU/Linux
交叉编译工具:arm-linux-gnueabihf-gcc
登录用户:root
目标:交叉编译ffmpeg5.0,同时支持x264和rtmp,可在armv71主机上使用ffmpeg拉取前端摄像机的rtsp流,转成rtmp流,上推给rtmp服务器。
2 准备工作
2.1 编译安装openssl
1、代码下载
/source/old/1.0.2/index.htmlhttps://www.openssl.org/source/old/1.0.2/
2、解压缩
tar -xzf openssl-1.0.2h.tar.gz
cd openssl-1.0.2h
3、配置交叉编译链
在编译之前,准备好交叉工具链,初始化编译工具交叉变量 CROSS_COMPILE
推荐用绝对路径:
export CROSS_COMPILE=/opt/arm/usr/bin/arm-linux-gnueabihf-
export CC=${CROSS_COMPILE}gcc
./config no-asm -shared --prefix=/usr/local/ssl --cross-compile-prefix= CROSS_COMPILE
no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程
shared: 生成动态连接库
no-async: 交叉编译工具链没有提供GNU C的ucontext库
–prefix=: 安装路径
–cross-compile-prefix=: 交叉编译工具
4、修改Makefile
配置完成后:手动修改生成的Makefile,并且找到有-m64的地方,全删之(只删除-m64这个关键字)(共2处)
5、编译安装
make
make install
2.2 编译安装zlib
1、代码下载
2、解压缩
tar -vxf zlib-1.2.11.tar.xz
cd zlib-1.2.11
3、配置编译
检查交叉编译工具链
CC=/opt/arm/usr/bin/arm-linux-gnueabihf-gcc
./configure --prefix=/usr/local/zlib
make
make install
2.3 编译安装librtmp
1、代码下载
git clone git://git.ffmpeg.org/rtmpdump
仅使用其中的librtmp即可
2、修改Makefile
指定安装路径
将其中的
CC=$(CROSS_COMPILE)gcc
LD=$(CROSS_COMPILE)ld
AR=$(CROSS_COMPILE)ar
修改成自己的交叉编译链
指定openssl路径
3、编译安装
make
make install
2.4 编译安装x264
1、代码下载
Branches · VideoLAN / x264 · GitLabx264, the best and fastest H.264 encoderhttps://code.videolan.org/videolan/x264/-/branchesx264-master.tar.bz2
解压缩
tar -jxvf x264-master.tar.bz2
2、编译配置
./configure --enable-static --enable-shared --disable-asm --prefix=/usr/local/x264 --host=arm-linux
3、修改config.mak文件
下边截图是修改后的
4、编译安装
make
make install
3 编译ffmpeg
3.1 下载代码
从这里下载,所有版本都有,根据自己需要选择合适的版本
Index of /releaseshttp://ffmpeg.org/releases/我选择的是ffmpeg-5.0.tar.bz2
3.2 解压
tar -jxvf ffmpeg-5.0.tar.bz2
3.3 配置
先修改configure文件librtmp和openssl 的lib路径,否则链接时,会出现找不到librtmp或openssl库函数的错误
接下来
./configure --cross-prefix=$CROSS_COMPILE --enable-cross-compile --target-os=linux --cc="$CC" --arch=arm --prefix=/usr/local/arm_ffmpeg --disable-x86asm --enable-shared --enable-static --enable-pthreads --enable-network --enable-protocol=tcp --enable-demuxer=rtsp --enable-decoder=h264 --enable-parsers --enable-decoder=h264 --enable-decoder=aac --enable-muxer=mp4 --enable-protocol=file --enable-gpl --enable-ffmpeg --enable-librtmp --enable-libx264 --enable-openssl --enable-nonfree --extra-cflags="-I/usr/local/x264/include -I/usr/local/librtmp/include -I/usr/local/ssl/include" --extra-ldflags="-L/usr/local/librtmp/lib -L/usr/local/x264/lib -L/usr/local/ssl/lib" --extra-libs=-"ldl -fpic"
来个列表式的,方便查看
./configure \
--cross-prefix=$CROSS_COMPILE \ #编译工具路径
--enable-cross-compile \ #使能交叉编译
--target-os=linux \
--cc="$CC" \ #交叉编译工具
--arch=arm \ #选中架构arm
--prefix=/usr/local/arm_ffmpeg \ #安装目录
--disable-x86asm \ #关闭x86asm
--enable-shared \ #生成动态库
--enable-static \ #生成静态库
--enable-pthreads \ #使能多线程,默认关闭
--enable-network \
--enable-protocol=tcp \
--enable-demuxer=rtsp \
--enable-decoder=h264 \
--enable-parsers \
--enable-decoder=h264 \
--enable-decoder=aac \
--enable-muxer=mp4 \
--enable-protocol=file \
--enable-gpl \
--enable-ffmpeg \
--enable-librtmp \
--enable-libx264 \
--enable-openssl \
--enable-nonfree \
--extra-cflags="-I/usr/local/x264/include -I/usr/local/librtmp/include -I/usr/local/ssl/include" \ #指定x264,librtmp,openssl的include路径
--extra-ldflags="-L/usr/local/librtmp/lib -L/usr/local/x264/lib -L/usr/local/ssl/lib" \ #指定x264,librtmp,openssl的lib路径
--extra-libs=-"ldl -fpic"
Configure完之后,会出现下列提示
不用管,下步直接make
3.4 编译安装
make –j8
make install
4 参考
编译过程中,参考了下边网友的文章,在此感谢。