和朋友线上一起看同一场比赛,但各自用不同的直播源(不同平台、不同主播):各家延迟不一样,进球了,领先的人先喊出来——剧透了。
现有 watch-party 工具(Teleparty、Metastream、SyncWatch 等)都基于同一个前提:所有人看同一个视频流,靠广播 currentTime 同步。它们解决不了"两个独立直播流"的场景,因为不同流的播放时间戳互不相通。
SiuTogether 同步的不是"播放进度",而是"比赛进度"。
| 现有 watch-party 工具 | SiuTogether | |
|---|---|---|
| 同步对象 | 播放进度(同一流的 currentTime) | 比赛进度(跨流的比赛大钟) |
| 适用场景 | 大家看同一个视频/流 | 各看各的平台,同一场比赛 |
| 对齐信号 | 共享的 currentTime | OCR 识别的比赛计时器 |
| 体育直播 | 多数明确不支持严格延迟直播 | 正是核心场景 |
不同平台播同一场比赛,唯一可靠的公共锚点是画面里的比赛计时器(足球角落的 67:23、篮球的节倒计时)。
- 每人打开自己的直播源,框选画面里的比赛大钟
- OCR 锁定读数后转为本地走表(亚秒级相位,之后不依赖持续识别)
- 各自把"我的比赛时间"上报到房间,算出谁领先、领先多少
- 只对领先者下手:连续控制律
rate = 1 − lead/T平滑降速,直到追平;领先太多则冻屏 + 静音防剧透
关键约束:直播流看不到未来,永远只能让领先者变慢,不能让落后者快进。
降速在任意站点生效的三件套:跨域 iframe 逐帧注入 + 速率复读(对抗播放器复位)+ currentTime 原型锁(吞掉直播追帧,攒出的落后不会被吃回去)。
知道自己大概快了几秒?侧栏「🐢 手动放慢」输入秒数、点一下:半速播放攒出指定延迟后自动恢复 1×,进行中可随时点击提前恢复。与房间、校准完全独立——朋友在微信里喊一句"你快了 10 秒",输 10 点一下就对齐了。攒出的延迟同样由进度锁守住,不会被直播追帧吃回去。
- 下载安装包(Windows;SmartScreen 提示时点「更多信息 → 仍要运行」)
- 打开一场比赛直播 → 框选比赛计时器 → 开始 OCR 并确认时间
- 和朋友约一个 6 位房间码,各自加入
- 领先的一方点「校准」,几秒后同步
软件内置同样的五步新手引导,跟着走即可。
SiuTogether lets friends watch the same live sports match from different streaming sources, perfectly in sync — no more spoilers from whoever's stream runs ahead.
Unlike watch-party tools that broadcast a shared currentTime (and therefore require everyone to watch the same stream), SiuTogether syncs on the only anchor that exists across independent streams: the game clock on screen. Each client OCRs its own match timer, reports game time to a room, and the leading side smoothly slows its player (rate = 1 − lead/T) until everyone is aligned. It never seeks forward — live streams have no future to seek to. Excessive leads trigger a spoiler-proof freeze + mute.
There's also a standalone one-click manual slowdown: type how many seconds you want to fall behind and the player runs at half speed until exactly that delay is banked (seek-locked so live-edge chasing can't eat it back) — no OCR, no room required.
Under the hood: Electron + Tesseract.js OCR with a lock-confirm-deadreckon state machine, a dumb WebSocket relay, and a three-part slowdown kit (per-frame injection across cross-origin iframes, rate re-assertion against player resets, and a currentTime prototype lock that defeats live-edge chasing).
Download for Windows · MIT licensed
cd app
npm install
npm start # 开发模式
npm test # 单元测试(走表/控制律)
npm run dist:win # 打 Windows 安装包到 app/dist/app/— Electron 桌面应用(主进程逐帧注入、OCR、走表、房间客户端)server/— WebSocket 信令服务器(哑中继,按房间广播成员状态)slowdown-lab/— 独立降速实验台(逐站验证三件套用)docs/— 官网(GitHub Pages)
