ffmpeg.jpg

  最近在搞FFmpeg RTSP视频流解码, 关于这块交叉编译的资料比较少,填了很多坑,记录一下笔记。


吐槽

首先不得不吐槽一点,全志给的资料真的太少了,SDK做得也不行,想要份Linux-SDK 的API 文档,还要申请企业认证才能给,一堆认证流程,属实是烦。。。

吐槽归吐槽,工作还是要做的,要是早知道这么坑,就不会听信那销售员的推销采用A40了,用海思多好,SDK里自带了视频流的解码,开发文档全部开放,API接口一应俱全,辣鸡全志,难怪打不过海思。。。


交叉编译

环境配置

  • 宿主机环境: Windows7 64位 专业版
  • Ubuntu环境:Ubuntu 12.04
  • 内核版本: Linux 3.10
  • 交叉编译器:arm-linux-gnueabihf-
  • Ubuntu gcc/g++ : gcc version 4.8.4
  • cmake版本:cmake version 3.18.1

准备工作:在Ubuntu 下,/opt目录下新建三个文件夹,分别是:ffmpeg_source,ffmpeg_build,bin,使用以下命令:

以root身份登陆Ubuntu

cd /opt
mkdir ffmpeg_source ffmpeg_build bin

交叉编译fdk-aac

fdk-aac 是音频解码库,其能够对视频流中的音频数据进行解码,所以是必不可少的一环。

编译组件安装包我都放在/opt/ffmpeg_source目录下

进到/opt/ffmpeg_source目录:

下载fdk-aac,重命名、解压

cd /opt/ffmpeg_source
wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
mv fdk-aac.tar.gz fdk-aac-new.tar.gz
tar xvf fdk-aac-new.tar.gz

进入目录,生成Makefile

cd fdk-aac-new
./autogen.sh

aac_config_succ.png
(生成成功)

如果没有出错的话,就能进行下一步configure,出错了应该是环境缺少依赖

配置编译常数:

mkdir /opt/aac_bin
./configure --prefix=/opt/aac_bin --host=arm-linux-gnueabihf --disable-shared
  • --prefix:编译生成目录,/opt/aac_bin;
  • --host:交叉工具链,arm-linux-gnueabihf;

编译:

make -j4

这里根据自己电脑配置选择参与编译的核心数目,这个源码比较小,编译很快,直接使用make也行。

aac_make-j4.png
(编译成功)

安装

make install

aac_make_install.png
(安装成功)

安装成功后,会在/opt/aac_bin目录下生成三个文件夹,如下图所示,即表示交叉编译fdk-aac成功;

aac_cross_succ.png


交叉编译x264

下载x264源码,解压

git clone https://github.com/mstorsjo/fdk-aac.git
tar jxvf x264-master.tar.bz2

进入目录,配置编译常数,生成Makefile

cd x264-master
./configure --prefix=/opt/x264_bin --enable-static --host=arm-linux-gnueabihf --cross-prefix=arm-linux-gnueabihf- --disable-asm

x264_config_succ.png
(配置成功)

编译:

make -j4

x264_make_succ.png
(编译成功)

然后进行安装:

make install

x264_install_succ.png
(安装成功)

安装成功后,会在/opt/x264_bin目录下生成三个文件夹,如下图所示,即表示交叉编译x264成功:

x264_cross_succ.png


交叉编译x265

注意:x265 使用cmake进行编译,并且Ubuntu 12.04 默认的cmake版本比较低,直接编译会无法通过,一定要重新下载cmake源码,自行编译一个cmake,并加入到环境变量,这里是个坑...

我使用的cmake版本是:cmake version 3.18.1

下载x265 源码,我下载的是 3.0 版本,去下面链接下载:
http://ftp.videolan.org/pub/videolan/x265/

下载好了FTP传到Ubuntu /opt/ffmpeg_source 目录下

解压、进入目录:

tar xvf x265_3.0.tar.gz
cd /x265_3.0

注意:这个版本的源码,在/x265_3.0/build/arm-linux 目录下,已经有了make-Makefiles.bashtoolchain.cmake文件,不需要自己再去新建编译脚本,低版本的源码没有这两个文件,需要自己新建,非常麻烦 = =

进入编译目录,运行脚本生成Makefile:

cd /build/arm-linux
chmod 777 make-Makefiles.bash
./make-Makefiles.bash

x265_config_succ.png
(配置成功)

更改CMAKE_INSTALL_PREFIX 路径,即更改交叉编译生成的路径,默认是生成在/usr/local下的,不便于我们后面的编译,所以单独存放于/opt/x265_bin

vim cmake_install.cmake

# 更改 set(CMAKE_INSTALL_PREFIX "/usr/local") 为
set(CMAKE_INSTALL_PREFIX "/opt/x265_bin")

x265_config_arm-linux.png
(更改输出路径)

编译:

make -j4

x265_make_succ.png
(编译成功)

安装:

make install

x265_cross_succ.png

安装成功之后,在/opt/x265_bin目录下,会生成三个文件夹,如上图所示,即表示交叉编译x265成功



(未完待续...)

最后修改:2020 年 08 月 18 日
您的支持就是我持续更新的动力!