交叉编译ffmpeg:aac x264 x265

交叉编译AAC:

1.下载aac源码

wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master
tar xzvf fdk-aac.tar.gz

2.运行 autogen.sh生成configure文件

如果此时出现错误:如

Can't exec "libtoolize": No such file or directory at /usr/bin/autoreconf line 190.

则在ubuntu下安装libtool.deb或者更新用命令:apt-get install libtool

3.执行configure生成makefile文件

3.make

4.make install

交叉编译x265

1.下载源码

sudo git clone git://git.videolan.org/x264

2.运行configure生成makefile

sudo ./configure --prefix=/my/DM3730/x264 --enable-static --host=arm-none-linux-gnueabi --cross-prefix=arm-none-linux-gnueabi- --disable-asm

3.make

4.make install

交叉编译x265

1.下载源码

Index of /pub/videolan/x265/
我用的是1.9版本

注意:

其中x265.h中一个结构体的实现完全是C++风格,结构体中含有函数,所以这样的话ffmpeg是编译不通过的,但是这个版本有一个好处是专门有一个

arm-linux交叉编译目录,里面创建了一个toolchain,编译很方便

本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓ 

2.手动创建一个toolchain

进入build目录,创建一个arm-linux子目录,进入arm-linux目录,并分别创建 make-Makefiles.bash和 toolchain.cmake两个文件

在make-Makefiles.bash中写入:

#!/bin/bash
# Run this from within a bash shell

cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake -G "Unix Makefiles" ../../source && ccmake ../../source

在toolchain.cmake中写入

# CMake toolchain file for cross compiling x265 for ARM arch
set(CROSS_COMPILE_ARM 1)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR armv6l)
# specify the cross compiler
set(CMAKE_C_COMPILER arm-none-linux-gnueabi-gcc)
set(CMAKE_CXX_COMPILER arm-none-linux-gnueabi-g++)
# specify the target environment
SET(CMAKE_FIND_ROOT_PATH  /home/kamui/work/toolchain/toolchain/CodeSourcery/Sourcery_G++_Lite/bin)

chmod 777    make-Makefiles.bash

3. sudo sh ./make-Makefiles.bash

注意:x265的编译使用的是cmake,对cmake的版本要求较高,尽量用最新源码自己编译一个cmake

运行这步之后,会弹出一个目录选择框,把 CMAKE_INSTALL_PREFIX指向你需要安装的目录,注意这个PREFIX在toolchain中设置好像没生效,所以在这里在选择下,设置完后,按c,然后按g继续

6.sudo make

在编译的过程中如果如下报错:
1.如果此时在编译cli时报错final link failed: Nonrepresentable section on output,那么修改toolchan,添加set(CMAKE_EXE_LINKER_FLAGS "-fpic -shared")
然后重新从步骤3开始执行
2.如果报uses VFP register arguments类型的错误,说明是交叉编译浮点类型的问题,浮点编译类型在交叉编译中很容易遇到,在我这运行make-Makefiles.bash后static,share,cli的连接类型都是hard,
编译报错,需要改为soft,但是在cmake的参数中我试了Flags设置浮点类型的地方并没有生效,所以只能手动去改makefile文件,执行完make-Makefiles.bash后会生成好几个makefile文件,每个makefile文件中的编译连接选项都在flags.make的文件中:
encoder/CMakeFiles/encoder.dir/flags.make     
common/CMakeFiles/common.dir/flags.make   
CMakeFiles/cli.dir/flags.make    
CMakeFiles/x265-shared.dir/flags.make   
CMakeFiles/x265-static.dir/flags.make 
分别把这五个文件中的“-mfloat-abi=hard”改为“-mfloat-abi=soft”或“-mfloat-abi=softfp”
改完之后再指定步骤6进行make,这时应该就OK了

7.sudo make install

交叉编译ffmpeg

1.下载源码

git clone git://source.ffmpeg.org/ffmpeg.git

2.pkg-config

把/usr/bin/pkg-config复制到交叉编译环境所在目录中,与arm-none-linux-gnueabi-gcc在同一个目录,并改名为arm-none-linux-gnueabi-pkg-config,这么做的原因是ffmpeg在configure的时候,一定需要找到x265的x265.pc文件,而x264的没有的话,通过指定lib目录和头文件就可以了。

2.运行configure生成makefile

sudo ./configure --prefix=/my/DM3730/ffmpeg --enable-cross-compile --cross-prefix=arm-none-linux-gnueabi- --arch=armel --target-os=linux --enable-gpl --enable-nonfree --extra-cflags="-I/my/DM3730/fdkaac/include -I/my/DM3730/x264/include -I/my/DM3730/x265/include" --extra-ldflags="-L/my/DM3730/fdkaac/lib -L/my/DM3730/x264/lib -L/my/DM3730/x265/lib" --enable-libfdk-aac --enable-libx264 --enable-libx265 --pkg-config-flags=--static --extra-libs="-ldl -fpic -shared" --enable-shared --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-ffserver<span style="background-color: inherit; line-height: 1.5;"></span>

此时如果报“x265 not found using pkg-config ”错误,那么检查/usr/local/lib/pkgconfig/x265.pc,如果这个文件不存在那么把你编译x265时所指定的目录中拷贝过来

configure成功如下:

3.sudo make

4.sudo make install

原文链接:交叉编译ffmpeg:aac x264 x265 - 资料 - 我爱音视频网 - 构建全国最权威的音视频技术交流分享论坛

本文福利, C++音视频学习资料包、技术视频,内容包括(音视频开发,面试题,FFmpeg webRTC rtmp hls rtsp ffplay srs↓↓↓↓↓↓见下面↓↓文章底部↓↓ 

猜你喜欢

转载自blog.csdn.net/m0_60259116/article/details/125853509