鴻蒙開源第三方組件 -B站開源彈幕庫引擎的遷移(上)
前言
基于github上嗶哩嗶哩開源項目(https://github.com/bilibili/DanmakuFlameMaster),進行了鴻蒙化遷移和重構,可實現彈幕的隱藏、顯示、暫停、繼續、發送、定時發送彈幕等一系列的功能,代碼已經開源到(https://gitee.com/isrc_ohos/danmaku-flame-master_ohos ),歡迎各位下載使用并提出寶貴意見!
為了更加清晰的介紹彈幕庫的作用和使用方法,本文將從基礎知識、使用方法、 sample解析三個方面進行講解。
一、彈幕庫的基礎知識
彈幕庫是一個開源的三方庫,在正式講解彈幕庫的使用之前,我們先來了解下第三方庫的含義。
第三方庫是指除本地類庫、系統類庫以外的類庫,需要后來安裝,才能調取使用。 簡單來講,相當于其他人寫好了代碼,實現了一些功能接口,我們直接調用這些接口,就可以實現一些我們想要的功能。舉個例子:在一個應用中實現視頻緩存功能(斷網后可繼續播放提前緩存的內容),如果想要自己實現的話,需要調用鴻蒙/安卓底層的方法,代碼量非常大。如果已經有第三方庫可以做到這點,并且開源了出來,那么你只需要引用他的第三方庫,然后調用此庫內公開的一些方法接口,簡簡單單的幾行代碼就可以實現緩存功能。
了解了什么是第三方庫,現在我們來看彈幕庫組件。 看視頻時,彈幕是必不可少的互動功能,這個功能就是調用了彈幕庫組件來實現的。現在我們已經實現了彈幕庫功能在鴻蒙平臺的構建,接下來我們一起深入了解下鴻蒙平臺的彈幕庫吧!
二、彈幕庫的使用方法
關于彈幕庫第三方組件的使用方法,我們準備了視頻教學,大家可以下載使用哦~
視頻教學版鏈接:https://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函數,點擊按鈕,執行對應的函數體,實現相關功能。
上圖所示為點擊不同的按鈕,出現不同的彈幕效果,例如:隱藏彈幕、顯示彈幕、暫停彈幕等。
項目貢獻人
熊軼翔 鄭森文 朱偉 陳美汝 呂澤