最近在做音頻相關(guān)的項(xiàng)目,起初,音樂(lè)播放器使用的是Android系統(tǒng)本身的MediaPlayer,在開(kāi)發(fā)中使用的本來(lái)非常順利,奈何,在近期的一次測(cè)試中發(fā)現(xiàn),該播放器在某定制rom中會(huì)發(fā)生獲取當(dāng)前進(jìn)度大于總進(jìn)度的奇葩情況,更讓人費(fèi)解的是,該問(wèn)題在沒(méi)有調(diào)用seekto方法前是不會(huì)觸發(fā)的,很是神奇。沒(méi)辦法,只能換其它第三方播放器,很喜歡B站,于是果斷選擇了B站開(kāi)源的IJKPlayer。
IJKPlayer擁有幾乎?和Mediaplayer相同的API,接入十分方便,幾乎不用研究各個(gè)方法的用法。在接入后,由于長(zhǎng)期使用Mediaplayer,換上IJKPlayer的第一感受就是快,真的感覺(jué)比Mediaplayer快上不少。很開(kāi)心的使用了幾天,然后,又悲劇了......項(xiàng)目要求支持flac格式的曲目,之前的Mediaplayer能很好的支持該格式,可IJKPlayer居然不支持這個(gè)格式,瞬間淚奔呀。上github上又是一頓找后,終于發(fā)現(xiàn),IJKPlayer也是可以支持flac格式的,不過(guò)需要重新編譯下,B站的大神已經(jīng)很清楚的寫(xiě)在README中了。
然后,又蒙了,咋編譯???
又是一通查詢,一通嘗試后,算是把編譯問(wèn)題搞定了,并且還成功的集成到了自己原本的項(xiàng)目,接下來(lái),給大家分享下流程。
首先,編譯IJKPlayer需要在Linux環(huán)境下,當(dāng)然mac、win平臺(tái)下也是可以的,不過(guò)可能會(huì)發(fā)生各種奇葩問(wèn)題,為了一次成功,建議大家就別瞎折騰了。如果你本來(lái)就在Linux平臺(tái)下開(kāi)發(fā),最好不過(guò),如果沒(méi)有,就自己動(dòng)手裝一個(gè)虛擬機(jī)吧。
配置Linux虛擬機(jī)
- 虛擬機(jī)我選用的是VirtualBox,理由是它小巧、輕便、還完全免費(fèi)!下載地址
- Linux系統(tǒng)選用Ubuntu。下載地址
(安裝VirutalBox和Ubuntu都很簡(jiǎn)單,大家如果遇到問(wèn)題,百度下就能分分鐘解決,這里就不講解了。) - 安裝成功Ubuntu虛擬機(jī)后,需要在虛擬機(jī)中分別配置JDK,SDK,NDK
- 下載JDK。下載地址
我將下載好的JDK解壓到了 /home/用戶名/Dev/App路徑下。解壓好后,需要為JDK配置環(huán)境變量,右鍵,打開(kāi)終端,
在命令行中鍵入指令:sudo gedit /etc/profile
在開(kāi)啟的profile文件中加入如下內(nèi)容:
export JAVA_HOME=/home/用戶名/Dev/App/jdk1.8.0_111
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH - 下載SDK。下載地址
下載好的SDK同樣解壓到了 /home/用戶名/Dev/App路徑下。解壓好后,繼續(xù)為SDK配置環(huán)境變量:
export ANDROID_SDK=/home/用戶名/Dev/App/android-sdk-linux
export PATH=${PATH}:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools - 下載NDK。下載地址
下載好NDK解壓在 /home/用戶名/Dev/App路徑下。解壓好后,配置NDK配置環(huán)境變量:
export ANDROID_NDK=/home/用戶名/Dev/App/android-ndk-r13
export PATH=$PATH:ANDROID_NDK - 在命令行中鍵入
source /etc/profile使配置生效
至此,虛擬機(jī)的環(huán)境配置就OK了
編譯IJKPlayer
- 安裝git和yasm,在終端中分別鍵入:
sudo apt-get install git
sudo apt-get install yasm - clone ijkplayer 代碼
sudo git clone https://github.com/Bilibili/ijkplayer ijkplayer-android - 初始化
cd ijkplayer-android
./init-android.sh
ps: 初始化過(guò)程似乎主要在下載ffmpeg的代碼,代碼包比較大,我這邊下載速度基本穩(wěn)定在10kb左右,掛了一晚上才下好...... - 配置并編譯
cd config
rm module.sh
ln -s module-default.sh module.sh
ps: 選該配置方案,打出來(lái)的包將會(huì)支持盡量多的音、視頻格式,官方提供三種方案,我選用的這種是支持格式最多的一種,當(dāng)然,支持格式可以自由定制,有興趣的朋友不妨深入研究下。 - 完成編譯
cd android/contrib
./compile-ffmpeg.sh clean
./compile-ffmpeg.sh all
cd..
./compile-ijk.sh all
至此IJKPlayer的編譯過(guò)程就已經(jīng)完成啦。
測(cè)試和導(dǎo)入編譯好的IJKPlayer
-
測(cè)試編譯好的IJKPlayer。用Android Studio打開(kāi)
android/ijkplayer,等待Android Studio自動(dòng)配置好有,運(yùn)行ijkplayer-example,等程序成功安裝到手機(jī)上后,就可以測(cè)試下了,能夠成功播放就說(shuō)明編譯已經(jīng)完全成功了。 -
將編譯好的.so文件導(dǎo)入程序。在項(xiàng)目目錄下,創(chuàng)建jniLibs目錄,將生成的arm64-v8a、armeabi、armeabi-v7a、x86、x86_64文件復(fù)制到j(luò)niLibs中,然后,在gradle中添加
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.7.5'
build一下后,編譯后的IJKPlayer就已經(jīng)成功導(dǎo)入到項(xiàng)目中了。 - 使用。IJKPlayer使用方法跟系統(tǒng)自帶的MediaPlayer用法基本相同,這里就不多做解釋了。
至此,本次對(duì)IJKPlayer的調(diào)教就成功完成啦,從中也學(xué)到了一些東西,最重要的是,解決了一個(gè)頭疼很久的問(wèn)題,開(kāi)心,同時(shí),感謝B站團(tuán)隊(duì)的無(wú)私奉獻(xiàn),祝B站越做越好。
