Mac环境下编译ijkPlayer-RTSP

525 阅读2分钟

编译平台及版本

  • 操作系统:MacOS
  • NDK:android-ndk-r10e 下载链接:github.com/android/ndk…
    注意:个人建议NDK直接使用r10e版本,因为使用其他的版本会出现各种奇葩问题
  • 默认情况下已安装git、jdk、Android Sdk NDK

1. 配置JDK环境变量

JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_301.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

2. 配置Android Sdk环境变量

ANDROID_HOME=/Users/wangyuebin/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools

3. 配置NDK环境变量

export ANDROID_NDK=$ANDROID_HOME/android-ndk-r10e
export PATH=$PATH:$ANDROID_NDK

配置完成之后,记得 source ~/.bash_profile

下载及编译ijkPlayer

下载ijkPlayer

由于github下载比较慢,可以使用gitee的极速下载仓库:

git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android
执行命令
cd ijkplayer-android
# 用最新的稳定版本
git checkout -b k0.8.8

编译ijkPlayer

1. 执行init-android.sh脚本

init-android.sh的FFmpeg.git改为gitee.com/yuazhen/FFm… 截屏2022-08-13 20.19.38.png 如果我们想编译除了armv5的版本,可以如下设置
截屏2022-08-13 20.21.53.png
init-android-libyuv.sh的改为:gitee.com/yuazhen/lib… 截屏2022-08-13 20.23.05.png
init-android-soundtouch.sh的改为:gitee.com/yuazhen/sou… 截屏2022-08-13 20.23.18.png 然后再执行init-android.sh

/init-android.sh

2. 初始化openssl支持播放https链接

先修改文件init-android-openssl.sh,将对应的openssl链接改为码云链接

IJK_OPENSSL_UPSTREAM=https://gitee.com/yuazhen/openssl.git
IJK_OPENSSL_FORK=https://gitee.com/yuazhen/openssl.git

如果我们想编译除了armv5的版本,可以如下设置
截屏2022-08-13 20.21.53.png

3. 配置编码器格式支持

cd config
在config目录下的module-default.sh最底部增加以下:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp"
默认为最少支持,如果足够你使用,可以跳过这一步,否则可以改为以下配置:    
module-default.sh更多的编解码器/格式,同时支持ts格式的视频,例如一些电视台的m3u8 格式    module-lite-hevc.sh较少的编解码器/格式(包括 hevc)   
module-lite.sh较少的编解码器/格式(默认情况)

1. 如果您喜欢更多编解码器/格式   
cd config // 进入config目录  
rm module.sh // 删除module.sh脚本  
ln -s module-default.sh module.sh // 指定默认脚本软连接到module.sh   
source module.sh // 重新执行刚修改的文件初始化,使之立即生效

2.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(包括hevc函数)   
cd config   
rm module.sh   
ln -s module-lite-hevc.sh module.sh   
source module.sh

3.如果您希望使用较小的编解码器/格式来获得较小的二进制大小(默认情况下)   
cd config   
rm module.sh   
ln -s module-lite.sh module.sh   
source module.sh

编译ijkPlayer

编译openssl

修改compile-openssl.sh文件如下,保持和以上编译的版本一致 截屏2022-08-13 20.43.40.png

# 进入android/contrib目录
cd android/contrib
# 清除openssl的编译文件
./compile-openssl.sh clean
# 编译openssl
./compile-openssl.sh all

./compile-openssl.sh 后跟 all表示编译所有CPU架构的so库,如果只编译指定CPU架构的so库,后面就跟CPU架构,比如: ./ compile-ffmpeg.sh armv7a

编译ffmeng

修改compile-ffmeng.sh文件如下,保持和以上编译的版本一致 截屏2022-08-13 20.48.33.png

cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all

编译ijkPlayer

修改compile-ijk.sh文件如下,保持和以上编译的版本一致 截屏2022-08-13 20.50.29.png

cd ..
./compile-ijk.sh clean
./compile-ijk.sh all

编译成功后,当前目录下的ijkplayer的里面对应的src里面就有相应架构的so文件了。