Ubuntu、WSL上编译 IJKPlayer,您可以按照以下步骤进行操作:
系统准备
#更新包
sudo apt update
#安装编译所需的依赖项
sudo apt install -y autoconf automake build-essential cmake git libtool nasm pkg-config python3 unzip
#安装当前正在运行的内核版本对应的 Linux 内核头文件
sudo apt-get install linux-headers-$(uname -r)
环境准备
# /home/user
wget https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip
#解压NDK(先找到目标文件夹),NDK下载地址:https://dl.google.com/android/repository/android-ndk-r10e-linux-x86_64.zip
unzip /home/user/android-ndk-r10e-linux-x86_64.zip
#编辑环境文件
nano ~/.bashrc
#添加环境参数内容如下
export ANDROID_NDK=/path/to/your/ndk
export PATH=$PATH:$ANDROID_NDK
#应用配置环境
source ~/.bashrc
#查看当前NDK环境
echo $ANDROID_NDK
源码下载
#下拉IJKPlayer源代码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
#进入源代码目录
cd ijkplayer-android
#下载指定的 ffmpeg 源码
./init-android.sh
#下载指定的 ffmpeg 源码,支持https
./init-android-openssl.sh
编译文件
#在项目根目录下
cd android/contrib
#编译openssl
./compile-openssl.sh clean
./compile-openssl.sh all
#编译ffmpeg
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
编译IJK
#编译ijkplayer
cd ..
./compile-ijk.sh all
#最终编译成功后文件在./android/ijkplayer/目录下
#例如arm64 so文件路径:./android/ijkplayer/ijkplayer-arm64/src/main/libs/
编译问题
#如果需要更改编译版本类型
cd config
rm module.sh
ln -s module-default.sh module.sh # 完整版
ln -s module-lite.sh module.sh # 精简版
ln -s module-lite-hevc.sh module.sh # 包含 HEVC 的精简版
#编译如果报错linux相关,添加内容到module.sh末尾
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
#报错Unknown option "--disable-ffserver"和Unknown option "--disable-vda",注释如下参数
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-vda"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-ffserver"
#报错 :libavcodec/eac3_core_bsf.c:39: error: undefined reference to 'ff_ac3_parse_header',添加如下参数
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bsf=eac3_core"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-parser=ac3"
#如果需要支持rtsp配置如下
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=sdp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtp"
#如果部分播放无声音
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=nellymoser"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_alaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=pcm_mulaw"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=flac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=vorbis"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=opus"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-decoder=amr"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=wav"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=flac"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=ogg"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=matroska"
module.sh
#! /usr/bin/env bash
#--------------------
# Standard options:
export COMMON_FF_CFG_FLAGS=
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --prefix=PREFIX"
# Licensing options:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-gpl"
# export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-version3"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-nonfree"