鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)
鸿蒙入门指南,小白速来!0基础学习路线分享,高效学习方法,重点答疑解惑--->【课程入口】
目录:
前言
基于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函数,点击按钮,执行对应的函数体,实现相关功能。
上图所示为点击不同的按钮,出现不同的弹幕效果,例如:隐藏弹幕、显示弹幕、暂停弹幕等。
项目贡献人
熊轶翔 郑森文 朱伟 陈美汝 吕泽
作者:小雪糕123
想了解更多内容,请访问: 51CTO和华为官方战略合作共建的鸿蒙技术社区https://harmonyos.51cto.com
鸿蒙开源第三方组件 ——B站开源弹幕库引擎的迁移(上)的更多相关文章
- 鸿蒙开源第三方组件——SlidingMenu_ohos侧滑菜单组件
目录: 1.前言 2.背景 3.效果展示 4.Sample解析 5.Library解析 6.<鸿蒙开源第三方组件>文章合集 前言 基于安卓平台的SlidingMenu侧滑菜单组件(http ...
- 鸿蒙开源第三方组件——进度轮ProgressWheel
目录:1.前言2.背景3.组件功能展示4.Sample解析5.Library解析6.作者系列文章合集 前言 基于安卓平台的进度轮组件ProgressWheel(https://github.com/A ...
- 鸿蒙开源第三方件组件——轮播组件Banner
目录: 1.功能展示 2.Sample解析 3.Library解析 4.<鸿蒙开源第三方组件>系列文章合集 前言 基于安卓平台的轮播组件Banner(https://github.com/ ...
- iOS 项目中用到的一些开源库和第三方组件
iOS 项目中用到的一些 iOS 开源库和第三方组件 分享一下我目前所在公司 iOS 项目中用到的一些 iOS 开源库和第三方组件, 感谢开源, 减少了我们的劳动力, 节约了我们大量的时间, 让我们有 ...
- 公司用中会用到的iOS开源库和第三方组件(不断更新...)
分享一些目前我个人接触到的一些第三方组件和开源的库, 感谢开源, 减少了我们的开发成本, 节约了我们大量的时间, 让我们有更多的时间和精力专注做我们自己的产品.总有没有接触过的 , 总有你会用到的 , ...
- 【全网首发】鸿蒙开源三方组件--强大的弹窗库XPopup组件
目录: 1.介绍 2.效果一览 3.依赖 4.如何使用 5.下载链接 6.<鸿蒙开源三方组件>文章合集 1. 介绍 XPopup是一个弹窗库,可能是Harmony平台最好的弹窗库.它从 ...
- 鸿蒙第三方组件——SwipeCaptcha滑动拼图验证组件
目录:1.组件效果展示2.Sample解析3.<鸿蒙第三方组件>系列文章合集 前言 基于安卓平台的滑动拼图验证组件SwipeCaptcha( https://github.com/mcxt ...
- B站开源ijkplayer 等多个项目
弹幕视频网 Bilibili(B 站)近日在 GitHub 网站上建立了开源工作组(BOSTF),用以分享与维护自己的开源项目,其中包括 DanmakuFlameMaster(燃烧吧!烈焰弹幕使)与 ...
- Net Core开源通讯组件 SmartRoute
Net Core开源通讯组件 SmartRoute(服务即集群) SmartRoute是基于Dotnet Core设计的可运行在linux和windows下的服务通讯组件,其设计理念是去中心化和零配置 ...
随机推荐
- C++的匿名函数(lambda表达式)
总述 C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). 它是定义和使用匿名函数对象的一种简便的方式.匿名函数是我们需要用到的一个函数,但是又不想去费力命名一个函数的 ...
- 大整数四则运算(vector与数组两种版本实现)
每逢大整数四则运算,都会怯懦,虽是算法竞赛必会的东西,也零散的学过,简单的总结过,但不成体系的东西心里一直没底. 所以今天消耗了大量的卡路里,啃了几套模板之后终于总结成了一套自己的模板 再也不用担心大 ...
- P3355 骑士共存问题 (最小割)
题意:nxn的棋盘 有m个坏点 求能在棋盘上放多少个马不会互相攻击 题解:这个题仔细想想居然和方格取数是一样的!!! 每个马他能攻击到的地方的坐标 (x+y)奇偶性不一样 于是就黑白染色 s-> ...
- CodeForces - 1100E 二分+拓扑排序
题意: 一个n个节点的有向图,节点标号从1到n,存在m条单向边.每条单向边有一个权值,代表翻转其方向所需的代价.求使图变成无环图,其中翻转的最大边权值最小的方案,以及该方案翻转的最大的边权. Inpu ...
- C# 静态构造函数 和 非静态构造函数
静态构造函数是在构造函数方法前面添加了static关键字之后形成的,并且没有修饰符(public,private),没有参数. 特点:1.静态构造函数没有修饰符修饰(public,private),因 ...
- hutool学习总结
1. 为什么要学习Hutool的使用 Hutool官网 中文写的已经很清楚了 Hutool是一款强力的工具类.封装了工作开发中一些常见的功能操作.避免重复造轮子,使用它大大提高的开发效率. 2. Hu ...
- Zabbix 监控网站
官网教学步骤 配置 Web 监控 创建 Web 场景 配置 Web 场景 配置 Web 监控步骤 一共划分为 5 个步骤: 监测访问登录页面 模拟登录功能 # sid 变量的值 regex:name= ...
- Leetcode(885)- 救生艇
第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...
- HDU 6706 huntian oy(杜教筛 + 一些定理)题解
题意: 已知\(f(n,a,b)=\sum_{i=1}^n\sum_{j=1}^igcd(i^a-j^a,i^b-j^b)[gcd(i,j)=1]\mod 1e9+7\),\(n\leq1e9\),且 ...
- Ubuntu桌面消失
Ubuntu桌面消失 按Ctrl + Alt + F1, 切回文本模式, 输入用户名和密码登录. 重装桌面和unity: sudo apt-get update sudo apt-get instal ...