从Python到Tauri+React:BiliLiveTool生态演进与bilibili-stream重构版对比分析
【免费下载链接】bilibili_live_stream_code获取B站直播推流码,支持开关播,管理直播标题、分区,显示弹幕和礼物。项目地址: https://gitcode.com/gh_mirrors/bi/bilibili_live_stream_code
BiliLiveTool(bilibili_live_stream_code)是一款开源的B站直播推流码获取工具,帮助你绕开直播姬,直接在 OBS 等第三方推流软件中开播。它支持开关播、管理直播标题与分区,并提供弹幕监控和礼物显示。本文将带你了解它的技术演进:从 Python 版到社区 Tauri + React 重构版(bilibili-stream),一次看懂两者的差异与取舍。
📌 项目概述:BiliLiveTool 能做什么
作为 B站直播推流码工具,它的核心能力集中在四点:
- 推流码获取:扫码登录后一键开播,获取 RTMP 和 SRT 两种推流码,粘贴到 OBS 即可开播
- 直播管理:开播时自定义标题、选择分区,支持随时关播
- 弹幕互动:实时监控弹幕、进场消息和礼物消息,也能反向发送弹幕
- 桌面体验:无边框窗口、系统托盘、最小化到托盘、多账号切换
⚠️ 提示:在 OBS 里点击"停止直播"并不会关闭 B站 的直播,必须回到本工具点击"停止直播"才能真正关播。
🏗️ Python 版架构解析:前后端如何协作
BiliLiveTool 采用经典的Python 后端 + 前端页面的桌面应用架构(当前版本见 VERSION,为 v2.3.17):
┌─────────────────────────────────────┐ │ 前端:Vue 3 + Vite(渲染界面) │ │ frontend/src/components/*.vue │ ├────────── pywebview JS 桥 ─────────┤ │ 后端:Python(API封装/托盘/状态) │ │ backend/services/(各业务服务) │ └─────────────────────────────────────┘关键模块路径(可点开直接阅读):
| 模块 | 职责 |
|---|---|
| main.py | 入口:创建无边框窗口、托盘图标、全局退出清理逻辑 |
| backend/api_service.py | 服务聚合层,向前端暴露 JS API,并把后端日志转发到界面 |
| backend/services/live_service.py | 开播/关播、分区列表同步、房间信息 |
| backend/services/danmu_service.py | 弹幕 WebSocket 长连接与消息分发 |
| backend/services/auth_service.py | 扫码登录与登录状态轮询 |
| backend/services/user_service.py | 多账号管理与配置持久化 |
| backend/services/window_service.py | 窗口最小化/最大化/隐藏等控制 |
前端由 frontend/package.json 可以看到是Vue 3 + Vite技术栈,界面拆分为 frontend/src/components/ 下的独立组件(推流码面板 RtmpPanel、弹幕面板 DanmuPanel、账号面板 AccountPanel 等),通过 frontend/src/api/bridge.js 调用 Python 暴露的方法。
🔑 两个值得一提的技术细节
1. WBI 签名算法B站 部分接口要求带 WBI 签名(w_rid+wts参数)。backend/get_wbi.py 完整实现了这套签名逻辑:从接口取回 img_key/sub_key → 按固定映射表打乱拼接 → MD5 计算签名。这也是很多"推流码"项目最容易踩坑的部分,直接拿来参考即可。
2. Protobuf 弹幕解析弹幕协议不是普通 JSON,而是二进制 Protobuf 消息。backend/dm.proto 定义了弹幕、进场、礼物、粉丝牌等数据结构,backend/dm_pb2.py 是由它生成的解析代码——这也是"礼物消息、进场消息"能被准确显示的基础。
⚙️ 打包方式:PyInstaller 单文件交付
Python 版使用PyInstaller 打包成单文件可执行程序(requirements.txt 中可看到 pywebview、PyQt5、pystray 等核心依赖)。好处是用户双击即用;代价也很明显:
- 启动时需先初始化 Python 运行时,冷启动偏慢
- 打包体积受 Qt 等依赖影响,分发体积较大
- macOS 适配一直是短板——README.md 中作者坦言"用不起 mac",macOS 端长期处于无人验证状态
正是这些痛点,催生了社区的 Tauri 重构版。
🔄 为什么会出现 Tauri + React 重构版
社区项目bilibili-stream(Zeppelinpp/bilibili-streamer)在保留核心功能的前提下,把技术栈整体迁移:
| 维度 | BiliLiveTool(Python 版) | bilibili-stream(Tauri 重构版) |
|---|---|---|
| 后端语言 | Python + pywebview | Rust(Tauri 2.x) |
| 前端框架 | Vue 3 + Vite | React 18 + TypeScript |
| 打包方案 | PyInstaller 单文件 | Tauri 原生打包 |
| 启动速度 | 较慢(Python 运行时) | 快(原生启动) |
| 包体积 | 较大 | 更小 |
| macOS 支持 | 需自行测试,长期无人维护 | 完整适配(托盘、窗口退出、深色模式) |
| 弹幕协议 | Protobuf(dm.proto) | 同样依赖 B站 protobuf 协议 |
⚖️ 怎么选?给新手的建议
- 想快速上手、二次开发→ 选 Python 版。Python 门槛低,backend/services/ 目录按业务拆分,改一个功能通常只需动一个文件;WBI 签名、Protobuf 弹幕解析的实现都很直观,是学习 B站 API 的好教材
- 想要更流畅的桌面体验、主要在 Mac 使用→ 选 Tauri 重构版。Rust 后端 + 原生窗口,启动快、体积小,且补齐了 macOS 端细节
- 想理解"桌面应用怎么做"→ 两个版本对照着看最有价值:同一个产品需求,在 Python/webview 与 Rust/Tauri 两套架构下,窗口管理、托盘、日志转发的写法差异一览无余
🚀 如何构建运行 Python 版
环境要求:Python 3.9+、Node.js 18+,按 README.md 的步骤操作:
git clone https://gitcode.com/gh_mirrors/bi/bilibili_live_stream_code cd bilibili_live_stream_code cd frontend && npm install && npm run build cd .. pip install -r requirements.txt前端构建产物在frontend/dist,再用 PyInstaller 打包(Windows 命令见 README.md 的"自行构建"章节),最终可执行文件位于dist目录。
💡 生态演进的三点启示
- API 层是资产,壳是消耗品:B站 的 WBI 签名、Protobuf 弹幕协议、登录态管理是两套版本共同的"灵魂"。重构时迁移成本最高的就是这些协议细节,而 UI 和窗口层可以随意替换。
- 跨平台短板会倒逼技术选型:Python 版在 macOS 上的维护困境,正是 Tauri 版最大的差异化卖点。
- 社区驱动的演进:从一个作者的单平台工具,到社区分叉补齐 Mac 适配——这就是开源生态"用脚投票"的典型案例。
如果你是主播或直播运营,BiliLiveTool 能让你用 OBS 自由配置推流参数;如果你是开发者,这套"B站直播推流码 + 弹幕"的完整实现,则是一份难得的实战参考。
【免费下载链接】bilibili_live_stream_code获取B站直播推流码,支持开关播,管理直播标题、分区,显示弹幕和礼物。项目地址: https://gitcode.com/gh_mirrors/bi/bilibili_live_stream_code
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考