RedPlayer是小紅書基於FFmpeg4.3研發並開源的國產播放器,它可運行於Android和iOS系統,既支持播放本地視頻文件,也支持播放網絡上的流媒體鏈接。有關FFmpeg在Android平台的集成説明參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書的“第12章 FFmpeg的移動開發”。
之前的文章《使用國產的ijkplayer播放器觀看網絡視頻》介紹了另一款由B站研發的國產播放器ijkplayer,可惜ijkplayer已經多年未更新源碼,使得應用在App項目中頗為不便。如今小紅書的RedPlayer橫空出世,大有接過ijkplayer的勢頭,方便開發者定製包含最新特性的移動播放器。
這裏以Android Studio Dolphin(小海豚版本)為例,介紹如何在App工程中運行RedPlayer,詳細的操作步驟如下。
一、下載RedPlayer的源碼
RedPlayer的源碼託管地址為 https://github.com/RTE-Dev/REDPlayer ,國內的鏡像網站有兩個,一個是 https://gitee.com/rte-dev/RedPlayer ,另一個是 https://gitcode.com/gh_mirrors/re/RedPlayer 。
可以在託管網站上下載RedPlayer的最新源碼,也可以下載2.0版本的源碼。
二、導入RedPlayer的源碼
解壓下載後的RedPlayer源碼,找到source目錄,下面又有三個目錄。分別是android、ios和redplayercore。其中android為RedPlayer適配Android系統的源碼,ios為RedPlayer適配iOS系統的源碼,redplayercore為RedPlayer的播放器核心源碼,前兩個源碼都依賴於redplayercore。
打開小海豚版本的Android Studio後,按照項目方式導入上面解壓得到的android目錄,Android Studio就加載RedPlayer工程,並自動下載相關的依賴包。有關Android Studio導入App項目的操作步驟參見《Android Studio開發實戰:從零基礎到App上線(第3版)》一書的“1.3.2 導入已有的工程”。
成功導入RedPlayer工程之後,發現該工程有三個App模塊,介紹如下:
app:這是包含交互界面的播放器演示模塊,引用了小紅書自研播放器相關庫OpenRedPlayerCore和OpenRedPreload,支持播放本地視頻文件、網絡視頻文件、在線直播鏈接,以及小紅書提供的在線播放案例和畫中畫播放案例。
OpenRedPlayerCore:這是RedPlayer播放器的核心模塊,其中的C/C++代碼集成了FFmpeg、mediandk、SoundTouch等第三方庫。
OpenRedPreload:這是播放器的預加載模塊,主要提供網絡視頻流在下載過程中的緩存機制。
三、編譯RedPlayer
依次選擇Android Studio的頂部菜單:Build→Make Project,嘗試編譯RedPlayer工程。不料Android Studio提示報錯“Could not find com.github.tbruyelle:rxpermissions:0.12”,原來RedPlayer用到了第三方的rxpermissions。
不管怎麼調整build.gradle配置,都無法下載權限庫rxpermissions。可能rxpermissions許久未更新,被倉庫除名了吧。只能刪除build.gradle裏的rxpermissions導包語句,同時去掉App工程中涉及到RxPermissions代碼。
為了補償rxpermissions的動態授權校驗功能,需要開發者自行添加相關的運行時權限驗證邏輯,具體代碼參見《Android Studio開發實戰:從零基礎到App上線(第3版)》一書的“6.3.3 運行時動態申請權限”。
四、運行RedPlayer
解決了rxpermissions的導包問題之後,把RedPlayer安裝到手機上,啓動App的初始界面如下圖所示:
點擊首頁列表的第一項“URL/JSON”,在新頁面填入一個網絡視頻地址,再點擊右下角的Play按鈕,跳到播放頁面如下圖所示。
可見RedPlayer能夠正常播放網絡視頻。
更多詳細的FFmpeg開發知識參見《FFmpeg開發實戰:從零基礎到短視頻上線》一書。