IJKPlayer編譯實(shí)踐

最近在做音頻相關(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ī)

  1. 虛擬機(jī)我選用的是VirtualBox,理由是它小巧、輕便、還完全免費(fèi)!下載地址
  2. Linux系統(tǒng)選用Ubuntu。下載地址
    (安裝VirutalBox和Ubuntu都很簡(jiǎn)單,大家如果遇到問(wèn)題,百度下就能分分鐘解決,這里就不講解了。)
  3. 安裝成功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

  1. 安裝git和yasm,在終端中分別鍵入:
    sudo apt-get install git
    sudo apt-get install yasm
  2. clone ijkplayer 代碼
    sudo git clone https://github.com/Bilibili/ijkplayer ijkplayer-android
  3. 初始化
    cd ijkplayer-android
    ./init-android.sh
    ps: 初始化過(guò)程似乎主要在下載ffmpeg的代碼,代碼包比較大,我這邊下載速度基本穩(wěn)定在10kb左右,掛了一晚上才下好......
  4. 配置并編譯
    cd config
    rm module.sh
    ln -s module-default.sh module.sh
    ps: 選該配置方案,打出來(lái)的包將會(huì)支持盡量多的音、視頻格式,官方提供三種方案,我選用的這種是支持格式最多的一種,當(dāng)然,支持格式可以自由定制,有興趣的朋友不妨深入研究下。
  5. 完成編譯
    cd android/contrib
    ./compile-ffmpeg.sh clean
    ./compile-ffmpeg.sh all
    cd..
    ./compile-ijk.sh all

至此IJKPlayer的編譯過(guò)程就已經(jīng)完成啦。

測(cè)試和導(dǎo)入編譯好的IJKPlayer

  1. 測(cè)試編譯好的IJKPlayer。用Android Studio打開(kāi)android/ijkplayer,等待Android Studio自動(dòng)配置好有,運(yùn)行ijkplayer-example,等程序成功安裝到手機(jī)上后,就可以測(cè)試下了,能夠成功播放就說(shuō)明編譯已經(jīng)完全成功了。
  2. 將編譯好的.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)目中了。
  3. 使用。IJKPlayer使用方法跟系統(tǒng)自帶的MediaPlayer用法基本相同,這里就不多做解釋了。

至此,本次對(duì)IJKPlayer的調(diào)教就成功完成啦,從中也學(xué)到了一些東西,最重要的是,解決了一個(gè)頭疼很久的問(wèn)題,開(kāi)心,同時(shí),感謝B站團(tuán)隊(duì)的無(wú)私奉獻(xiàn),祝B站越做越好。

2233.jpeg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容