鴻蒙開源第三方組件 ——B站開源彈幕庫引擎的遷移(上)
鴻蒙入門指南,小白速來!0基礎學習路線分享,高效學習方法,重點答疑解惑—>【課程入口】
目錄:
前言
基於github上嗶哩嗶哩開源項目(//github.com/bilibili/DanmakuFlameMaster),進行了鴻蒙化遷移和重構,可實現彈幕的隱藏、顯示、暫停、繼續、發送、定時發送彈幕等一系列的功能,代碼已經開源到(//gitee.com/isrc_ohos/danmaku-flame-master_ohos ),歡迎各位下載使用並提出寶貴意見!
為了更加清晰的介紹彈幕庫的作用和使用方法,本文將從基礎知識、使用方法、 sample解析三個方面進行講解。
一、彈幕庫的基礎知識
彈幕庫是一個開源的三方庫,在正式講解彈幕庫的使用之前,我們先來了解下第三方庫的含義。
第三方庫是指除本地類庫、系統類庫以外的類庫,需要後來安裝,才能調取使用。 簡單來講,相當於其他人寫好了代碼,實現了一些功能接口,我們直接調用這些接口,就可以實現一些我們想要的功能。舉個例子:在一個應用中實現視頻緩存功能(斷網後可繼續播放提前緩存的內容),如果想要自己實現的話,需要調用鴻蒙/安卓底層的方法,代碼量非常大。如果已經有第三方庫可以做到這點,並且開源了出來,那麼你只需要引用他的第三方庫,然後調用此庫內公開的一些方法接口,簡簡單單的幾行代碼就可以實現緩存功能。
了解了什麼是第三方庫,現在我們來看彈幕庫組件。 看視頻時,彈幕是必不可少的互動功能,這個功能就是調用了彈幕庫組件來實現的。現在我們已經實現了彈幕庫功能在鴻蒙平台的構建,接下來我們一起深入了解下鴻蒙平台的彈幕庫吧!
二、彈幕庫的使用方法
關於彈幕庫第三方組件的使用方法,我們準備了視頻教學,大家可以下載使用哦~
視頻教學版鏈接://www.bilibili.com/video/BV1Dy4y1i7cG/
三、sample解析
導入彈幕庫組件後,其整個項目的文件結構如下:
整個項目有2個module:entry和DanmakuFlameMaster。
在這裡大家可以簡單的理解:
==》 「DanmakuFlameMaster」就是之前提到的【第三方庫】,它裏面實現了彈幕功能的 所有細節。
==》 entry就是一個具體的「客戶端」module,它聲明了在鴻蒙程序中的所有運行細節。
==》 最後跑起來的程序就是entry,entry裏面實現了所有功能,包括界面、按鈕、功能等等,只不過entry調用了第三方庫「DanmakuFlameMaster」,使用 了它的能力來實現了一些彈幕相關的功能。
本篇文章主要介紹如何在已經構建好了「DanmakuFlameMaster」這個第三方庫的基礎上,來進行「entry」的開發。
為了節省篇幅,此處我們使用一個已經開發完成了的sample,接下來以這個sample為例,向大家講解彈幕庫組件的應用及效果。
將entry展開之後,我們可以看到,真正的代碼是真的很少,主要的功能都集中在MainAbility和MainAbilitySlice文件中,加起來的代碼量也就不到1000行。
接下面我們對這兩個文件進行逐個解析。
1、MainAbility,它是一切應用的入口。根據鴻蒙能力,這裡是可以通過setMainRoute()方法調用很多的Slice來進行功能的實現,上圖標記的代碼就是聲明了MainRoute在MainAbilitySlice之中。
2、MainAbilitySlice,這個文件比較重要。
這個文件主要包括:import文件、初始化函數、功能實現函數三個部分。
(1)、import 文件
此處import的文件可以分為三類:SDK文件、應用內文件和三方件文件。
== 》 SDK文件: import後路徑為ohos…..的。
== 》應用內文件:import後路徑為com.huawei……的。
== 》三方庫文件:import後路徑為master.flame.danmuku……的。
(2)、初始化函數:
如圖所示,初始化函數一共包含六個,我們將其分為五個部分,這五個部分與圖中函數的順序對應如下:UI初始化、視頻源的設置與播放(2個函數)、輸出系統內存信息、設置數據源(這裡的數據指的是彈幕數據)以及彈幕輸出。這五個部分之中,我們主要講解其中的與彈幕庫密切相關的部分:UI初始化、彈幕數據源與彈幕輸出。
1)onStart方法實現了UI初始化
以上代碼構建了彈幕庫的顯示窗口 設置了屏幕參數的讀取 。
2)彈幕數據源和最終的彈幕輸出
這兩個部分有強相關,我們放在一起來介紹。
第一步:聲明全局變量 mParser用來承載彈幕數據。
第二步:在加載數據源處調用了我們的第三方庫的BiliDanmukuParser類,然後從我們的resources中讀取彈幕數據:
可以看到在datasource其實就是讀取了這裡的文件,大家可以自己點進去看一下這個文件內容,裏面就是我們的「彈幕數據庫」。
第三步:將載入了彈幕的BaseDanmakuParser類對象,return給全局變量mParser(如果大家想找到這部分代碼的話,可以到findview()中去尋找)。
3、功能實現函數
在UI上可見的一些按鈕,每個按鈕都對應一個callback函數,點擊按鈕,執行對應的函數體,實現相關功能。
上圖所示為點擊不同的按鈕,出現不同的彈幕效果,例如:隱藏彈幕、顯示彈幕、暫停彈幕等。
項目貢獻人
熊軼翔 鄭森文 朱偉 陳美汝 呂澤
作者:小雪糕123
想了解更多內容,請訪問: 51CTO和華為官方戰略合作共建的鴻蒙技術社區//harmonyos.51cto.com