交叉编译ffmpeg:aac x264 x265

这几天一直在折腾在ubuntu下交叉编译arm平台的ffmpeg,作为一个标准的windows使用者来说,在linux下折腾真是费劲,现在把编译过程记录下,主要是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文件
./configure --prefix=/my/DM3730/fdkaac --host=arm-none-linux-gnueabi --disable-shared
4.make
5.sudo make install 
此时若是出栏ranlib找不到,那么sudo printdev看下环境变量是否配好如果没有,那么编辑/etc/sudoers文件配置环境变量,
再次执行sudo make install

交叉编译x264
1.下载mp4源码
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.下载源码
http://ftp.videolan.org/pub/videolan/x265/
我用的是1.9版本
注意:ffmpeg官网编译说明文档中给的x265的地址是:hg clone https://bitbucket.org/multicoreware/x265,但是这个源的代码有问题,
其中x265.h中一个结构体的实现完全是C++风格,结构体中含有函数,所以这样的话ffmpeg是编译不通过的,但是这个版本有一个好处是专门有一个
arm-linux交叉编译目录,里面创建了一个toolchain,编译很方便
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
此时如果报“x265 not found using pkg-config ”错误,那么检查/usr/local/lib/pkgconfig/x265.pc,如果这个文件不存在那么把你编译x265时所指定的目录中拷贝过来
configure成功如下:
交叉编译ffmpeg:aac x264 x265_第1张图片

3.sudo make

4.sudo make install

你可能感兴趣的:(其他)