FFmpeg開發(fā)筆記(九)Linux交叉編譯Android的x265庫(kù)

《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》一書的“12.1.2 交叉編譯Android需要的so庫(kù)”介紹了如何在Windows環(huán)境交叉編譯Android所需FFmpeg的so庫(kù),前文又介紹了如何在Linux環(huán)境交叉編譯Android所需FFmpeg的so庫(kù),接下來(lái)介紹如何在Linux環(huán)境交叉編譯Android所需x265的so庫(kù)。

1、安裝cmake

執(zhí)行以下命令安裝cmake

yum install cmake git

2、下載Linux版本的android-ndk-r21e(如已下載則忽略)

登錄Linux服務(wù)器(比如華為云的歐拉系統(tǒng)),依次執(zhí)行下面的命令。

cd /usr/local/src

curl -O https://dl.google.com/android/repository/android-ndk-r21e-linux-x86_64.zip

unzip android-ndk-r21e-linux-x86_64.zip

3、上傳x265的源碼

從下面鏈接下載x265的源碼包

https://bitbucket.org/multicoreware/x265_git/downloads/x265_3.5.tar.gz

解壓x265源碼包,修改x265_3.5/build/aarch64-linux目錄下的crosscompile.cmake,把下面兩行

set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)

set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)

改為下面兩行

set(CMAKE_C_COMPILER aarch64-linux-android24-clang)

set(CMAKE_CXX_COMPILER aarch64-linux-android24-clang++)

4、配置x265的源碼

進(jìn)入x265_3.5下的build/aarch64-linux目錄,執(zhí)行以下命令配置x265:

export PATH=$PATH:/usr/local/src/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/bin

./make-Makefiles.bash

命令行彈出的選項(xiàng)界面中,注意下列三項(xiàng)修改:

(1)把CMAKE_INSTALL_PREFIX這項(xiàng)改為/usr/local/app_x265(按向下鍵定位到該項(xiàng),再按回車鍵,即可按照vi方式編輯路徑)

(2)把ENABLE_ASSEMBLY這項(xiàng)改為OFF(按向下鍵定位到該項(xiàng),再按回車鍵,即可把ON改為OFF)

(3)把ENABLE_CLI這項(xiàng)改為OFF(按向下鍵定位到該項(xiàng),再按回車鍵,即可把ON改為OFF)

接著按c鍵開始配置,再按e鍵退出配置,然后按g鍵開始生成。

5、修改x265的編譯規(guī)則

進(jìn)入x265_3.5源碼下的build/aarch64-linux/CMakeFiles/x265-shared.dir目錄,注意修改下面三個(gè)文件:

(1)修改該目錄的link.txt,把文件中的所有“l(fā)ibx265.so.199”替換為“l(fā)ibx265.so”。同時(shí)刪除文件末尾的“ -lpthread -lrt”。

(2)同目錄的relink.txt修改說(shuō)明同link.txt。

(3)修改同目錄下面的build.make,把該文件中的所有“l(fā)ibx265.so.199”替換為“l(fā)ibx265.so”,把所有的“l(fā)ibx265.so”替換為“l(fā)ibx265.so.199”。注意A和B互換名稱的時(shí)候,可以設(shè)定第三個(gè)名稱C,比如先把A替換為C,接著B替換為A,然后C替換為B。

6、編譯和安裝x265

進(jìn)入x265_3.5源碼下的build/aarch64-linux目錄,執(zhí)行以下命令編譯和安裝x265:

make

make install

7、調(diào)整x265的pc描述文件

修改/usr/local/app_x265/lib/pkgconfig下面的x265.pc,該文件的“Libs.private”選項(xiàng)里面去掉“-lrt”,也就是改成下面這行:

Libs.private: -lc++ -lm -lgcc -ldl -lgcc -ldl -ldl

8、添加PKG_CONFIG_PATH路徑

Linux的profile文件位于用戶初始目錄的.bash_profile。執(zhí)行以下命令編輯當(dāng)前用戶的profile文件:

cd

vi .bash_profile

往.bash_profile的文件末尾添加下面一行:

export PKG_CONFIG_PATH=/usr/local/app_x265/lib/pkgconfig:$PKG_CONFIG_PATH

保存并退出.bash_profile之后,執(zhí)行以下命令加載環(huán)境變量:

source .bash_profile

然后執(zhí)行下面的環(huán)境變量查看命令,確保x265的環(huán)境變量已經(jīng)成功加載。

env | grep PKG

9、重新編譯FFmpeg啟用x265

打開《FFmpeg開發(fā)實(shí)戰(zhàn):從零基礎(chǔ)到短視頻上線》隨書源碼的chapter12/config_ffmpeg_full.sh,將該文件另存為config_ffmpeg_x265.sh,并在文件內(nèi)部這行

? --enable-libx264 \

的下面增加如下一行配置

? --enable-libx265 \

接著把config_ffmpeg_x265.sh上傳到服務(wù)器的FFmpeg源碼目錄,執(zhí)行下面命令賦予可執(zhí)行權(quán)限。

chmod +x config_ffmpeg_x265.sh

然后運(yùn)行下列命令配置、編譯和安裝FFmpeg

./config_ffmpeg_x265.sh

make clean

make -j4

make install

10、把so文件導(dǎo)入App工程

(1)把FFmpeg交叉編譯好的include目錄(位于/usr/local/app_ffmpeg/include)整個(gè)復(fù)制到App工程的src/main/cpp目錄下。

(2)在src\main目錄下創(chuàng)建jniLibs目錄,并在jniLibs下面創(chuàng)建子目錄arm64-v8a,把FFmpeg交叉編譯好的8個(gè)so文件(位于/usr/local/app_ffmpeg/lib)全部復(fù)制到arm64-v8a目錄下。

(3)config_ffmpeg_x265.sh里面啟用的幾個(gè)第三方庫(kù)的so文件也一塊復(fù)制到arm64-v8a目錄下,包括x264、x265、mp3lame、freetype等。

(4)給App工程的build.gradle的android→defaultConfig→externalNativeBuild→cmake節(jié)點(diǎn)內(nèi)部增加下面配置。

? ? abiFilters "arm64-v8a"? ?

? ? arguments '-DANDROID_STL=c++_shared' // FFmpeg集成x265時(shí)需要

如果不加,App運(yùn)行時(shí)會(huì)報(bào)錯(cuò)“java.lang.UnsatisfiedLinkError: dlopen failed: library "libc++_shared.so" not found”。

(5)在Android Studio上編譯運(yùn)行App工程,觀察App是否正常運(yùn)行。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容