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(* ̄▽ ̄*)ブ

 

posted @ 2022-04-10 21:48  向往而生  阅读(365)  评论(4编辑  收藏  举报