FFmpeg-4.3.2 嵌入式Linux交叉编译

FFmpeg-4.3.2 嵌入式Linux交叉编译

1 环境说明

      本文使用的FFmpeg版本为4.3.2,编译环境为虚拟机下的Ubuntu 20.04,硬件平台使用的ARM芯片为海思Hi3798,各依赖库的版本为官方推荐版本,后续FFmpeg版本迭代时依赖库版本也可能会发生变化,注意从官方网站及时查看对应版本。

2 安装FFmpeg依赖库

      以下操作均是在虚拟机Ubuntu20.04上进行的操作

2.1 创建文件夹

// ffmpeg_src文件夹为存放FFmpeg源码、FFmpeg各依赖库源码的文件夹,绝对路径为/root/Desktop/Repository/FFmpeg/ffmpeg_src
mkdir ffmpeg_src

// ffmpeg_arm是ffmpeg_sources中FFmpeg及各依赖库编译后的输出文件夹,绝对路径为/root/Desktop/Repository/FFmpeg/ffmpeg_arm
mkdir ffmpeg_arm      

2.2 编译fdk-aac

FFmpeg 4.3.2依赖的fdk-aac版本为2.0.1,官方地址

cd ffmpeg_src
// 命令行下载源码包,也可手动下载后把源码压缩包拷贝到ffmpeg_sources文件夹下
wget http://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz

tar -zxvf fdk-aac-2.0.1.tar.gz && mv fdk-aac-2.0.1 fdk-aac

cd fdk-aac

./configure --host=arm-none-linux-gnueabi CC=arm-histbv320-linux-gcc CXX=arm-histbv320-linux-g++ --prefix="/root/Desktop/Repository/FFmpeg/ffmpeg_arm" --enable-shared

make && make install
make distclean

上述./configure配置中:

  • host指定目标平台,交叉编译需要配置此项
  • CC、CXX指定使用的交叉编译工具,若是未将交叉编译工具路径添加到Ubuntu的环境变量中,则此处需要指定交叉编译工具的绝对路径,如CC=/home/SDK/tools/linux/toolchains/arm-histbv320-linux/bin/arm-histbv320-linux-gcc
  • prefix指定编译成功后的输出路径

2.3 编译x264

x264的版本为x264-20210211,官方地址

cd ffmpeg_src

wget http://anduin.linuxfromscratch.org/BLFS/x264/x264-20210211.tar.xz

tar -xvJf x264-20210211.tar.xz && mv x264-20210211 x264

./configure --host=arm-none-linux-gnueabi --cross-prefix=arm-histbv320-linux- --prefix="/root/Desktop/Repository/FFmpeg/ffmpeg_arm" --enable-shared --enable-pic --disable-asm

make && make install

make distclean

3 交叉编译FFmpeg

cd ffmpeg_src

wget http://ffmpeg.org/releases/ffmpeg-4.3.2.tar.xz

tar -xvJf ffmpeg-4.3.2.tar.xz && mv ffmpeg-4.3.2 ffmpeg

cd ffmpeg

./configure --enable-cross-compile --cross-prefix=arm-histbv320-linux- --arch=arm --target-os=linux --cc=arm-histbv320-linux-gcc --prefix="/root/Desktop/Repository/FFmpeg/ffmpeg_arm" --enable-shared --enable-pic --disable-static --enable-gpl --enable-nonfree --enable-pthreads --enable-ffmpeg --disable-ffplay --enable-swscale --disable-armv5te --disable-armv6 --disable-armv6t2 --disable-stripping --enable-libx264 --pkg-config-flags=--static --extra-cflags=-I/root/Desktop/Repository/FFmpeg/ffmpeg_arm/include --extra-ldflags=-L/root/Desktop/Repository/FFmpeg/ffmpeg_arm/lib

make && make install

上述./configure配置中:

  • 选项- -enable-cross-compile说明要使用交叉编译
  • 选项- -cross-prefix指定交叉编译器的前缀,注意arm-histbv320-linux-gcc等交叉编译工具路径要在PC的环境变量中
  • 选项- -extra-cflags和- -extra-ldflags指定需要用到的第三方库的路径,此处主要是指上文中编译好的fdk-aac和x264库的路径

      编译输出路径下的文件夹如下图所示,bin文件夹中为ffmpeg等可执行文件,include和lib为用到的头文件和动态库。
要是需要在自己的软件工程中使用ffmpeg的相关函数的话,可以将include和lib文件夹拷贝到自己的工程目录下,进行相应的配置就可以使用了
编译输出路径下的文件目录

说明

  • 在网上其他的博客中有人说需要在Ubuntu PC环境下进行如下准备:
sudo apt-get install autoconf automake build-essential libtool libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev pkg-config texinfo zlib1g-dev

sudo apt-get install libass-dev libfreetype6-dev libmp3lame-dev libtheora-dev libvorbis-dev libopus-dev libx264-dev yasm

      博主前后一共编译了3次FFmpeg,第一次是在Ubuntu14.04环境下编译PC环境下使用的FFmpeg,第2次是在Ubuntu14.04环境下编译ARM环境下使用的FFmpeg,第3次是在Ubuntu20.04环境下编译ARM下使用的FFmpeg,均编译成功。

      在Ubuntu 14.04的环境下进行编译时,安装了上述文件,编译成功,后来在Ubuntu 20.04环境下编译时并没有安装上述文件也可以编译成功,若是大家编译出现问题可以尝试安装上述文件。

  • 在其他人的博客中提到需要安装libvpx-1.9.0,博主在编译PC版本的FFmpeg时编译了libvpx,但是在编译ARM版本的FFmpeg时交叉编译libvpx总是出错,所以后来就没有交叉编译libvpx,在编译FFmpeg时也没有添加- -enable-libvpx选项

  • 在Ubuntu14.04环境下编译x264时报缺少nasm的错误,需要安装NASM-2.15.05

cd ffmpeg_src

wget http://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.xz

tar -xvJf nasm-2.15.05.tar.xz && mv nasm-2.15.05 nasm

cd nasm

./configure --prefix=/usr

make && make install

      博主是第一次写博客,有什么错误欢迎大家批评指正。后续应该会再写一篇在ARM Qt下使用FFmpeg的博客。

参考链接

https://www.cnblogs.com/jimodetiantang/p/9160183.html
https://blog.csdn.net/weixin_44498318/article/details/112987608

  • 2
    点赞
  • 6
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

qq_29994663

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值