FFmpeg開發筆記(十六)Linux交叉編譯Android的OpenSSL庫

aqi00發表於2024-04-21
《FFmpeg開發實戰:從零基礎到短影片上線》一書的例程主要測試本地的音影片檔案,當然為了安全起見,很多網路影片都採用了https地址。FFmpeg若要訪問https影片,就必須整合第三方的openssl庫,但編譯FFmpeg時卻預設關閉了openssl。為了讓App能夠播放採用https的線上影片,需要編譯安裝並啟用openssl。

在Linux伺服器交叉編譯Android的so庫之時,給FFmpeg整合openssl的詳細步驟說明如下:

1、交叉編譯openssl

openssl的原始碼託管地址為https://github.com/openssl/openssl,各版本openssl的下載頁面是https://github.com/openssl/openssl/releases/。比如2023年11月釋出的openssl-3.2.0,可從下面連結下載該版本的openssl原始碼包:

https://github.com/openssl/openssl/releases/download/openssl-3.2.0/openssl-3.2.0.tar.gz

把openssl的原始碼包上傳到Linux伺服器,解壓並進入原始碼目錄,也就是執行下列命令。

tar zxvf openssl-3.2.0.tar.gz
cd openssl-3.2.0

確認ndk已經放到了伺服器上,接著建立編譯指令碼build_openssl.sh,填入下面的指令碼內容(注意android-arm64表示編譯64位的so庫,no-shared表示只編譯靜態庫不編譯動態庫):

#!/bin/bash

NDK_HOME=/usr/local/src/android-ndk-r21e
SYSTEM=linux-x86_64
HOST=aarch64-linux-android
API=24

export PATH=$NDK_HOME/toolchains/llvm/prebuilt/$SYSTEM/bin:$NDK_HOME/toolchains/$HOST-4.9/prebuilt/$SYSTEM/bin:$PATH
export ANDROID_NDK_ROOT=$NDK_HOME

echo "config for openssl"
./Configure android-arm64 no-shared --prefix=/usr/local/app_openssl -D__ANDROID_API__=$API
echo "config for openssl completed"

make -j4
make install

儲存並退出build_openssl.sh,執行以下命令編譯和安裝openssl。

chmod +x build_openssl.sh
./build_openssl.sh

2、載入openssl的環境變數

第一步把openssl安裝在/usr/local/app_openssl,還要把openssl的pkgconfig路徑載入到環境變數PKG_CONFIG_PATH中。
Linux系統的profile檔案位於使用者初始目錄的.bash_profile。執行以下命令編輯當前使用者的profile檔案:

cd
vi .bash_profile

往.bash_profile的檔案末尾新增下面一行:

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

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

source .bash_profile

然後執行下面的環境變數檢視命令,確保openssl的環境變數已經成功載入。

env | grep PKG

3、重新編譯FFmpeg啟用openssl

開啟《FFmpeg開發實戰:從零基礎到短影片上線》隨書原始碼的chapter12/config_ffmpeg_full.sh,將該檔案另存為config_ffmpeg_openssl.sh,並在檔案內部這行

  --enable-libx264 \

的下面增加如下一行配置

  --enable-openssl \

接著把config_ffmpeg_openssl.sh上傳到伺服器的FFmpeg原始碼目錄,執行下面命令賦予可執行許可權。

chmod +x config_ffmpeg_openssl.sh

然後執行下列命令配置、編譯和安裝FFmpeg

./config_ffmpeg_openssl.sh
make clean
make -j4
make install

4、把so檔案匯入App工程

(1)把FFmpeg交叉編譯好的include目錄(位於/usr/local/app_ffmpeg/include)整個複製到App工程的src/main/cpp目錄下。
(2)在src\main目錄下建立jniLibs目錄,並在jniLibs下面建立子目錄arm64-v8a,把FFmpeg交叉編譯好的8個so檔案(位於/usr/local/app_ffmpeg/lib)全部複製到arm64-v8a目錄下。
(3)config_ffmpeg_openssl.sh裡面啟用的幾個第三方庫的so檔案也一塊複製到arm64-v8a目錄下,包括x264、x265、mp3lame、freetype等。
(4)開啟App工程的cpp程式碼,把待播放的線上影片地址改為https連結,重新編譯安裝App,即可正常播放https影片了。

相關文章