從零開始仿寫一個B站客戶端之-編譯ijkplayerjava
從零開始仿寫一個B站客戶端之-抓包B站接口android
從零開始仿寫一個B站客戶端之-使用ijkplayer打造一個通用的播放器git
從零開始仿寫一個B站客戶端之-總體架構設計和網絡請求封裝github
以前一直在研究Android平臺自帶的mediacodec
進行音視頻的編解碼,在使用一段時間以後,直觀的感覺是比較繁瑣,兼容性不夠好。本着學到老活到老的態度,嘗試使用ijkplayer
,爲啥不從ffmpeg
開始呢?學習嘛,都是從易到可貴一個過程,我喜歡先從簡單的開始學起走。學框架比較枯燥,最好能在項目中運用到所學的東西,既然ijkplayer
是bilibili的開源播放器,那實現一個仿B站的Android客戶端,是一個不錯的選擇。web
項目地址:仿BiliBili客戶端shell
掃碼體驗: ubuntu
演示效果: bash
若是以爲項目不錯,歡迎給個star喲~網絡
BiliBIli的核心固然是視頻播放啦,視頻播放就離不開ijkplayer
,那什麼是ijkplayer
呢?ijkplayer
是 BiliBIli開源的一款基於ffmpeg
的優秀的播放器,支持Android/iOS,實現了跨平臺的功能。而且這個播放器軟硬通吃,在受到mediacodec
折磨幾個月以後,換用ijkplayer
簡直爽的一批。架構
話很少說,先放上ijkplayer的github地址:
項目地址: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' 複製代碼
嗯。。我不打算這樣直接引入,由於根據網上的說法,官方的這個包是不支持https和rtsp,rtmp的,這樣顯然不符合我國際程序猿的身份(戰術後仰~)。
我使用的是ubuntu16.04 64位操做系統,將nkd,yasm,git環境配置好。
sudo apt-get install yasm
sudo apt-get install git
複製代碼
ndk下載配置:developer.android.google.cn/ndk/guides/
這裏注意ndk版本不要過高或者過低,我使用的是android-ndk-r10e
,官方推薦的這個版本。會少走不少彎路。
若是不想要本身編譯,也能夠拿我編譯好的:
在磁盤中新建一個文件夾,用於存放源碼, 打開終端輸入以下指令:
git clone https://github.com/Bilibili/ijkplayer.git ijkplayer-android
cd ijkplayer-android
# 切換分支 0.8.8是最新的
git checkout -B latest k0.8.8
複製代碼
下載完成以後,在ijkplayer-android/config這個文件夾中,能夠配置編碼器格式支持,它給了三個模板供咱們使用:
module-default.sh
更多的編解碼器/格式module-lite-hevc.sh
較少的編解碼器/格式(包括hevc)module-lite.sh
較少的編解碼器/格式(默認狀況)默認的編譯選項是不支持rtsp協議和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"
複製代碼
我是在module-lite-hevc.sh的基礎上修改的,修改完成以後軟連接到module.sh:
rm module.sh
ln -s module-lite-hevc.sh module.sh
複製代碼
上面的修改完成後即可以開始編譯了,cd 到 ijkplayer-android
,執行:
// checkout ffmpeg 源碼,默認從 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
複製代碼
漫長的等待以後,編譯完成後的東西就放在 ijkplayer-android/android/ijkplayer
目錄下。此時編譯好的 so 是支持 https 協議的。
編譯成功以後打包好的文件:ijkplayer.zip
ijkplayer-android/android/ijkplayer/ijkplayer-example
是一個 example ,裏面有 ijkplayer 的使用示例。
咱們只須要將編譯出來的so放入工程中的src\main
目錄下的jniLibs
目錄中,而且在項目中添加 ijkplayer-java 依賴便可:
compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
//使用咱們本身的so 註釋掉下面這個
//compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'
複製代碼
以上完成以後,能夠結合example來進行使用了,大體操做就是這麼些東西。
項目截圖:
直播界面 | 聊天界面 | 我的信息popwindow | 主播信息界面 | 粉絲榜 | 大航海 |
---|---|---|---|---|---|
視頻播放 | 視頻評論 | 側滑 | 分區 | 追番 | webview |
---|---|---|---|---|---|