ijkplayer庫編譯
支持DASH、HTTPS
編譯環(huán)境
- Windows10 WSL--Ubuntu 20.04
- ndk-r10e
- Android studio 2.3.1
配置 Android SDK NDK環(huán)境變量
# add these lines to your ~/.bash_profile or ~/.profile
# export ANDROID_SDK=<your sdk path>
# export ANDROID_NDK=<your ndk path>
步驟
- 下載源碼
- 切換分支
- 配置config(dash + libxml2)
- 編譯libxml2(arm64 armv7a)
- 將libxml2編譯出來的放在android/contrib/下埋虹,與同級ffmpeg同理
- 將libxml2/lib/pkgconfig/libxml-2.0.pc文件第一行路徑改對(do-compile-ffmpeg.sh腳本中要使用)
- 修改do-compile-ffmpeg.sh腳本狼钮,添加PKG_CONFIG_PATH,針對/usr/lib/pkgconfig胚吁,編譯那個版本雕拼,需要將哪個版本對應的libxml-2.0.pc移動到/usr/lib/pkgconfig/下度帮,否則找不到
- $CC 配置 pkg-config=pkg-config
下載源碼
# 下載不動添加前綴 https://github.91chi.fun/https://github.com/Bilibili/ijkplayer.git
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8
配置config
# 刪除module.sh
cd config
rm -rf module.sh
# 重新配置config
ln -s module-lite.sh module.sh
在module-lite.sh底部加入
# 支持https
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl"
# 支持dash
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=dash"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-libxml2"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=webm_dash_manifest"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-muxer=webm_chunk"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=dash"
編譯libxml2
參考libxml2庫編譯扬霜,將libxml2庫編譯的文件輸出到 android/contrib路徑下定鸟,文件如下(部分省略):
build
ffmpeg-arm64
...
libxml2-arm64
bin
include
libxml2
libxml
lib
libxml2.so
libxml2.a
pkgconfig
libxml-2.0.pc
share
libxml2-armv7a
openssl-arm64
openssl-armv7a
修改libxml-2.0.pc文件
第一行prefix為你的libxml2庫的路徑,改成你當前ijkplayer工程libxml-arm64路徑(或者相應abi版本路徑著瓶,需要對應)
例如:
prefix=/home/von/workspace/ijkplayer/android/contrib/libxml2-arm64
修改do-compile-ffmpeg.sh
- 配置libxml
# FF_ARCH判斷增加
FF_BUILD_NAME_LIBXML=libxml-armv7a
FF_BUILD_NAME_LIBXML=libxml-arm64
...
- 增加libxml庫的配置
FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot
...
# libxml2 library path
FF_DEP_LIBXML_INC=$FF_BUILD_ROOT/$FF_BUILD_NAME_LIBXML/include
FF_DEP_LIBXML_LIB=$FF_BUILD_ROOT/$FF_BUILD_NAME_LIBXML/lib
...
case "$UNAME_S" in
# with openssl
if [ -f "${FF_DEP_OPENSSL_LIB}/libssl.a" ]; then
...
if [ -f "${FF_DEP_LIBXML_LIB}/libxml2.a" ]; then
echo "Libxml2 detected"
FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libxml2"
# windows WSL ubuntu 20.04
# 解決 ERROR: libxml-2.0 not found using pkg-config 問題
# 將對應版本的libxml-2.0.pc 內(nèi)容寫到 /usr/lib/pkgconfig/libxml-2.0.pc联予,否則pkg-config會出現(xiàn)無法找到libxml-2.0的問題(即使你配置了PKG_CONFIG_PATH)
PKG_CONFIG_LIBXML_PATH=/usr/lib/pkgconfig/libxml-2.0.pc
echo start del
sudo rm -rf $PKG_CONFIG_LIBXML_PATH
echo create file
sudo touch $PKG_CONFIG_LIBXML_PATH
sudo chmod 777 $PKG_CONFIG_LIBXML_PATH
echo start copy content
sudo cat $FF_DEP_LIBXML_LIB/pkgconfig/libxml-2.0.pc > $PKG_CONFIG_LIBXML_PATH
cat $PKG_CONFIG_LIBXML_PATH
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:$FF_DEP_LIBXML_LIB/pkgconfig
echo print libxml-2.0 path
pkg-config --libs --cflags libxml-2.0
FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_LIBXML_INC}"
FF_DEP_LIBS="$FF_DEP_LIBS -lm -L${FF_DEP_LIBXML_LIB} "
fi
...
- 設置pkg-config參數(shù)
#--------------------
echo ""
echo "--------------------"
echo "[*] configurate ffmpeg"
echo "--------------------"
cd $FF_SOURCE
if [ -f "./config.h" ]; then
echo 'reuse configure'
else
which $CC
./configure $FF_CFG_FLAGS \
--extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS" \
--extra-ldflags="$FF_DEP_LIBS $FF_EXTRA_LDFLAGS" \
# 添加此處代碼
--pkg-config=pkg-config
make clean
fi
開始編譯
# 初始化android
./init-android.sh
# 初始化android支持Https
cd ..
./init-android-openssl.sh
# 清除一波
cd android/contrib
./compile-ffmpeg.sh clean
./compile-openssl.sh clean
# 編譯openssl
./compile-openssl.sh all
# 編譯ffmpeg
./compile-ffmpeg.sh all
# 編譯ijkplayer
cd ..
./compile-ijk.sh all