[OSPP2021 项目总结] 开源弹幕系统改进

152 views
Skip to first unread message

Papersnake

unread,
Sep 30, 2021, 6:50:26 AM9/30/21
to TUNA 主邮件列表
Comment9 发布在 https://github.com/prnake/comment9 ,目前已有完善文档,进入 awesome-danmaku 列表。
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

项目架构

img

主仓库地址在 https://github.com/prnake/comment9 ,当前已进入 awesome-danmaku 列表。

下面对主仓库的 README 部分进行摘录,详细内容请查看仓库。

Comment9

A simple & powerful danmaku framework.

GitHub Top Language
Build Status
Docker Image Size
License
FOSSA Status

介绍

Comment9 是一个开源、简单易用、易于扩展的实时弹幕服务框架。

特性

  • 弹幕服务器
    • 支持多样化、可拓展的高级弹幕
    • 弹幕发送系统能够使用网页、微信、Telegram、API等多种方式接入
    • 使用 Socket.IO 实现弹幕的稳定推送
    • 支持弹幕的自动和人工审核
    • 易用的 Web 后台管理系统
    • 支持独立的多用户与多个活动
    • 发布、订阅、审核等不同角色相互独立的权限控制系统
    • 支持导出弹幕历史数据
    • 易于拓展的弹幕发送系统和弹幕审核系统
    • 中日英多语言支持
  • 弹幕网页端
    • 支持弹幕墙、弹幕列表、直播等多样化的弹幕展示与发送方式
    • 基于 CommentCoreLibrary 的高级弹幕支持
    • 基于 blivechat 的可用于 OBS 的 YouTube 风格弹幕列表
  • 弹幕桌面端 danmaQ
    • Qt5 实现的跨平台桌面弹幕播放器
    • 支持高分屏与多显示器选择的全屏弹幕置顶播放层
    • 快捷订阅 Comment9 服务器,支持自动重连
    • 支持带色彩的滚动、置顶和底部弹幕

Demo

我们使用 Comment9 部署了一个测试活动,提供弹幕墙弹幕列表墙弹幕视频播放器弹幕网页发送器与 Telegram 机器人 @comment9_bot 进行测试,可能需要自行发送弹幕来查看效果。

也可以直接访问弹幕墙弹幕列表墙弹幕视频播放器的测试页面查看弹幕较多时的效果。

下面是 Comment9 的 Web 后台管理系统截图

manage_zh.png

核心项目

许可证

FOSSA Status

方案进度与项目完成质量

完成方案进度中除将新版 danmaQ 提交外的所有需求,同时具有易用性和扩展性,项目完成质量高。

遇到的问题及解决方案

socket.io 使用

  • 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 也有对带时轴弹幕的支持。未来考虑加入对基于时轴的视频弹幕支持,同时支持直播回放。

未来还要考虑硬件弹幕机的相关适配工作。


Reply all
Reply to author
Forward
0 new messages