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