天天看點

交叉編譯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成功如下:

交叉編譯ffmpeg:aac x264 x265

3.sudo make

4.sudo make install

原文連結:交叉編譯ffmpeg:aac x264 x265 - 資料 - 我愛音視訊網 - 建構全國最權威的音視訊技術交流分享論壇

本文福利, C++音視訊學習資料包、技術視訊,内容包括(音視訊開發,面試題,FFmpeg ,webRTC ,rtmp ,hls ,rtsp ,ffplay ,srs)↓↓↓↓↓↓見下面↓↓文章底部↓↓ 

繼續閱讀