系统我这里使用的Ubuntu 18.04.4 LTS
sudo apt update
sudo apt install git
我这里使用的是openjdk 11.0.9.1
sudo apt install openjdk-11-jdk
sudo apt install yasm
ndk下载地址 : https://github.com/android/ndk/wiki/Unsupported-Downloads
这里我下载的是r14b : https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
wget https://dl.google.com/android/repository/android-ndk-r14b-linux-x86_64.zip
sudo apt install zip //如果没有安装zip,需要安装zip进行解压
unzip android-ndk-r14b-linux-x86_64.zip
Android SDK 下载地址 : http://tools.android-studio.org/index.php/sdk
wget http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
tar -zxvf android-sdk_r24.4.1-linux.tgz
下载好ndk
和Android Sdk
,并解压后,打开 /etc/profile
文件
vim /etc/profile
在末尾加上
export ANDROID_SDK=你解压后的SDK路径
export ANDROID_NDK=你解压后的NDK路径
最后,刷新环境变量
source /etc/profile
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android //github下载比较慢,不推荐
推荐使用码云上的地址
git clone https://gitee.com/mirrors/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -b latest k0.8.8
k0.8.8 是 github 上最新的 tag了,后面的更新没有再打tag了,不知道为啥
init-android.sh
此处,仅保留需要的架构,这里我保留armv7a
和arm64
#pull_fork "armv5"
pull_fork "armv7a"
pull_fork "arm64"
#pull_fork "x86"
#pull_fork "x86_64"
同时,修改下IJK_FFMPEG_UPSTREAM
和IJK_FFMPEG_FORK
的下载路径,也使用码云的路径
IJK_FFMPEG_UPSTREAM=https://gitee.com/yuazhen/FFmpeg.git
IJK_FFMPEG_FORK=https://gitee.com/yuazhen/FFmpeg.git
init-android.sh
里会执行./init-android-libyuv.sh
和./init-android-soundtouch.sh
,这里会去下载libyuv
和soundtouch
库的代码。
这两个库不大,可以不修改下载地址,但如果发下下载不下来的话,可以再改下这两个路径,进行下载。
init-android.sh
修改保存后,执行init-android.sh
文件
./init-android.sh
这里需要注意,打印的日志里的这几个库,都要下载完毕,如果因为网络问题,没有下载成功,就多试几次,或者改之前说的下载地址。
module.sh
如果你播放器需要支持rtp、tcp、rtsp等,需要修改module.sh
配置文件,如果不需要修改,则跳过该步骤
进入ijkplayer-android/config
路径,修改module.sh
。
这里,我需要支持RTSP
所以修改如下配置 (即允许rtp、打开rtsp音视频分离器)
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp" //这个需要我们自己输入
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp" //这个只需要我们将disable 改为enable
compile-ffmpeg.sh
完成后,进入到 android/contrib
目录
cd android/contrib
修改compile-ffmpeg.sh
,FF_ACT_ARCHS_32
只保留armv7a
,FF_ACT_ARCHS_64
只保留armv7a
和arm64
FF_ACT_ARCHS_32="armv7a"
FF_ACT_ARCHS_64="armv7a arm64"
compile-ffmpeg.sh
首先,先清理缓存
./compile-ffmpeg.sh clean
然后,执行编译ffmpeg
./compile-ffmpeg.sh all
执行完之后,就会在ijkplayer-android/android/contrib/build/ffmpeg-armv7a/output
目录下生成 ffmpeg
的头文件和库文件
上面的部分,都是配置和编译 ijkplayer
所需要的东西,下面才是真正编译ijkplayer
compile-ijk.sh
返回到上一层目录ijkplayer-android/android
,修改compile-ijk.sh
文件,ACT_ABI_32
仅保留armv7a
,ACT_ABI_64
仅保留armv7a
和arm64
ACT_ABI_32="armv7a"
ACT_ABI_64="armv7a arm64"
compile-ijk.sh
这个时候,就开始真正编译ijkPlayer
了
./compile-ijk.sh all
编译成功后,可以在ijkplayer-android/android/ijkplayer/ijkplayer-arm64/src/main/libs/arm64-v8a
和ijkplayer-android/android/ijkplayer/ijkplayer-armv7a/src/main/libs/armeabi-v7a
路径下分别发现有3个so
就此,就编译成功了
如果不想自己编译,且想要支持RTSP功能,可以直接下载我已经编译好的so
库。
ijkPlayer so库下载地址,支持RTSP : https://download.csdn.net/download/EthanCo/85650824
也可以直接下载这个Demo,亲测播放RTSP视频流没有问题
Android IjkPlayer 播放RTSP视频流 Demo
如果不确定RTSP是否可用,可以自己搭建一个RTSP的环境,详见我的另一篇博客 :
windows环境下,搭建RTSP视频推流服务器
参考
编译Android Ijkplayer以及问题
ijkplayer SDK k0.8.8 编译 rtsp播放协议