FFmpeg開發筆記(五十九)Linux編譯ijkplayer的Android平臺so庫

aqi00發表於2024-10-23
ijkplayer是一款由B站研發的移動端國產播放器,它基於FFmpeg3.4版本,同時相容Android和iOS兩大移動作業系統。ijkplayer的原始碼託管地址為https://github.com/bilibili/ijkplayer,截止2024年9月15日,ijkplayer獲得3.24萬星標數,以及0.81萬個分支數,而這還是ijkplayer停止更新6年之後的資料,可想而知當年的ijkplayer是多麼火爆。

不過正因為ijkplayer多年未更新,按照導包方式僅能在較老的平臺上編譯執行,比如ijkplayer支援的Android平臺僅限於API 9~23,支援的iOS平臺僅限於iOS 7.0~10.2.x。為了讓ijkplayer能夠在更新的開發環境上正常執行,需要先在Linux系統上交叉編譯ijkplayer在Android平臺上的so檔案,才能在App工程中匯入並呼叫so庫。下面介紹如何在Linux編譯ijkplayer的so庫。

一、準備Linux編譯環境

首先在Linux系統執行下面命令安裝編譯工具。

yum install git make yasm

接著執行下面命令臨時調整tmp分割槽大小,確保系統的臨時空間充足,避免解壓大檔案失敗。

mount -o remount,size=2G /tmp

二、安裝Android的SDK和NDK

依次執行下列命令下載並安裝Android的SDK,注意不要用太高版本的SDK,因為ijkplayer沒有適配高版本的SDK。

mkdir -p /usr/local/src_ijkplayer
cd /usr/local/src_ijkplayer
curl -O https://dl.google.com/android/repository/sdk-tools-linux-4333796.zip
unzip sdk-tools-linux-4333796.zip
mkdir sdk
mv tools sdk/cmd_tools
cd sdk/cmd_tools/bin
./sdkmanager "build-tools;28.0.3" "platforms;android-28"

依次執行下列命令下載並安裝Android的NDK,注意不要用太高版本的NDK,因為ijkplayer沒有適配高版本的NDK,官方推薦採用r10e版本的NDK即可。

cd /usr/local/src_ijkplayer
curl -O https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip
unzip android-ndk-r10e-linux-x86_64.zip

執行下面的環境變數設定命令,分別設定SDK的環境變數ANDROID_SDK,以及NDK的環境變數ANDROID_NDK。

export ANDROID_SDK=/usr/local/src_ijkplayer/sdk
export ANDROID_NDK=/usr/local/src_ijkplayer/android-ndk-r10e

三、下載並編譯ijkplayer

先執行以下命令下載ijkplayer的原始碼包。

cd /usr/local/src_ijkplayer
git clone https://github.com/Bilibili/ijkplayer.git

再執行以下命令檢查並初始化ijkplayer的Android編譯環境。

cd ijkplayer
./init-android-openssl.sh
./init-android.sh

然後依次執行下列命令,分別編譯ijkplayer需要的openssl庫和ffmpeg庫,以及ijkplayer的so庫。之所以在三個指令碼後面新增“ arm64”,是為了只編譯適配arm64指令的so檔案。

cd android/contrib
./compile-openssl.sh arm64
./compile-ffmpeg.sh arm64
cd ../
./compile-ijk.sh arm64

一切順利的話,即可在ijkplayer/android/ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a目錄下看到編譯好的三個so庫:libijkffmpeg.so、libijkplayer.so、libijksdl.so。把包含三個so檔案在內的整個libs目錄複製到App工程的libs目錄,即可完整ijkplayer的so庫匯入工作。

更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短影片上線》一書。

相關文章