1 環(huán)境搭建
1.1 編譯環(huán)境說明
ijkplayer目前支持linux,mac平臺編譯。windows平臺暫不支持。如果沒有l(wèi)inux環(huán)境,可以使用win10自帶的子系統(tǒng)ubuntu進(jìn)行編譯。win10子系統(tǒng)開啟方法參見:http://www.itdecent.cn/p/58090215bda8也可自行度娘。
? ? 本文檔主要以win10子系統(tǒng)ubuntu為編譯環(huán)境進(jìn)行說明。其它平臺都比win10子系統(tǒng)簡單,這里就不做具體說明。
1.2 ijkplayer版本說明
ijkplayer默認(rèn)版本支持的音視頻格式和網(wǎng)絡(luò)協(xié)議有限,基本上不滿足產(chǎn)品需要(默認(rèn)支持:mp4、flv、f4v、mkv等)。對于wav、m3u8、https協(xié)議等都不支持。需要自己編譯ijkplayer源碼。編譯后的庫的大小會有所增加。請根據(jù)自己的需要選擇編譯。全量支持的庫大小大概有30M左右。
1.3 環(huán)境準(zhǔn)備
NDK:android-ndk-r14b-linux-x86_64(ijkplayer僅支持r10e以上r14b及以下的NDK版本),盡量不要使用最新版本的NDK。本人使用r14b驗(yàn)證通過,其它版本沒有驗(yàn)證。
SDK:https://developer.android.google.cn/請自行下載android sdk
2 編譯步驟
2.1 安裝組件
$ sudo apt-get install vim openssh-server git curl wget tar unzip build-essential openjdk-8-jdk yasm python
說明:如果安裝失敗,請先升級ubuntu:sudo apt-get update
2.2 配置環(huán)境變量
2.2.1 NDK環(huán)境變量配置
$ sudo unzip android-ndk_r14b-linux-x86_64.zip? //在win10子系統(tǒng)中,先進(jìn)入到windows環(huán)境中的ndk下載目錄。cd /mnt/e/XXX? ? e代表windows盤符
$ sudo mv android-ndk-r13b /opt/Android/? ? //如果沒有Android目錄,可以手動創(chuàng)建mkdir Android
添加NDK到環(huán)境變量中
$ sudo vim /etc/profile
在文件末尾添加如下內(nèi)容,并保存退出
export ANDROID_NDK=/opt/Android/android-ndk-r14b
export PATH=$PATH:$ANDROID_NDK
2.2.2 SDK環(huán)境變量配置
android SDK的環(huán)境變量配置與NDK配置一樣,參見2.2.1??
完成后重啟Ubuntu或者在終端中source一下profile,建議重啟ubuntu,以免source不生效,后面編譯報錯。
2.3 代碼克隆
git clone https://github.com/Bilibili/ijkplayer ijkplayer-android
cd ijkplayer-android
git checkout -B local_k0.8.8 k0.8.8 //切換分支,取k0.8.8分支。local_k0.8.8是本地分支,可以自己命名。切記一定要切換到k0.8.8分支,master或其他分支后續(xù)的編譯會報錯
2.4 ijkplayer編譯步驟
2.4.1 編譯配置
ijkplayer有三種編譯配置
1)支持較多格式(完全編譯,幾乎所有格式都支持了),文件較大。本人使用的此種方式。最終的大小估計(jì)有30M左右。
$ cd config
$ rm module.sh
$ ln -s module-default.sh module.sh
2)支持較少格式,包含hevc
$ cd config
$ rm module.sh
$ ln -s module-lite-hevc.sh module.sh
3)支持較少格式(默認(rèn))
$ cd config
$ rm module.sh
$ ln -s module-lite.sh module.sh
2.4.2 ffmpege和openssl編譯
下載源碼:
開源項(xiàng)目中并沒有直接包含ffmpeg和openssl源碼,所以編譯前需要先下載
// 進(jìn)入工程根目錄
$ cd ijkplayer-android
// checkout ffmpeg 源碼,ffmpeg有300多M,下載可能會有點(diǎn)慢
$ ./init-android.sh
// checkout openssl android源碼
$ ./init-android-openssl.sh
編譯
// 編譯openssl(用于支持https)
$ cd android/contrib
$ ./compile-openssl.sh clean
$ ./compile-openssl.sh all
// 編譯 ffmpeg
$ ./compile-ffmpeg.sh clean
$ ./compile-ffmpeg.sh all
如果在編譯ffmpeg時有報:fatal error: linux/perf_event.h: No such file or directory錯誤,那么在ijkplayer-android/config/module.sh的末尾添加如下配置,再重新編譯即可
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-linux-perf"
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --disable-bzlib"
2.4.3 ijkplayer編譯
// 編譯ijkplayer
$ cd ..
$ ./compile-ijk.sh all
編譯完成后的包在:ijkplayer-android/android/ijkplayer目錄下。
2.5 集成
集成:
? ? ijkplayer-android/android/ijkplayer目錄是一個 Android Studio 工程,經(jīng)過編譯后即是一個完整的工程,可以直接拷貝出來用Android Studio打開使用。
? ? ijkplayer-example:示例
? ? ijkplayer-java:java層的庫(必須的)
? ? ijkplayer-xxx:各種架構(gòu)的so庫
? ? ijkplayer-exo:對ExoPlayer的封裝
? ?也可以將lib工程中的so拷貝到新建的工程中,只需要依賴對應(yīng)版本的java層的庫即可,這里是k0.8.8
implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'? ? //也可以將ijkplayer-java源碼直接拷貝到工程中。
ijkplayer全量包下載地址:https://github.com/whtnlily/MyIjkplayer.git