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