Skip to content

Versifine/bilistalk

Repository files navigation

bilistalk

bilistalk 是一个自托管的 B 站直播自动跟踪和录播工具。

当前版本已经实现一个可运行的 MVP:

  1. 添加 B 站 UID、直播间 ID 或直播间链接。
  2. 持续轮询直播状态。
  3. 主播开播后自动创建录制任务。
  4. 通过录制引擎接口调用外部录制工具。
  5. 用 SQLite 保存目标、状态、任务、会话和事件。
  6. 用 Web 页面查看目标、录制、任务和日志。
  7. 用 Docker Compose 部署,并把配置、数据库、录播文件挂载到宿主机。

目标

  • 容易配置:用户只需要关心目标主播、录播目录和少数必要设置。
  • 运行稳定:支持持久化状态、失败重试、健康检查、可恢复的任务状态。
  • 使用舒服:默认参数保守清晰,页面能直接看到当前状态和错误原因。
  • 引擎可替换:业务层负责跟踪、调度、状态和界面;录制引擎只是适配器。

当前实现

当前 MVP 是一个单进程 Node.js 服务:

  • 原生 HTTP API 和静态 Web 管理界面。
  • 基于 node:sqlite 的内置 SQLite 数据库。
  • YAML 配置。
  • B 站直播状态跟踪器。
  • 带重试状态的录制调度器。
  • 录制引擎接口。
  • streamlink 录制适配器,支持 Cookie 文件和可用流探测。
  • Docker Compose 部署,持久化目录为 /config/data/recordings

应用层不会把 UI、调度和 B 站跟踪逻辑绑定到某一个录制工具上。streamlink 只是第一个实现的引擎适配器。

快速启动

本地运行需要 Node.js 24 或更高版本。真正录制时还需要本机 PATH 中存在 streamlink

npm install
npm start

打开:

http://127.0.0.1:27110

Docker 部署会在镜像里通过 Python 虚拟环境安装新版 streamlink

docker compose up --build

持久化目录:

  • ./config:可选配置文件目录。
  • ./data:SQLite 数据库。
  • ./recordings:录播文件和元数据。

常用命令

npm run check
npm test
npm start

架构

配置
  -> 目标解析器
  -> B站直播状态跟踪器
  -> 录制调度器
  -> 录制引擎适配器
  -> 文件存储和元数据
  -> Web 管理界面和事件日志

边界划分:

  • B 站跟踪代码只负责判断目标是否开播。
  • 调度器决定什么时候创建任务、开始录制、停止录制、重试或恢复。
  • 录制引擎只负责执行录制命令并回报进程/会话状态。
  • 存储逻辑负责文件名、目录、磁盘检查和元数据。
  • Web 管理界面负责管理跟踪目标和展示状态,不包含录制业务逻辑。

配置示例

server:
  host: 0.0.0.0
  port: 27110

data:
  database_path: ./data/bilistalk.sqlite

storage:
  output_dir: ./recordings
  filename_template: "{date}/{streamer}/{start_time}_{title}"
  file_extension: ".flv"
  min_free_space_gb: 10

tracking:
  check_interval_seconds: 30
  request_timeout_seconds: 12

recording:
  engine: streamlink
  quality: best
  auto_retry: true
  retry_delays_seconds: [5, 15, 30, 60, 120, 300]
  streamlink:
    executable_path: streamlink
    # 如果 B 站需要登录才能拿到更高清晰度,可以挂载 cookies.txt 后启用。
    # 支持 Netscape cookies.txt、KEY=VALUE 行、KEY=VALUE; KEY2=VALUE2。
    # cookie_file: /config/bilibili.cookies.txt
    extra_args: []

targets:
  - uid: 123456
    name: example-streamer
  - room_id: 654321

大部分字段都有默认值。也可以不在 YAML 里写 targets,直接在 Web 管理界面中添加目标;界面添加的目标会写入 SQLite。

画质说明

默认录制策略是 quality: best,也就是优先选择 Streamlink 能看到的最高流。管理界面中每个目标都有“探测”按钮,可以查看当前直播间对 Streamlink 暴露了哪些流。

如果只能探测到 source,或者实际录出来仍是 720p,通常不是前端设置问题,而是未登录请求、Streamlink 插件或 B 站接口只返回了这些流。需要更高画质时,优先配置 recording.streamlink.cookie_file,让 Streamlink 以登录态请求直播流。

文档

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors