直播间、录制与弹幕
约 2840 字大约 9 分钟
不再需要监控某个直播间时,可在直播间卡片上点击「删除」并确认。正在录制的房间需先停止录制并等待收尾完成。删除会停止开播守候并取消该房间的录制预约,已有场次、录像、弹幕和切片仍然保留;重新添加同一直播间会恢复原有身份与历史记录,但不会自动恢复开播守候或旧预约。
直播间卡片可直接选择「开播后自动录制并分析」,同时启用两个开关并解除人工暂停;只保存单独开关仍保留原暂停状态。服务运行时显示守候、启动、录制、等待下一场及检测错误,程序退出或系统休眠时不会检测。录制前获取最新标题,所有录制入口(含 CLI、手动录制)在运行中默认每 30 秒刷新,单次超时 3 秒;页面轮询后可见。失败保留缓存并标注“上次获取”。场次保留开录标题、观测到的变更与结束标题,旧场次没有历史证据时显示未知;渲染片头按素材时刻的场次观测取标题,不改写已有成片或稿件。每日/每周预约在启动失败或房间已录制时也只创建一个后继,房间需开启「预约录制」。
# 在已下载并解压的 BiliLiveCut 项目根目录执行
# 按安装指南准备环境后,登记一个你有授权的直播间
blc add-room "https://live.bilibili.com/你的房间号" --authorize
# 查看 / 检查
blc list-rooms
blc check 你的房间号
# 开始录制(Ctrl+C 停止;默认值由 RECORDING_PIPELINE_ENABLED 控制)
blc record <db_id>录制产物位于 storage/raw/session_<id>/。默认以 300 秒为分片目标;FFmpeg 按实际关键帧落盘,因此单片时长会在 5 分钟附近小幅浮动。
开播事件守候
开启自动录制并确认授权后,内置 Bilibili 来源通过独立 WebSocket 长连接监听开下播事件。正常守候期间不再按固定间隔请求 B 站开播状态;首次连通和每次重连后补查状态,因此程序启动时已经开播、或断线期间错过通知,也能恢复守候。补查失败或状态未知时,按照「守候刷新与兼容轮询间隔」重试,同时遵守来源要求的等待时间;获得有效状态或收到新事件后结束旧补查。守候连接沿用登录优先、匿名回退、候选节点和心跳重连机制,不需要安装第三方 B 站 API 库。
带有效 live_time 的 LIVE 消息触发自动录制;连接期间不带开播时间的同名消息不作为一次新开播。PREPARING 表示下播或轮播,进入「下播收尾延迟」,延迟结束后再查询状态,并确认仍是原录制任务后才停录。停录复核失败或状态未知时,保留录制并按同一间隔重试;恢复直播的事件会撤销停录,旧复核不能停止替换后的录制任务。连接中断不会直接停止录制。人工暂停、授权、自动化开关,以及“等待下一次真实开播”的保护仍然生效。
补查与停录复核仅对临时故障和未知状态自动重试;认证、房间身份等永久错误会显示具体错误码,等待处理或后续连接重新建立。自动启动遇到临时故障时,监控器按守候刷新间隔重新应用最近的有效开播状态,无需等待另一条开播通知。重试仍检查授权、自动录制开关和人工暂停;新的下播通知或断线会取消旧启动重试,重连后先补查最新状态。
设置「采集弹幕」只控制录制期间的弹幕采集和保存,不关闭开播守候连接。守候连接不创建录制场次、不保存弹幕,也不调用采样器;录制启动后由原会话采集器按既有策略处理弹幕、礼物、醒目留言和进场互动。原始档仍在采样前保存收到的消息。
「守候刷新与兼容轮询间隔」用于刷新本地房间配置、回收已禁用的订阅,并为不提供事件能力的第三方直播源保留状态查询;它不控制 Bilibili 开播通知的速度。「下播连续确认次数」只用于查询型来源,事件型来源不要求重复收到多条下播通知。录制中的标题刷新仍独立按「直播标题刷新间隔」执行。
弹幕数据库与原始档
默认开启弹幕采集(设置中心的「采集弹幕」,对应 COLLECT_DANMAKU)。内置 Bilibili 来源无需另装直播源插件;能否接收消息取决于实际连接与平台限制,有 Cookie 时先尝试登录访问,失败按现有策略回退匿名连接。
数据库 storage/blc.db 的 danmaku 表继续用于分析,可能受密度采样影响。每场另存 storage/raw/session_<id>/danmaku.jsonl,在解析及数据库采样前保存收到的 Bilibili 消息;外部直播源插件保存校验后的公共事件。它记录已接收到的消息,不能补回断连期间的消息或旧场次。
每个直播间的入库保留规则
在「直播间」页面找到对应的 Bilibili 直播间,点击「弹幕保留」独立设置本房间的规则。已有房间未配置时沿用以下默认值:
| 消息类型或规则 | 默认值 |
|---|---|
| 普通弹幕保留率 | 30% |
| 礼物保留率 | 80% |
| SC 保留率 | 100% |
| 进场等互动保留率 | 100% |
| 高密度规则 | 开启 |
| 高密度阈值 | 1000 条/分钟 |
| 高密度普通弹幕保留率 | 10% |
比例支持 0%~100% 的整数,每项比例的 0% 表示该规则下不入库,100% 表示全部入库。开启高密度规则后,密度严格超过阈值时,普通弹幕改用高密度保留率;其他类型不受此阈值影响。如需普通弹幕始终全部入库,应将普通弹幕保留率设为 100%,并关闭高密度规则或将高密度保留率也设为 100%。密度沿用最近 60 秒的滑动窗口,按已识别消息的实际时间跨度折算,开始接收时也可能很快触发高密度规则。采样使用序号分桶,不按消息内容判断重要程度。
保存仅影响该房间之后收到的消息;录制中的采集器在下一批消息到来、且距上次读取规则至少 5 秒时刷新配置,无需重启录制。已入库的数据不会重采样。「恢复默认值」只修改表单,点击保存后才生效。
这些规则只控制分析数据库,原始 JSONL 仍在采样前写入收到的业务消息。上舰等当前未映射为数据库类型的消息仍只保存在原始档。插件来源保持其已有公共事件保存行为。
API 可通过 PATCH /api/rooms/{db_id} 的 room_config.danmaku_sampling 部分更新;概率使用 0~1、精度为 0.01,例如 {"room_config":{"danmaku_sampling":{"gift_rate":1.0}}}。未提交的采样字段、热词、别名与其他房间设置会保留。规则保存在原有房间配置 JSON 中,旧房间自动读取默认值,无需清空数据库。
原始档下载与保存
在工作台「弹幕」页选择场次,点击「下载原始弹幕(JSONL)」;也可访问 GET /api/sessions/{session_id}/danmaku-archive。录制中下载只包含请求时已写完的完整记录。每行含 version、kind、session_id、platform、source_id、UTC received_at 和 payload:session 是场次标识,raw 是 Bilibili 解码消息,normalized 是插件公共事件(含 occurred_at、content、user_name)。不写入连接鉴权包、Cookie 或宿主连接配置。
禁用采集或来源不支持弹幕时不生成文件。仅有场次标识不代表已成功连接或有弹幕,页面同时显示真实采集状态。磁盘或权限错误会显示写档失败并停止本场文件写入,数据库采集仍继续。每批写完即关闭文件;异常退出可能留下最后一条不完整记录,下载会排除该行。原片自动清理只删除媒体分段,弹幕原始档单独保留;请按需要归档或清理。
自动化开关
五个独立开关,可自由组合:
auto_record— 自动检测开播并录制auto_analyze— 自动转写 + 高光分析auto_render— 自动生成切片auto_approve— 高分候选自动批准auto_upload— 自动提交上传
每个开关逐阶段独立判断,修改后未完成任务按新配置执行。支持房间级别配置覆盖。
Portable Web 控制台可在“设置中心 → 房间自动化与端口”中按直播间独立修改上述五项开关;预约录制、阈值自学习、弹幕情绪与审核阈值也集中在同一页。房间级 auto_upload 需配合设置中心“上传与发布”分类的两个全局开关,并达到房间自动投稿分数阈值。
断流重连与登录回退
主播下播、断流或平台暂时无法返回播放地址时,录制器会继续重试,但不会无限挂起。连续失败达到 RECORDING_RECONNECT_MAX_ATTEMPTS(默认 20 次)或从断流开始经过 RECORDING_RECONNECT_MAX_ELAPSED_S(默认 180 秒)时,任一条件先满足都会自动结束本场录制并正常执行会话收尾。若平台仍报告直播中,自动监控会等待一次真实离线再允许下一次开播,避免立即进入相同失败循环;成功恢复并累计产出至少一个目标分段时长后,次数和计时才会归零,短末片不代表恢复。将某一项设为 0 可单独禁用该限制;两项都设为 0 时仍保留 20 次安全上限。所有等待(包括来源返回的 retry_after)都受剩余时长预算限制。磁盘、权限、FFmpeg 缺失和参数/编解码器故障直接结束为错误,并暂停自动重新启动;处理原因后手动启动或重新开启自动录制。网络、上游、受损直播输入及未知错误按预算重取流;HTTP 403 不直接解释为 Cookie 过期。
COLLECT_DANMAKU=true 时,录制器会按 Bilibili 直播网页的 WBI 请求格式获取短期弹幕 token。有已保存 Cookie 时优先使用登录请求,并以 Cookie 中的 DedeUserID 完成 WebSocket 鉴权;登录接口返回业务错误或登录鉴权被拒绝后,会立即改用不带 Cookie、uid=0 的匿名链路,录制和弹幕接收不会因此停止。匿名连接存活期间,程序按 DANMAKU_LOGIN_RETRY_INTERVAL_S 定时探测登录链路;单场累计失败达到 DANMAKU_LOGIN_RETRY_MAX_ATTEMPTS(默认 5 次,首次计入)后,本场不再发送 Cookie。将最大次数设为 0 可始终匿名采集。