btv 开发记录
需求文档
主功能清单
- 观看直播
- 直播录制
- AI 拓展
暂缓修复内容
- 本地播放或许可改为“显示时间轴”开关,仍然串流播放,只是单独提供回退功能
- 布局切换卡住
- 心跳包(API)
- 账户登录与退出
细节清单
- 观看直播
- 直播播放
默认使用 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秒获取热点(超出平均密度时)。
- 1视频录制
- AI 功能
- 4音频转字幕
- 直播(切片)总结
优化
代码结构
- 现代化
- 模块化
- 设计模式
性能
- 内存
- 显存
- 延迟
- 速度
笔记
seekable 受 cache= yes/no 影响。
技术分析
FLV 是 http 长连接,请求一次后服务器持续返回视频流数据。网络抖动断连需要重新连接 2RTT 额外延迟。flv 容器通过每帧的 tag 播放,无需等待延迟低。
HLS 是不断轮询的短请求序列,获取视频分片,等待切片延迟较大。hls 容器有时长和序列号,可以支持回退。fmp4 容器比 ts 容器的时间戳更精确,且使用索引文件保存初始化信息,每个分片精简。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 逸人の博客!
评论
