最近想要寫(xiě)一個(gè)播放器,當(dāng)初開(kāi)發(fā)視頻app的時(shí)候有接觸過(guò)ijkplayer,風(fēng)評(píng)不錯(cuò),所以想要嘗試著自己編譯一波??嘤趌inux知識(shí)匱乏,不想安裝雙系統(tǒng),也不想搗鼓虛擬機(jī),只得在windows下求突破,然而windows本身環(huán)境編譯ijkplayer又是一個(gè)巨坑……剛好,win10如今可以安裝linux子系統(tǒng),所以就嘗試一下,過(guò)程記錄如下:
ps:在網(wǎng)上還是看到很多坑,本人沒(méi)遇到過(guò),如果可以的話(huà)還是建議VM虛擬機(jī)+Ubuntu解決,遇到問(wèn)題網(wǎng)上解決方案也比較齊全
一、安裝子系統(tǒng)Ubuntu
step①:開(kāi)啟開(kāi)發(fā)人員模式


step②:安裝
在Microsoft Store中搜索linux,第一個(gè)ubuntu獲取安裝;安裝完成后命令行bash進(jìn)入ubuntu,首次需要設(shè)置賬戶(hù)密碼;

二、環(huán)境配置:
step①:更新源
#1.備份原來(lái)的數(shù)據(jù)源配置文件
cp /etc/apt/sources.list /etc/apt/sources.list_backup
#2.編輯數(shù)據(jù)源配置文件
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環(huán)境
#1.下載linux版本的jdk、jre、android sdk、ndk,并解壓【PS:最好使用命令行tar解壓,ndk使用r14b版本,要不然可能會(huì)遇到各種奇奇怪怪的坑,目前ijk項(xiàng)目也不支持更高版本的ndk編譯,就算修改了腳本也不行】
#2.命令行打開(kāi)bashrc文件
vim ~/.bashrc
#3.在最后加入以下配置內(nèi)容,【】?jī)?nèi)內(nèi)容根據(jù)實(shí)際路徑更改
#======android home======#
#?。?!【】中內(nèi)容根據(jù)自己實(shí)際路徑替換?。?!#
#===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.使用以下命令行校驗(yàn)配置是否生效,會(huì)打印一堆相關(guān)的東西就是配置成功了
ndk-build -v
android -h
java
三、編譯:
【ps:編譯是固定步驟,除了step③根據(jù)需要自行修改,如:配置ijkplayer支持的視頻格式】
step①:拉取源碼
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
git checkout -B latest k0.8.8
保存目錄位于c盤(pán)user目錄,我的路徑是:C:\Users\Administrator\ijkplayer-android\android\ijkplayer,【Users\Administrator】替換成實(shí)際的user目錄即可。
step②:運(yùn)行init-android.sh
./init-android.sh
此處會(huì)執(zhí)行pull ffmpeg等操作。ps:可能需要科學(xué)上網(wǎng),在家里100M的光纖下載速度只有1k/s,最后還fail了;最終是將電腦帶去公司,用公司的網(wǎng)絡(luò)搞定的。
step③:編譯腳本配置
選擇一:【so最小】如果希望使用較小的編解碼器/格式來(lái)獲得較小的二進(jìn)制大?。J(rèn)情況下):
cd config/
rm module.sh
ln -s module-lite.sh module.sh
source module.sh
選擇二:【so偏小】如果希望使用較小的編解碼器/格式來(lái)獲得較小的二進(jìn)制大?。ò╤evc函數(shù)):
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
你也可以自行打開(kāi)module.sh文件編輯,將需要的格式配置成enable
step④:初始化ijkplayer支持https
cd ..
./init-android-openssl.sh
ps:這一步最好也借助一下科學(xué)上網(wǎng),要不然也有可能fail,當(dāng)看到下面這片log的時(shí)候,就證明你成功了。

繼續(xù)往下,清理一下:
cd android/contrib
./compile-openssl.sh clean??
./compile-ffmpeg.sh clean
step⑤:編譯openssl
./compile-openssl.sh all
step⑥:編譯ffmpeg
./compile-ffmpeg.sh all
如果報(bào)錯(cuò):fatal error: linux/perf_event.h: No such file or directory
vim ~/ijkplayer-android/config/module.sh
在結(jié)尾加入這一行:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
保存后執(zhí)行
./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