danmaQ 主仓库地址在
https://github.com/tuna/danmaQ ,目前在
https://github.com/prnake/danmaQ 进行打包工作。
开源弹幕系统改进 - 结项报告
项目信息
- 项⽬名称:开源弹幕系统改进
- 项目描述:项目的目标是实现一个跨平台、易部署、易拓展的一套全功能的开源弹幕系统。主体考虑使用 Node.js 或 Python 编写服务端和客户端,再与已有的一些开源弹幕方案和弹幕网站融合,实现一套支持可拓展的多发送源、弹幕处理、弹幕多样化展示的通用弹幕系统,覆盖用户需求。
- 项目详细方案:
- 总体要求
- 尽量保证与当前Comment9和danmaQ代码的兼容性
- 所有代码使用 MIT 许可证开源
- 所有项目均需要中英双语支持(国际化支持)
- 弹幕服务端
- 支持独立的多个活动,按需留存记录,能够导出,能够回放弹幕或基于弹幕生成字幕文件
- 发布、订阅、审核可以单独设置密码
- 每个活动分别支持多种接入(包括网页、微信、Telegram,后续支持 Bilibili 主动监听等平台)
- 支持多种不同属性的弹幕(颜色、位置、速度)
- 支持 Web 弹幕墙(用户可通过命令或自动化设置头像、昵称等)
- 具有 Web 版管理后台,支持审核并设置属性(人工置顶等),并且有一定的自动化拓展能力
- 具有 HTTP / WebSocket API,能够主动向客户端推送弹幕
- 保留弹幕机配置功能
- 有良好的性能表现
- 配备 Dockerfile,能够简便地部署运行
- 弹幕客户端(Qt)
- 支持多显示器,并能够选择弹幕在哪些显示器上工作
- 在各个系统上均正确支持高分屏(HiDPI),兼容OBS
- 能够根据服务器推送的弹幕和属性,正确进行绘制
- (可选)支持故障恢复(自动重连+跳过已经发送的弹幕)
- 有良好的性能表现
- 支持多种显示模式,比如滚动和列表
- 弹幕Web端
- 通过第三方开源播放器,在直播视频流上添加弹幕显示功能
- 支持直播回放的弹幕以及视频弹幕功能
- 具体实现视开发进度决定
- 项目开发时间计划
- 第一阶段项目研发
- 07/01 - 07/07 调研目前开源弹幕方案,研究 Comment9 和 danmaQ ,确定技术路线,兼顾性能,并设计弹幕服务端和弹幕客户端之间的通讯逻辑
- 07/08 - 07/15 重构弹幕绘制逻辑,使其同时兼容客户端和 Web 端,并能达到当前主流弹幕网站(Bilibili)的显示能力,并具有较高的拓展能力,基本实现弹显示功能,并完善设计文档
- 07/16 - 07/31 构建弹幕服务端和弹幕客户端之间的通讯逻辑,实现服务器推送弹幕的正确接受与绘制,增强弹幕客户端在不稳定网络下的故障恢复能力
- 08/01 - 08/15 在 Comment9 基础上升级弹幕服务端,完善各种功能并实现可拓展的弹幕接入(包括网页、微信、Telegram等),打通服务端与客户端,最终打包成docker实现一键化部署
- 第二阶段项目研发
- 08/16 - 09/30 基于第一阶段考核结果做相应改进,整理项目代码,实现语言国际化,完善相关文档,增强代码的易拓展性,实现版本的自动化打包发布,并提交软件包到 dockerhub 及 AUR 等仓库,进一步实现易用性。
项目产出
danmaQ
主仓库地址在 https://github.com/tuna/danmaQ ,目前在 https://github.com/prnake/danmaQ 进行打包工作。
使用 QT5 + Socket.IO 优化原有代码。
- 支持多显示器,并能够选择弹幕在哪些显示器上工作
- 在各个系统上均正确支持高分屏(HiDPI)
- 支持故障恢复
- 有良好的性能表现
- 支持滚动、置顶、置底等多种显示模式
- 能方便快捷的配置,与 Comment9 弹幕服务器相连
Comment9
项目架构

主仓库地址在 https://github.com/prnake/comment9 ,当前已进入 awesome-danmaku 列表。
下面对主仓库的 README 部分进行摘录,详细内容请查看仓库。
Comment9
A simple & powerful danmaku framework.





介绍
Comment9 是一个开源、简单易用、易于扩展的实时弹幕服务框架。
特性
- 弹幕服务器
- 支持多样化、可拓展的高级弹幕
- 弹幕发送系统能够使用网页、微信、Telegram、API等多种方式接入
- 使用 Socket.IO 实现弹幕的稳定推送
- 支持弹幕的自动和人工审核
- 易用的 Web 后台管理系统
- 支持独立的多用户与多个活动
- 发布、订阅、审核等不同角色相互独立的权限控制系统
- 支持导出弹幕历史数据
- 易于拓展的弹幕发送系统和弹幕审核系统
- 中日英多语言支持
- 弹幕网页端
- 支持弹幕墙、弹幕列表、直播等多样化的弹幕展示与发送方式
- 基于 CommentCoreLibrary 的高级弹幕支持
- 基于 blivechat 的可用于 OBS 的 YouTube 风格弹幕列表
- 弹幕桌面端 danmaQ
- Qt5 实现的跨平台桌面弹幕播放器
- 支持高分屏与多显示器选择的全屏弹幕置顶播放层
- 快捷订阅 Comment9 服务器,支持自动重连
- 支持带色彩的滚动、置顶和底部弹幕
Demo
我们使用 Comment9 部署了一个测试活动,提供弹幕墙、弹幕列表墙、弹幕视频播放器、弹幕网页发送器与 Telegram 机器人 @comment9_bot 进行测试,可能需要自行发送弹幕来查看效果。
也可以直接访问弹幕墙、弹幕列表墙和弹幕视频播放器的测试页面查看弹幕较多时的效果。
下面是 Comment9 的 Web 后台管理系统截图

核心项目
许可证

方案进度与项目完成质量
完成方案进度中除将新版 danmaQ 提交外的所有需求,同时具有易用性和扩展性,项目完成质量高。
遇到的问题及解决方案
- C++ 原生方案 socket.io-client-cpp
- 修改后通过编译,发现 cpp 版本协议不完善,比如不支持sub_url,不能同时支持none_tls和tls,存在不一致问题
- 可以通过修改代码解决,但仍然存在未知潜在风险
- 只支持WS,不能自动回退到HTTP长轮询方式
- 好处:原生
- QWebChannel 实现 C++ & js 混合方案
- 完美支持 socket.io,并且 QWebChannel 本身的 chromium 内核带来了连接的稳定性保证
- 缺点:打包和性能问题
最终选择了QWebChannel 实现 C++ & js 混合方案,性能问题在正常设备(能流畅使用Chrome)上没有感知,同时优化分发包大小至100M。
项目数据库选择
项目使用 MongoDB 作为存储数据库,同时使用 Redis 方便缓存与进行原子操作。实现弹幕数据的低延时广播。
项目编译与打包
danmaQ 通过Cmake 编译,Comment9 使用 yarn 管理。
通过 Github Actions 实现 QT5 项目 danmaQ 的 Windows,MacOS 和 Linux 在 amd64 架构上的自动打包和发布,以及 Node.js 项目 Comment9 自动打包为 Docker 镜像并推送到 Dockerhub。
弹幕社区生态
弹幕开源生态中存在很多较好但疏于维护的项目,例如本项目跟随的 CommentCoreLibrary 就存在文档不清晰,对 Node.js 支持不好的问题。同时目前基本不存在类似 Comment9 的在近3年维护的开源弹幕服务框架。
danmaQ 多屏幕显示 debug
完成多屏幕显示部分,自动检测屏幕变化后重设
修改了部分depressed 的代码
解决了Cmake文件编译的一系列问题
国际化
在 danmaQ 和 Comment9 中都采用了 i18n 的国际化方案,并实现了简繁日英的本地化。
与导师沟通及反馈情况
每周固定时间汇报工作,每两周发布工作报告一次,与导师沟通状况好。
项目未来发展
danmaQ 和 Comment9 在设计时是为了实现即时的弹幕服务(例如直播),Comment9 页考虑到了弹幕视频的服务,预留了基于时轴的弹幕信息,同时 CommentCoreLibrary 也有对带时轴弹幕的支持。未来考虑加入对基于时轴的视频弹幕支持,同时支持直播回放。
未来还要考虑硬件弹幕机的相关适配工作。