Springboot+Dplayer+RabbitMQ实现视频弹幕延时入库
编写之初,在网上找了很多关于springboot整合dplayer实现弹幕的方式,发现案例很少,然后自己就着手写一个小项目,分享给大家~
注:Dplayer版本:v1.22.2
流程:前端自定义弹幕发送与获取方式 =》后端进行接收,格式转化,入队(延时队列),散列入库时间,减少服务器压力
话不多说,先看效果图:
代码示例:
我使用的是前后端分离的方式,下列分别展示前端和后端的代码:
1、前端dplayer参数:
这里只展示了options里面的自定义弹幕参数和弹幕配置参数,其它的参数配置请看dplayer的官网http://dplayer.js.org/guide.html#quick-start
apiBackend里面是自定义弹幕的接收和发送方式,如果没有配置这个apiBackend,则必须在danmaku里面需要加上api参数来指定获取和发送弹幕的路径
注:执行callback函数时会把获取的数据设置到视频弹幕列表里面,执行cb函数时(发送弹幕),会把发送弹幕的对话框关闭掉
让我们来看看前端接收弹幕时获取的数据格式把:起初我以为第三列字段是颜色的十六进制(也就是要把#fff转为16.....),但后来发现就是默认的发送时的颜色数据#xxx而已,并不需要转换!
需要转换的仅仅只有弹幕类型type,下面会介绍,我们继续往下看~
再来看看后端是如何获取弹幕列表进行格式转化的:
根据视频id去数据库查弹幕列表最多2000条,然后利用parseDanmakuListToArray方法把数据库弹幕列表转成Object类型的数组
参数字段顺序分别是:时间、类型(0、1、2)、颜色#xxx、作者、内容
因为我数据库的弹幕类型存的是top、bottom这种类型的,在转化的时候就要用到另一个方法把类型转一下:
再来看看弹幕实体类:
起初我有加上颜色十进制colorTen这个字段,因为网上都是把颜色转为十进制的,但是我发现我的版本用这样的方式颜色无效,所以我就使用#xxx的方式,这里我保留了颜色十进制这个字段,也可以去掉这个字段。
这样就完成了弹幕的获取和展示拉,接下来再来看看怎么实现弹幕延时入库的:
前端发送弹幕的数据:
后端接口代码:后端以Map方式接收弹幕参数,然后设置到弹幕实体类对象中,校验调用者的token(没有的可以忽略),然后再调用延时队列弹幕入队(调用完后台等待一定时间(1小时的随机时间,毫秒)消费者会去消费这条弹幕并把它插入数据库中),最后返回
来看看RabbitMq的配置信息:
注意,rabbitmq需要下载插件rabbitmq_delayed_message_exchange,配置后重启mq才能实现延时队列的功能
插件地址:https://www.rabbitmq.com/community-plugins.html
请下载与自己mq版本对应的插件!!
下载后就是一个这样的文件
把这个插件放到mq服务的插件目录下,比如我的是在/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.5/plugins/
然后在/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.5/sbin中执行rabbitmq-plugins enable rabbitmq_delayed_message_exchange启用插件
最后重启RabbitMq就可以了rabbitmq-server restart
接下来我们编写消息发送者的类:
消息消费者类(消费弹幕参数,插入数据库):
发送一条弹幕后,查看后台延时入库日志:
到这里就完成了弹幕的延时插入还有展示的功能了,感谢观看~o(* ̄▽ ̄*)ブ
Springboot+Dplayer+RabbitMQ实现视频弹幕延时入库的更多相关文章
- springboot使用RabbitMQ实现延时任务
延时队列顾名思义,即放置在该队列里面的消息是不需要立即消费的,而是等待一段时间之后取出消费.那么,为什么需要延迟消费呢?我们来看以下的场景 订单业务: 在电商/点餐中,都有下单后 30 分钟内没有付款 ...
- SpringBoot集成RabbitMQ
官方说明:http://www.rabbitmq.com/getstarted.html 什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ ...
- SpringBoot系列八:SpringBoot整合消息服务(SpringBoot 整合 ActiveMQ、SpringBoot 整合 RabbitMQ、SpringBoot 整合 Kafka)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 整合消息服务 2.具体内容 对于异步消息组件在实际的应用之中会有两类: · JMS:代表作就是 ...
- python 爬取B站视频弹幕信息
获取B站视频弹幕,相对来说很简单,需要用到的知识点有requests.re两个库.requests用来获得网页信息,re正则匹配获取你需要的信息,当然还有其他的方法,例如Xpath.进入你所观看的视频 ...
- SpringBoot集成rabbitmq(二)
前言 在使用rabbitmq时,我们可以通过消息持久化来解决服务器因异常崩溃而造成的消息丢失.除此之外,我们还会遇到一个问题,当消息生产者发消息发送出去后,消息到底有没有正确到达服务器呢?如果不进行特 ...
- SpringBoot之RabbitMQ的使用
一 .RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件,消息中间件的工作过程可以用生产者消费者模型来表示.即,生产者不断的向消息队列发 ...
- SpringBoot集成RabbitMQ消息队列搭建与ACK消息确认入门
1.RabbitMQ介绍 RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面表现不俗.Rabbi ...
- Spring-boot之 rabbitmq
今天学习了下spring-boot接入rabbitmq. windows下的安装:https://www.cnblogs.com/ericli-ericli/p/5902270.html 使用博客:h ...
- springboot学习笔记-6 springboot整合RabbitMQ
一 RabbitMQ的介绍 RabbitMQ是消息中间件的一种,消息中间件即分布式系统中完成消息的发送和接收的基础软件.这些软件有很多,包括ActiveMQ(apache公司的),RocketMQ(阿 ...
随机推荐
- .NET 6学习笔记(4)——如何在.NET 6的Desktop App中使用Windows Runtime API
Windows Runtime API是当初某软为了区别Win32 API,力挺UWP而创建的另一套Windows 10专用的API集合.后来因为一些原因,UWP没火.为了不埋没很有价值的Window ...
- python用ffmpeg进行视频处理
1.下载及安装 在ffmpeg官网https://ffmpeg.zeranoe.com/builds/可以下载到需要的版本,然后解压到D盘,添加环境变量(如D:\ffmpeg\bin) 在cmd输入f ...
- 4.websocket基本概念
websockey的模式就是在于当前端向后端发送请求创建一个websocket链连接之后,连接默认不断开,前端和服务端就维护了一个连接,前端可以通过连接给服务端发消息,服务端也可以通过连接给前端发消息 ...
- 【神经网络】softmax回归
前言 softmax回归为一种分类模型. 基本原理 由于softmax回归也是一种线性叠加算法,且需要输出离散值. 很自然地想到,可以取值最大的输出为置信输出.更进一步想到,如果有三个人A.B.C分别 ...
- 什么是ForkJoin?看这一篇就能掌握!
摘要:ForkJoin是由JDK1.7之后提供的多线程并发处理框架. 本文分享自华为云社区<[高并发]什么是ForkJoin?看这一篇就够了!>,作者: 冰 河. 在JDK中,提供了这样一 ...
- C#接口设计
基本架构 model 实体 说得通俗一些,model中主要是定义前端传过来的变量以及其类型,或者是需要操作的数据库中的某些字段值.举个例子: namespace Test.Models.Book { ...
- MFC 学习笔记
MFC 学习笔记 一.MFC编程基础: 概述: 常用头文件: MFC控制台程序: MFC库程序: 规则库可以被各种程序所调用,扩展库只能被MFC程序调用. MFC窗口程序: 示例: MFC库中类的简介 ...
- perl文件操作
Perl 文件操作 Perl 使用一种叫做文件句柄类型的变量来操作文件. 从文件读取或者写入数据需要使用文件句柄. 文件句柄(file handle)是一个I/O连接的名称. Perl提供了三种文件句 ...
- 2022春每日一题:Day 16
题目:不同子串个数 这题需要利用后缀数组求出的height的性质,我们发现对于每个后缀,他的height后的所有子串就是算在答案里,因此答案只需要求出n-height[i]-sa[i]+1的和就可以了 ...
- Go语言核心36讲49
我们在上一篇文章中简单地讨论了网络编程和socket,并由此提及了Go语言标准库中的syscall代码包和net代码包. 我还重点讲述了net.Dial函数和syscall.Socket函数的参数含义 ...