OpenHarmony实战开发-如何视频弹幕功能。

介绍

本示例介绍如何使用@ohos.danmakuflamemaster和@ohos.gsyvideoplayer开发支持视频弹幕的播放器。可以自定义弹幕样式、占据屏幕宽度,发送弹幕,开关弹幕视图。

效果图预览

在这里插入图片描述
使用说明

  1. 点击播放按钮,进行视频播放,弹幕自动开启
  2. 点击“弹幕关”按钮,关闭弹幕
  3. 点击“发送弹幕”按钮,发送一条弹幕,弹幕内容为“这是一条弹幕”+当前时间戳

实现思路

1.初始化播放器

videoInit: (iVideoPlayer: IVideoPlayer, xid: string) => void = (iVideoPlayer: IVideoPlayer, xid: string) => {this.mIVideoPlayer = iVideoPlayer;this.xComponentId = xid;this.mIVideoPlayer.setUp(this.videoModel.getUrl(), this.videoModel.getCacheWithPlay());
}

2.初始化弹幕

danmuInit() {let maxLinesPair: Map<number, number> = new Map();maxLinesPair.set(BaseDanmaku.TYPE_SCROLL_RL, 5); // 滚动弹幕最大显示5行// 设置是否禁止重叠let overlappingEnablePair: Map<number, boolean> = new Map();...this.mContext = DanmakuContext.create();//设置弹幕样式this.mContext.setDanmakuStyle(DANMAKU_STYLE_STROKEN, 3).setDuplicateMergingEnabled(false)...if (this.model != null) {this.mParser = this.createParser();this.model.setCallback(new Call(that));// 设置弹幕点击事件监听this.model.setOnDanmakuClickListener(new OnDanMu(that));...}
}

3.添加弹幕

/** 使用BaseDanmaku类初始化弹幕实例,并设定一系列弹幕的参数值,包括弹幕内容、样式等* 添加到提前实例化的弹幕模型model对象上*/
private addDanmaku(isLive: Boolean) {if (this.mContext) {let danmaku: BaseDanmaku = this.mContext.mDanmakuFactory.createDanmaku(BaseDanmaku.TYPE_SCROLL_RL);danmaku.text = "这是一条弹幕" + SystemClock.uptimeMillis();danmaku.padding = 5;danmaku.priority = 0; // 可能会被各种过滤器过滤并隐藏显示danmaku.isLive = isLive.valueOf();// 是否为在线弹幕danmaku.setTime(this.model.getCurrentTime() + 1200);if (this.mParser) {danmaku.textSize = 25 * (this.mParser.getDisplayer().getDensity() * 0.8);}danmaku.textColor = 0xffff0000;danmaku.textShadowColor = 0xffffffff;danmaku.borderColor = 0xff00ff00;this.model.addDanmaku(danmaku);}
}

4.解析弹幕

/** DanmakuParser类中包含了对弹幕数据的解析方法,解析每条弹幕的开始/结束时间、样式、内容等*/
private createParser(): BaseDanmakuParser {let parser: BaseDanmakuParser = new DanmukuParser();let jsonSource = new JSONSource(sourceData);parser.load(jsonSource);return parser;
}

5.本地自定义弹幕数据文件,格式如下

{"DanmakuType":4,"alphaDuration":0,"beginAlpha":0,"beginX":0,"beginY":0,"duration":0,"endAlpha":0,"endX":0,"endY":0,"index":1,"isQuadraticEaseOut":false,"rotationY":0,"rotationZ":0,"text":"hhhhhhhhh","textColor":-9946501,"textShadowColor":-16777216,"textSize":25,"time":219370,"timeOffset":0,"translationDuration":0,"translationStartDelay":0
}

6.创建video的播放、初始化以及暂停事件的emitter,在对应事件开启监听

let videoPlayEvent: emitter.InnerEvent = {eventId: 1
};
let videoInitEvent: emitter.InnerEvent = {eventId: 2
};
let videoPauseEvent: emitter.InnerEvent = {eventId: 3
};

高性能知识点

不涉及

工程结构&模块类型

danmakuplayer                          // har类型
|---/src/main/ets/model                        
|   |---DanmakuData.ets                // 数据模型层-列表数据模型 
|   |---DanmakuParser.ets              // 数据模型层-列表项数据模型
|---/src/main/ets/view                        
|   |---VideoView.ets                  // 视图层-场景列表页面

模块依赖

@ohos/routermodule(动态路由)

如果大家还没有掌握鸿蒙,现在想要在最短的时间里吃透它,我这边特意整理了《鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程》以及《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

OpenHarmony APP开发教程步骤:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

《鸿蒙开发学习手册》:

如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【位运算】Leetcode 只出现一次的数字 ||

题目解析 137. 只出现一次的数字 II 算法讲解 nums中要么一个数字出现三次&#xff0c;一个数字出现一次&#xff0c;按照比特位来说只可能出现上面的四种情况&#xff1a; 3n个0 0 或者 3n个0 1 或者 3n个1 0 或者 3n个1 1&#xff0c;它们相加的结果依次是0&#xff0c;…

websocket 连接,http 协议下用 ws, https 协议下必须要使用 wss

解决方案&#xff1a; https 相当于使用 httpssl 认证&#xff0c;使用 https 时 websocket 访问&#xff08;比如建立链接时&#xff09;必须要使用 wss。 详细解释&#xff1a; WebSocket 协议有两个主要版本&#xff1a;“ws”和“wss”。"ws"表示非加密的 Web…

【机器学习300问】77、什么是梯度消失和梯度爆炸?

一、梯度消失&#xff08;Vanishing gradients&#xff09; &#xff08;1&#xff09;定义 在训练深度神经网络时&#xff0c;随着误差梯度从输出层向输入层逐层回传&#xff0c;梯度可能因为连乘效应逐渐减小。当使用激活函数的导数的最大值小于1时&#xff0c;深度网络中越…

qt-C++笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响

qt-C笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响 —— 2024-04-13 code review! 文章目录 qt-C笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响1.结论2.关于异步执行在堆上声明 QProcess在栈上声明 QProcess 3.waitForFinished详解函数原…

动静态库详解

文章目录 动静态库动态库静态库动静态链接 动静态库 库LinuxWindows动态库.so.dll静态库.a.lib 动静态库的本质就是文件。lld ldd命令可以查看一个可执行程序所依赖的库文件 ldd code&#xff1a;查看code依赖的库文件 平台要支持开发&#xff0c;必须要提前在系统中安装&am…

flutter书架形式格口的动态创建(行、列数,是否全选的配置)

根据传入的行列数创建不同格口数量的书架 左图&#xff1a;5行3列、右图&#xff1a;3行3列 代码 import package:jade/bean/experienceStation/ExpCellSpecsBean.dart; import package:jade/configs/PathConfig.dart; import package:jade/utils/DialogUtils.dart; import p…

基于SpringBoot+Vue的外卖点餐网站 免费获取源码

项目源码获取方式放在文章末尾处 项目技术 数据库&#xff1a;Mysql5.7/8.0 数据表&#xff1a;12张 开发语言&#xff1a;Java(jdk1.8) 开发工具&#xff1a;idea 前端技术&#xff1a;vue html 后端技术&#xff1a;SpringBoot 功能简介 (有文档) 项目获取关键字&…

K8s: 在Pod中将configmap数据注入容器

configMap 概述 文档: https://kubernetes.io/zh-cn/docs/concepts/configuration/configmap/ Kubernetes 为我们提供了 ConfigMap&#xff0c;可以方便的配置一些变量 是一个存储键值对 key-value 对象的 创建一个可以包含多个键值对的 ConfigMap, 以下是&#xff1a;mul-c…

Java 笔试强训篇- Day1

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 点击消除 1.1 解题思路一 1.2 解题思路二 2.0 在两个数组中找出相同的数 2.1 解题思路 笔试强训说明&#xff1a;有一些题目提供不了原题。 1.0 点击消除 该题链…

Group Query Attention (GQA) 机制详解以及手动实现计算

Group Query Attention (GQA) 机制详解 1. GQA的定义 Grouped-Query Attention (GQA) 是对 Multi-Head Attention (MHA) 和 Multi-Query Attention (MQA) 的扩展。通过提供计算效率和模型表达能力之间的灵活权衡&#xff0c;实现了查询头的分组。GQA将查询头分成了G个组&#…

事务的传播行为介绍和事务失效

常用的就下图介绍的这两种&#xff0c;REQUIRED 支持当前事务&#xff0c;如果不存在&#xff0c;就新建一个&#xff0c;EQUIRES_NEW 如果有事务存在&#xff0c;挂起当前事务&#xff0c;创建一个新的事务 同一个service中必须用代理对象调用&#xff0c;否则失效

使用go和消息队列优化投票功能

文章目录 1、优化方案与主要实现代码1.1、原系统的技术架构1.2、新系统的技术架构1.3、查看和投票接口实现1.4、数据入库MySQL协程实现1.5、路由配置1.6、启动程序入口实现 2、压测结果2.1、设置Jmeter线程组2.2、Jmeter聚合报告结果&#xff0c;支持11240/秒吞吐量2.3、Jmeter…

java中MD5加密

MD5加密 MD5加密是不可逆的加密方式&#xff0c;A可以根据MD5加密转换成B&#xff0c;但是B不能再转换成A String passwordDigestUtils.md5DigestAsHex(password.getBytes());完成密码的加密

【情侣博客网站】

效果图 PC端 建塔教程 第一步&#xff1a;下载网站源码&#xff08;在文章下方有下载链接&#xff09; 第二步&#xff1a;上传到服务器或虚拟主机&#xff0c;解压。 第三步&#xff1a;这一步很关键&#xff0c;数据库进行连接&#xff0c;看图 admin/connect.php就是这…

[Android]Jetpack Compose设置颜色

在 Kotlin 和 Jetpack Compose 中设置颜色是一个非常直接的过程&#xff0c;涉及到使用 Color 类来定义和使用颜色。 Jetpack Compose 提供了多种方式来定义和应用颜色&#xff0c;包括预定义颜色、RGB 值、十六进制值等。下面是一些常用的设置颜色的方法&#xff1a; 1. 使用…

python-基础(4)-list

python专栏地址 上一篇:python-基础(3)-字符串操作 List结构 本节将学习以下内容 list初识list的操作 一、List初识 创建 通过[]/list([])创建 &#xff0c;两者的区别可以参考python中用list和中括号创建列表有什么区别&#xff1f;(在创建时相同&#xff0c;但一个的实质时…

Spring Data Jpa的save方法更新未传值的字段被更新为空的处理方法

Spring Data Jpa的save()方法通过主键是否为空来判断insert或是update操作&#xff0c;但更新方法和以往使用的mybatis-plus存在一定的差异&#xff0c;特别记录处理方法。 Resourceprivate Dao dao;/*** 更新操作* param data 前端传入存在更新的字段值的对象*/public void up…

pat乙-1020月饼

贪心&#xff1a;既然有存货量一定&#xff0c;利润要最高&#xff1b; 这个贪心就在于我看“单价”最高&#xff0c;这个单价也是要把存货量算进去的&#xff0c;所以按“单价”排序&#xff0c;再遍历&#xff0c;优选选择“单价”最高的&#xff0c;不够的再补&#xff0c;…

el-menu 该有的页面显示不出来第一个应该想到的问题首先就算检查是否多写了一个 , 导致显示不出来原有的页面

问题描述 el-menu 该有的页面显示不出来第一个应该想到的问题首先就算检查是否多写了一个 , 导致显示不出来原有的页面 如图所示多写了一个&#xff0c;就会导致该有的页面显示不出来。

Python 天气预测

Python天气预测通常涉及到数据采集、数据预处理、选择和训练模型、以及预测和可视化等步骤。以下是使用Python进行天气预测的一般流程&#xff1a; 数据采集 使用爬虫技术从天气网站&#xff08;如Weather Underground、中国天气网等&#xff09;爬取历史天气数据&#xff0c…