日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

从零开始仿写一个BiliBili客户端之编译ijkplayer

發布時間:2024/3/26 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从零开始仿写一个BiliBili客户端之编译ijkplayer 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

章節

從零開始仿寫一個B站客戶端之-編譯ijkplayer

從零開始仿寫一個B站客戶端之-抓包B站接口

從零開始仿寫一個B站客戶端之-使用ijkplayer打造一個通用的播放器

從零開始仿寫一個B站客戶端之-整體架構設計和網絡請求封裝

寫在之前

之前一直在研究Android平臺自帶的mediacodec進行音視頻的編解碼,在使用一段時間之后,直觀的感受是比較繁瑣,兼容性不夠好。本著學到老活到老的態度,嘗試使用ijkplayer,為啥不從ffmpeg開始呢?學習嘛,都是從易到難得一個過程,我喜歡先從簡單的開始學起走。學框架比較枯燥,最好能在項目中運用到所學的東西,既然ijkplayer是bilibili的開源播放器,那實現一個仿B站的Android客戶端,是一個不錯的選擇。

項目地址:仿BiliBili客戶端

下載體驗:蒲公英

演示效果:

如果覺得項目不錯,歡迎給個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,官方推薦的這個版本。會少走很多彎路。

如果不想要自己編譯,也可以拿我編譯好的:

ijkplayer.zip

下載源碼并編譯

在磁盤中新建一個文件夾,用于存放源碼, 打開終端輸入如下指令:

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來進行使用了,大致操作就是這么些東西。

目前完成的功能

  • 整體架構搭建
  • 對b站客戶端抓包,分析接口
  • 主界面布局完成
  • 完成直播播放頁面
  • 完成推薦視頻的播放
  • 視頻彈幕獲取

項目截圖:

直播界面聊天界面個人信息popwindow主播信息界面粉絲榜大航海
視頻播放視頻評論側滑分區追番webview

總結

以上是生活随笔為你收集整理的从零开始仿写一个BiliBili客户端之编译ijkplayer的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。