从零开始仿写一个BiliBili客户端之编译ijkplayer
章節(jié)
從零開始仿寫一個(gè)B站客戶端之-編譯ijkplayer
從零開始仿寫一個(gè)B站客戶端之-抓包B站接口
從零開始仿寫一個(gè)B站客戶端之-使用ijkplayer打造一個(gè)通用的播放器
從零開始仿寫一個(gè)B站客戶端之-整體架構(gòu)設(shè)計(jì)和網(wǎng)絡(luò)請求封裝
寫在之前
之前一直在研究Android平臺自帶的mediacodec進(jìn)行音視頻的編解碼,在使用一段時(shí)間之后,直觀的感受是比較繁瑣,兼容性不夠好。本著學(xué)到老活到老的態(tài)度,嘗試使用ijkplayer,為啥不從ffmpeg開始呢?學(xué)習(xí)嘛,都是從易到難得一個(gè)過程,我喜歡先從簡單的開始學(xué)起走。學(xué)框架比較枯燥,最好能在項(xiàng)目中運(yùn)用到所學(xué)的東西,既然ijkplayer是bilibili的開源播放器,那實(shí)現(xiàn)一個(gè)仿B站的Android客戶端,是一個(gè)不錯(cuò)的選擇。
項(xiàng)目地址:仿BiliBili客戶端
下載體驗(yàn):蒲公英
演示效果:
如果覺得項(xiàng)目不錯(cuò),歡迎給個(gè)star喲~
準(zhǔn)備工作
BiliBIli的核心當(dāng)然是視頻播放啦,視頻播放就離不開ijkplayer,那什么是ijkplayer呢?ijkplayer是?BiliBIli開源的一款基于ffmpeg的優(yōu)秀的播放器,支持Android/iOS,實(shí)現(xiàn)了跨平臺的功能。并且這個(gè)播放器軟硬通吃,在受到mediacodec折磨幾個(gè)月之后,換用ijkplayer簡直爽的一批。
話不多說,先放上ijkplayer的github地址:
項(xiàng)目地址:ijkplayer開源播放器
集成方式:
required, enough for most devices. compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' 復(fù)制代碼嗯。。我不打算這樣直接引入,因?yàn)楦鶕?jù)網(wǎng)上的說法,官方的這個(gè)包是不支持https和rtsp,rtmp的,這樣顯然不符合我國際程序猿的身份(戰(zhàn)術(shù)后仰~)。
編譯環(huán)境
我使用的是ubuntu16.04 64位操作系統(tǒng),將nkd,yasm,git環(huán)境配置好。
sudo apt-get install yasm sudo apt-get install git 復(fù)制代碼ndk下載配置:developer.android.google.cn/ndk/guides/
這里注意ndk版本不要太高或者太低,我使用的是android-ndk-r10e,官方推薦的這個(gè)版本。會少走很多彎路。
如果不想要自己編譯,也可以拿我編譯好的:
ijkplayer.zip
下載源碼并編譯
在磁盤中新建一個(gè)文件夾,用于存放源碼, 打開終端輸入如下指令:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android cd ijkplayer-android 切換分支 0.8.8是最新的 git checkout -B latest k0.8.8 復(fù)制代碼下載完成之后,在ijkplayer-android/config這個(gè)文件夾中,可以配置編碼器格式支持,它給了三個(gè)模板供我們使用:
- module-default.sh 更多的編解碼器/格式
- module-lite-hevc.sh 較少的編解碼器/格式(包括hevc)
- module-lite.sh 較少的編解碼器/格式(默認(rèn)情況)
默認(rèn)的編譯選項(xiàng)是不支持rtsp協(xié)議和https的,需要加入下面編譯配置:
export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=tcp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=sdp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-openssl" 復(fù)制代碼我是在module-lite-hevc.sh的基礎(chǔ)上修改的,修改完成之后軟鏈接到module.sh:
rm module.sh ln -s module-lite-hevc.sh module.sh 復(fù)制代碼上面的修改完成后便可以開始編譯了,cd 到 ijkplayer-android,執(zhí)行:
// checkout ffmpeg 源碼,默認(rèn)從 https://github.com/Bilibili/FFmpeg.git checkout ./init-android.sh ./init-android-openssl.sh //cd 到 ijkplayer-android/android/contrib 目錄下,Android下編譯腳本放在該目錄下 cd android/contrib // 編譯 openssl ./compile-openssl.sh clean ./compile-openssl.sh all //編譯 ffmpeg ./compile-ffmpeg.sh clean ./compile-ffmpeg.sh all //cd 到ijkplayer-android/android目錄下 開始編譯ijkplayer ./compile-ijk.sh all 復(fù)制代碼漫長的等待之后,編譯完成后的東西就放在 ijkplayer-android/android/ijkplayer目錄下。此時(shí)編譯好的 so 是支持 https 協(xié)議的。
編譯成功之后打包好的文件:ijkplayer.zip
ijkplayer-android/android/ijkplayer/ijkplayer-example 是一個(gè) example ,里面有 ijkplayer 的使用示例。
我們只需要將編譯出來的so放入工程中的src\main?目錄下的jniLibs 目錄中,并且在項(xiàng)目中添加 ijkplayer-java 依賴即可:
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8' //使用我們自己的so 注釋掉下面這個(gè) //compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8' 復(fù)制代碼以上完成之后,可以結(jié)合example來進(jìn)行使用了,大致操作就是這么些東西。
目前完成的功能
- 整體架構(gòu)搭建
- 對b站客戶端抓包,分析接口
- 主界面布局完成
- 完成直播播放頁面
- 完成推薦視頻的播放
- 視頻彈幕獲取
項(xiàng)目截圖:
總結(jié)
以上是生活随笔為你收集整理的从零开始仿写一个BiliBili客户端之编译ijkplayer的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Bilibili Mini 客户端
- 下一篇: Enea公司----OSE/OSEck