最近想要写一个播放器,当初开发视频app的时候有接触过ijkplayer,风评不错,所以想要尝试着自己编译一波。苦于linux知识匮乏,不想安装双系统,也不想捣鼓虚拟机,只得在windows下求突破,然而windows本身环境编译ijkplayer又是一个巨坑……刚好,win10如今可以安装linux子系统,所以就尝试一下,过程记录如下:
ps:在网上还是看到很多坑,本人没遇到过,如果可以的话还是建议VM虚拟机+Ubuntu解决,遇到问题网上解决方案也比较齐全
一、安装子系统Ubuntu
step①:开启开发人员模式
step②:安装
在Microsoft Store中搜索linux,第一个ubuntu获取安装;安装完成后命令行bash进入ubuntu,首次需要设置账户密码;
二、环境配置:
step①:更新源
#1.备份原来的数据源配置文件
cp /etc/apt/sources.list /etc/apt/sources.list_backup
#2.编辑数据源配置文件
vi /etc/apt/sources.list
【ps:我使用的是阿里的源,如下】
deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
#3.更新配置
apt-get update
step②:安装git、yasm、python
sudo apt-get install git
sudo apt-get install yasm
sudo apt-get install python
step③:配置java、Android sdk、ndk环境
#1.下载linux版本的jdk、jre、android sdk、ndk,并解压【PS:最好使用命令行tar解压,ndk使用r14b版本,要不然可能会遇到各种奇奇怪怪的坑,目前ijk项目也不支持更高版本的ndk编译,就算修改了脚本也不行】
#2.命令行打开bashrc文件
vim ~/.bashrc
#3.在最后加入以下配置内容,【】内内容根据实际路径更改
#======android home======#
#!!!【】中内容根据自己实际路径替换!!!#
#===sdk===#
export ANDROID_SDK=/mnt/d【/linux/sdk/android-sdk-linux】
export PATH=$ANDROID_SDK/platform-tools:$PATH
export PATH=$ANDROID_SDK/tools:$PATH
#===ndk===#
export ANDROID_NDK=/mnt/【d/linux/ndk/android_ndk_r20】
export PATH=$ANDROID_NDK:$PATH
#===java===#
export JAVA_HOME=/mnt/【d/linux/java/jdk_13_0_1】
export JRE_HOME=/mnt/【d/linux/java/jre_1_8._0_231/jre】
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
#4.刷新使配置生效
source ~/.bashrc
#5.使用以下命令行校验配置是否生效,会打印一堆相关的东西就是配置成功了
ndk-build -v
android -h
java
三、编译:
【ps:编译是固定步骤,除了step③根据需要自行修改,如:配置ijkplayer支持的视频格式】
step①:拉取源码
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8
保存目录位于c盘user目录,我的路径是:C:\Users\Administrator\ijkplayer-android\android\ijkplayer,【Users\Administrator】替换成实际的user目录即可。
step②:运行init-android.sh
./init-android.sh
此处会执行pull ffmpeg等操作。ps:可能需要科学上网,在家里100M的光纤下载速度只有1k/s,最后还fail了;最终是将电脑带去公司,用公司的网络搞定的。
step③:编译脚本配置
选择一:【so最小】如果希望使用较小的编解码器/格式来获得较小的二进制大小(默认情况下):
cd config/
rm module.sh
ln -s module-lite.sh module.sh
source module.sh
选择二:【so偏小】如果希望使用较小的编解码器/格式来获得较小的二进制大小(包括hevc函数):
cd config
rm module.sh
ln -s module-lite-hevc.sh module.sh
source module.sh
选择三:【so最大】如果喜欢更多编解码器/格式
cd config
rm module.sh
ln -s module-default.sh module.sh
source module.sh
你也可以自行打开module.sh文件编辑,将需要的格式配置成enable
step④:初始化ijkplayer支持https
cd ..
./init-android-openssl.sh
ps:这一步最好也借助一下科学上网,要不然也有可能fail,当看到下面这片log的时候,就证明你成功了。
继续往下,清理一下:
cd android/contrib
./compile-openssl.sh clean
./compile-ffmpeg.sh clean
step⑤:编译openssl
./compile-openssl.sh all
step⑥:编译ffmpeg
./compile-ffmpeg.sh all
如果报错:fatal error: linux/perf_event.h: No such file or directory
vim ~/ijkplayer-android/config/module.sh
在结尾加入这一行:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
保存后执行
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
step⑦:编译ijkplayer
cd ..
./compile-ijk.sh all
备份成果
cd ~
tar cvzf ijkplayer-android-build.tar.gz ijkplayer-android