需求文档

主功能清单

  • 观看直播
  • 直播录制
  • AI 拓展

暂缓修复内容

  1. 本地播放或许可改为“显示时间轴”开关,仍然串流播放,只是单独提供回退功能
  2. 布局切换卡住
  3. 心跳包(API)
  4. 账户登录与退出

细节清单

  • 观看直播
    • 直播播放
      默认使用 FLV 协议进行直播串流播放;本地播放需开启录制功能使用 ffmpeg 解复用后封装成 fmp4 切片播放。
    • 布局选择
      提供15种默认布局,和1种自定义布局,共16种。
    • 设置记忆
      播放器设置(直播间、画质、线程和布局等)保存在 config.yaml 文件中,设置选项保存在 settings.yaml 文件中。
    • 基本控制(视频、音频、画质、房间号、线路)
    • 全局控制
    • 登录
    • 直播间监测(是否开播,已播时间,距上次直播时间)
    • 直播间快速设置
    • 2弹幕渲染
    • SC 显示
    • 布局边界控制
      模仿 blender 前端操作,提供调整、拆分和合并等功能。
    • 快速回放(开启视频录制后增加进度控制条)
      在设置中:“直播缓存设置”选项用于控制串流缓存大小(内存占用)
      与刷新的交互还需要优化
    • 设置(顶部控制栏新增“设置”选项)
  • 直播录制
    • 1视频录制
      开启“即时重放”时观看界面仍以串流形式播放,另启用 ffmpeg 进程在后台保存 fmp4 分片,使用缓存持续限制并保留默认150个分片用于即时重放,“保存即时重放”将最新的 N 个分片合并导出为 MP4 文件;
      录制功能将解除对分片数量的限制,“停止录制”可以停止录制并所有最后片段。
      在设置中:添加“录制缓存设置”选项,即时重放缓存大小(环形缓存分片数量),添加“磁盘占用”选项用于设置磁盘占用上限,分为全部(cache 文件夹占用)上限和窗口(对应 room 文件夹占用)上限(不设置为无上限,达到上限时优先删除最旧的分片)
    • 2弹幕录制
    • SC 录制
    • 3热点切片(按弹幕密度) / 关键词切片(用于舆情监测,可嵌入 AI 功能)
      (待定)弹幕密度每30分钟计算平均密度,切片每30秒获取热点(超出平均密度时)。
  • AI 功能
    • 4音频转字幕
    • 直播(切片)总结

优化

代码结构

  • 现代化
  • 模块化
  • 设计模式

性能

  • 内存
  • 显存
  • 延迟
  • 速度

笔记

seekablecache= yes/no 影响。

技术分析

FLV 是 http 长连接,请求一次后服务器持续返回视频流数据。网络抖动断连需要重新连接 2RTT 额外延迟。flv 容器通过每帧的 tag 播放,无需等待延迟低。
HLS 是不断轮询的短请求序列,获取视频分片,等待切片延迟较大。hls 容器有时长和序列号,可以支持回退。fmp4 容器比 ts 容器的时间戳更精确,且使用索引文件保存初始化信息,每个分片精简。