douyinLive
一个基于 WebSocket 的抖音直播弹幕抓取工具,可作为独立服务运行,也可以作为 Go 库集成。
项目边界说明,请先阅读
> 本项目仅用于研究和记录抖音直播 WebSocket 链接的逆向获取、连接方式及基础数据接收流程。
> 本项目不承诺、也不负责保证任何具体业务消息一定能够收到或完整解析。礼物消息缺失、字段无法解析、消息结构变化或个别直播间数据不完整等问题,不作为本项目后续适配目标。
功能
- 实时接收弹幕、礼物、点赞、进场、关注等常见直播消息
- 单进程监听多个直播间
- 将消息转发到本地 WebSocket 客户端
- 支持本地签名以及可选 TikHub 在线签名
- 支持断线重连、未开播轮询和基础保活
- 可作为独立服务或 Go 库使用
- 提供只读 HTTP 查询、批量状态、URL 解析和 Prometheus 指标
快速开始
下载可执行文件
从 Releases 下载对应平台的压缩包并解压:
./douyinLive
Windows PowerShell:
.\douyinLive.exe
程序默认监听本地 1088 端口。直播间标识通过 WebSocket 路径传入,而不是启动参数:
ws://127.0.0.1:1088/ws/直播间标识
例如:
ws://127.0.0.1:1088/ws/516466932480
源码编译
git clone https://github.com/jwwsjlm/douyinLive.git
cd douyinLive
go build -o douyinLive ./cmd/main
./douyinLive
查看版本、commit 和构建来源:
./douyinLive --version
Docker
docker run --rm -p 1088:1088 ghcr.io/jwwsjlm/douyinlive:latest
长期运行、配置挂载和 Docker Compose 请阅读 Docker 部署文档。
公网部署提醒:是否把服务暴露到公网由使用者自行决定,项目不会强制开启 API Key。默认未配置 Key 时,HTTP API 和 WebSocket 均可匿名访问;若端口可从公网访问,建议配置api.key/APP_API_KEY,并配合防火墙、反向代理和限速策略。
HTTP API 与后端服务
很多项目会直接把 douyinLive 作为后端服务使用,因此 v2.2 系列在保留 Go 库用法和原有 WebSocket 行为的基础上,持续增强独立服务能力;v2.2.1 进一步补充了主播资料查询与服务稳定性修复:
- 不建立长期 WebSocket,也可以查询直播状态、直播间信息和主播公开资料
- 支持批量状态查询和
douyin.com直播间 URL 解析 - 提供
/health、/metrics和 OpenAPI 描述 - 支持自定义 WebSocket 路由,以及 HTTP/WebSocket 共用的可选 API Key
- 查询时可按配置使用房间 Cookie、全局 Cookie,或关闭预存 Cookie
作为 Go 库使用
安装:
go get github.com/jwwsjlm/douyinLive/v2
仅检查直播状态,不建立上游 WebSocket:
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
defer cancel()
live, err := douyinLive.NewDouyinLiveWithSlog("516466932480", slog.Default(), "")
if err != nil {
return err
}
defer live.Dispose()
status, err := live.CheckLiveStatus(ctx)
监听消息:
subscriptionID := live.SubscribeMessage(func(message *douyinLive.LiveMessage) {
fmt.Println(message.GetMethod())
})
defer live.Unsubscribe(subscriptionID)
if err := live.Start(); err != nil {
return err
}
完整的状态码、订阅接口、protobuf 解析和生命周期说明请阅读 Go 库使用文档。
配置
复制示例配置:
cp config.example.yaml config.yaml
./douyinLive --config ./config.yaml
默认使用 local 本地签名。需要 TikHub 时,可通过配置文件、环境变量或命令行切换:
./douyinLive --sign-provider tikhub --tikhub-key YOUR_TIKHUB_KEY
不要把 Cookie、TikHub Key、完整签名 URL 或日志中的敏感字段提交到仓库。详细配置见 配置文件文档。
文档
| 文档 | 内容 |
| --- | --- |
| 文档导航 | 全部详细文档入口 |
| Docker 部署 | Docker、Compose、配置挂载和长期运行 |
| CLI 使用指南 | 参数、日志、签名方式和故障排查 |
| 配置文件 | YAML、环境变量、Cookie 和配置优先级 |
| HTTP API | 直播间与主播资料查询、批量状态、URL 解析、认证和指标 |
| OpenAPI | HTTP API 的机器可读接口定义 |
| 作为 Go 库使用 | 状态检查、订阅、protobuf 和生命周期 |
| WebSocket 客户端与消息格式 | 客户端接入、系统状态和业务消息 |
| sign 包说明 | a_bogus 签名和 CookieManager 的直接调用 |
发布
普通提交、Pull Request 和推送标签均不自动运行 Actions。只有维护者明确需要发布正式版或测试版时,才在 Actions 的 release 工作流中选择 Run workflow 并填写已创建的版本标签;发布流程会完成一次验证、打包和可选 Docker 镜像发布。
Dependabot 自动更新已关闭,依赖由维护者手动更新。构建使用 Go 1.26 系列,当前为 1.26.8。
项目结构
douyinLive/
├── cmd/main/ # 独立服务入口
├── docs/ # 详细使用文档
├── examples/ # 脱敏示例与提交规则
├── internal/webcastsign/ # 内部签名实现
├── jsScript/ # Goja 兼容回退脚本
├── sign/ # HTTP 签名与 Cookie 逻辑
├── utils/ # 工具函数
├── douyin.go # 核心库接口
├── live_status_api.go # 库级直播状态检查
├── config.example.yaml # 配置示例
└── README.md