FFmpeg開發筆記(八)Linux交叉編譯Android的FFmpeg庫

aqi00發表於2024-03-24
《FFmpeg開發實戰:從零基礎到短影片上線》一書的“12.1.2 交叉編譯Android需要的so庫”介紹瞭如何在Windows環境交叉編譯Android所需FFmpeg的so庫,接下來介紹如何在Linux環境交叉編譯Android所需FFmpeg的so庫。

1、下載Linux版本的android-ndk-r21e

登入Linux伺服器(比如華為雲的尤拉系統),依次執行下面的命令。

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

2、上傳FFmpeg相關庫的原始碼

重新解壓FFmpeg相關庫的原始碼,包括FFmpeg、x264、freetype、lame等,並修改FFmpeg相關庫的sh檔案(包括config_x264.sh、config_freetype.sh、config_lame.sh、config_ffmpeg_full.sh,這幾個sh檔案見《FFmpeg開發實戰:從零基礎到短影片上線》隨書原始碼的chapter12目錄)。修改內容如下:
(1)把幾個sh檔案裡的下面這行

SYSTEM=windows-x86_64

改為下面這行,也就是把“windows”替換為“linux”

SYSTEM=linux-x86_64

(2)去掉幾個sh檔案裡的回車符
使用文字編輯軟體UltraEdit可以去掉回車符,去除方式有兩種,一種是把“^p”替換為“^n”;另一種是依次選擇選單:檔案→轉換→DOS轉UNIX,因為UNIX檔案格式不用回車符。
另外,記得給幾個sh檔案賦予可執行許可權,也就是執行下面命令:

chmod +x config_*.sh

3、編譯x264庫的原始碼

在編譯x264原始碼之前,要先修改x264的configure檔案。與在Windows環境交叉編譯相比,Linux系統在編譯x264前只要修改configure,不用改Makefile。
開啟x264-master目錄下的configure檔案,把下面這行(一共有一模一樣的兩行,兩行都要改,別漏了)

    echo "SONAME=libx264.so.$API" >> config.mak

改為下面這行:

    echo "SONAME=libx264.so" >> config.mak

儲存並退出configure檔案,再依次執行下面的編譯命令:

./config_x264.sh
make -j4
make install

4、編譯其他第三方庫的原始碼

FFmpeg用到的其他第三方庫包括freetype、lame等,這幾個庫的編譯命令如下(注意把xxx換成對應的庫名):

./config_xxx.sh
make -j4
make install

5、配置環境變數PKG_CONFIG_PATH

Windows的profile檔案位於msys安裝目錄下面的/etc/profile,而Linux的profile檔案位於使用者初始目錄的.bash_profile。往.bash_profile的檔案末尾新增下面兩行:

export PKG_CONFIG_PATH=/usr/local/app_x264/lib/pkgconfig:$PKG_CONFIG_PATH
export PKG_CONFIG_PATH=/usr/local/app_freetype/lib/pkgconfig:$PKG_CONFIG_PATH

儲存並退出.bash_profile之後,執行以下命令載入環境變數:

source .bash_profile

6、編譯FFmpeg庫的原始碼

進入FFmpeg的原始碼目錄,依次執行下面的配置、編譯和安裝命令:

./config_ffmpeg_full.sh
make -j4
make install

編譯完成後,即可在/usr/local/app_xxx/bin(xxx為每個庫的庫名)目錄下找到生成的so檔案,把這些so檔案複製到App工程的src\main\jniLibs\arm64-v8a目錄下,此後App工程的配置、編譯和執行說明同《FFmpeg開發實戰:從零基礎到短影片上線》的“12.1.3 App工程呼叫FFmpeg的so庫”。

相關文章