在mac下编译ijkpleyer
安装sdk
在https://www.androiddevtools.cn/
或者https://android-sdk.en.softonic.com/mac
下载sdk,不行的话就自行百度吧。
把sdk放在 /Users/用户名/Library/Android/sdk
然后打开终端输入:
open -e .bash_profile
配置sdk环境变量
#Android SDK环境变量
exprot ANDROID_HOME=/Users/用户名/Library/Android/sdk/sdk文件夹
exprot PATH=$PATH:$ANDROID_HOME/tools
exprot PATH=$PATH:$ANDROID_HOME/platform-tools
安装ndk
ndk下载
ndk版本最好是在r10e
或者 r14b
,网上说在这两个版本之间的其他版本也可以,但用其他版本编译会出问题。我是用android-ndk-r14b
编译成功了,其他的也没试过。把下载的ndk放在 /Users/用户名/Library/Android/ndk
然后打开终端输入:
open -e .bash_profile
配置ndk环境变量
#Android NDK环境变量
export PATH=${PATH}:/Users/用户名/Library/Android/ndk/ndk文件夹(android-ndk-r14b)
ANDROID_NDK=/Users/用户名/Library/Android/ndk/ndk文件夹(android-ndk-r14b)
export ANDROID_NDK
在终端输入一下代码使配置生效:
source .bash_profile
如果没有生效,重启一下
安装homebrew
官网上的方法,在终端输入
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
如果上面的安装不了,可以试一下下面的国内镜像地址
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
安装git和yasm
brew install git
brew install yasm
下载源码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
进入 ijkplayer 目录,切换到最新分支(0.8.8)
cd ijkplayer-android
git checkout -B latest k0.8.8
初始化ffmpeg 依赖库
./init-andorid.sh
添加https支持,不需要的直接跳过
./init-android-openssl.sh
如果是其他平台,运行相应平台的脚本
./init-andorid.sh
会去 clone 需要的 ffmpeg 仓库,./init-android-openssl.sh
去远程仓库拉取openssl的远程代码,这两步都需要等待一段时间,中途可能会出现如下错误导致 clone 失败
fatal: 过早的文件结束符(EOF)
据说是 clone 的项目文件太大,git 传输大小限制,修改git配置
git config http.postBuffer 524288000
不过我修改了还是没用,还是会出现clone失败的情况,反正就是多试几次总有成功的时候。我为了初始化ffmpeg 依赖库
和添加https支持
试了几十次,花了快一个星期不容易啊!
配置编解码器格式支持
进入 config 目录,下面有四个 .sh 文件,编译时读取的是 module.sh,不过默认 module-lite.sh 映射到 module.sh 上了
- module-default.sh 更多的编解码器/格式
- module-lite-hevc.sh 较少的编解码器/格式(包括 hevc)
- module-lite.sh 较少的编解码器/格式(默认情况)
# 进入 config 目录
cd config
vim module-lite.sh
我需要支持RTMP,RTSP视频格式,还要支持mulaw的音频格式,所以我做了一下修改。可以根据自己的需求进行修改
搜索rtm 找到几个 如下:
export COMMON_FF_CFG_FLAGS=”$COMMON_FF_CFG_FLAGS –enable-protocol=rtmp*”
export COMMON_FF_CFG_FLAGS=”$COMMON_FF_CFG_FLAGS –enable-protocol=rtmp”
export COMMON_FF_CFG_FLAGS=”$COMMON_FF_CFG_FLAGS –enable-protocol=rtmpt”
如果前面有disabled的 修改为enable
添加alaw,mulaw音频格式支持
#add pcm_alaw pcm_mulaw
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"
添加RTSP支持
#add rtsp support
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"
修改完成后:
# 删除当前的 module.sh 文件
rm module.sh
# 创建软链接 module.sh 指向 module-lite.sh
ln -s module-lite.sh module.sh
编译 openssl
# 进入 android/contrib 目录
cd android/contrib
# 清除 openssl 的编译文件
./compile-openssl.sh clean
# 编译 openssl
./compile-openssl.sh all
编译 ffmpeg
# 清除 ffmpeg 的编译文件
./compile-ffmpeg.sh clean
# 编译 ffmpeg
./compile-ffmpeg.sh all
编译完成后回到 ../ijkplayer/android/ 目录下,继续执行下面指令
cd ..
./compile-ijk.sh all
编译的时候可能会出现无法验证开发者的问题,可以把Gatekeeper禁用掉,编译完成之后再启用
启用Gatekeeper,不显示“任何来源“选项(默认不显示)
sudo spctl --master-enable
禁用Gatekeeper,显示“任何来源”选项
sudo spctl --master-disable
完成之后,在 ijkplayer/android/ijkplayer/ 目录下有对应各个平台的依赖库
编译之后的so文件需要的自行取用: ijkPlayer0.8.8 支持rtmp https so文件
密码: r6g1