CyTube 介绍与选型指南
CyTube(开源多人协同观看室服务器)介绍与选型指南:2013 年 synchtube 复刻的项目沿革、Node.js+Socket.IO+MySQL 架构与同步播放机制、媒体源嵌入体系、功能特性、快速开始、适用限制,附与 SyncTube/Jellyfin SyncPlay/Owncast 的量化选型对比(2026-10-28 联网溯源)。
CyTube 介绍与选型指南
目标:全面认识 CyTube 这款开源「多人协同观看室」服务器,掌握其同步播放机制、媒体源嵌入体系、架构形态与同类产品的定位差异,为「远程一起看片 / 社区观影室」场景选型提供依据。本篇为认知篇,全部信息来自官方仓库、官方 Wiki 与官方实例的联网溯源(查询日期 2026-10-28),不含本地实测内容。
一、环境信息
本篇信息来源与查询环境说明:
| 项目 | 内容 |
|---|---|
| 查询日期 | 2026-10-28 |
| 源码仓库 | https://github.com/calzoneman/sync |
| 当前版本 | 3.86.1(取自 3.0 分支 package.json 实查) |
| 最新 Git 标签 | v3.36.1(2017-05-16,此后转为 3.0 分支滚动发布) |
| 分支活跃度 | 3.0 分支最后提交 2026-10-01(Bump fast-uri 依赖,GitHub 实查) |
| 开源许可 | MIT |
| 项目星数 | 约 1.6k(shields.io GitHub stars 徽章,2026-10-28) |
| 官方运营实例 | https://cytu.be |
| 作者 | Calvin Montgomery(GitHub:calzoneman / cyzon@cytu.be) |
| 官方文档 | 安装指南与用户指南见仓库 Wiki:https://github.com/calzoneman/sync/wiki |
💡 说明:CyTube 自 2017 年起不再使用 GitHub Releases 发版,最新稳定版以
3.0分支的package.json版本号为准(本篇实查为 3.86.1)。官方 Wiki 明确说明该分支是「CURRENT」当前版本。
二、软件概述
CyTube 是一个用 Node.js 编写的自托管「协同观看室」(synchronized viewing)服务器,由 Calvin Montgomery 于 2013 年初启动,最初的动机是给已关站的 synchtube.com 做一个个人复刻。它的核心概念用官方 README 的一句话即可概括:用户注册一个个「频道」(channel),频道内的所有观众可以一起观看来自不同视频平台(如 YouTube、Twitch)的嵌入内容,播放进度由服务器统一同步;每个频道自带播放队列(观众往里排队添加视频)和集成聊天室。
它的定位非常明确——「多人同步看片 + 聊天」的观影室服务器,而不是媒体库服务器:CyTube 自身不存储、不转码视频文件,播放的是外部平台的嵌入播放器(YouTube/Vimeo 等)或你自托管内容的 HTTP 直链;「同步」这件事由服务器计时器权威驱动,而不是各端各自播放后对表。
- 谁适合用它:异地朋友组团看电影/动画/视频合集、兴趣社区(动漫、音乐、影视)运营一个长期观影室、直播间场景下的「陪看/齐看」频道。
- 谁不适合:想把自己的电影库像 Netflix 一样管理播放的(那是 Jellyfin/Navidrome 类媒体库服务器的领域);想做一对一单向直播的(那是 Owncast 类直播服务器的领域)。
💡 技术拓展:「同步观看」在自托管领域有三类典型实现路径——
路径 代表产品 原理 特点 观影室服务器 CyTube、SyncTube 服务器权威计时器 + 播放指令广播,播放外部平台嵌入内容 内容不落地、天然支持公网平台视频 媒体库内置群播 Jellyfin(SyncPlay 功能) 服务端对各客户端播放进度对齐,播放自己媒体库的内容 适合自建片库,内容须先入库 直播服务器 Owncast 等 主播推流、观众拉同一路流,天然同步 单向广播,无「观众点播排队」语义 CyTube 属于第一类:它的价值在「内容来自平台、进度由服务器钉死、房间可定制」。
三、核心架构
CyTube 是一个单进程 Node.js 应用(官方运营的 cytu.be 大站也是同一套架构加集群扩展),架构层面有以下要点(均实查自 3.0 分支源码与官方 Wiki):
3.1 技术栈与组件
| 组件 | 版本(package.json 实查) | 作用 |
|---|---|---|
| Node.js | 推荐 Active LTS | 运行时;代码经 Babel 构建到 lib/ |
| Express | ^4.22.1 | HTTP 服务器:页面、账号、频道管理 REST 路由 |
| Socket.IO | ^4.5.4 | 实时通道:聊天、播放同步、队列操作全部走它 |
| knex | ^2.4.0 | 数据库访问层 |
| MySQL/MariaDB | ≥ 5.5.3(官方要求,utf8mb4 字符集) | 唯一数据库;源码中无 sqlite/pgsql 支持路径 |
| redis(可选) | ^3.1.1 | 多实例集群时的发布订阅/共享状态 |
| prom-client(可选) | ^13.1.0 | Prometheus 指标暴露(配合 conf/example/prometheus.toml) |
| ffmpeg/ffprobe(可选) | 系统二进制 | 直连原始视频文件时探测时长/编码 |
| @cytube/mediaquery | GitHub 独立仓库引用 | 各媒体平台的链接解析与元数据获取 |
3.2 服务端口模型
CyTube 的监听端口由 config.yaml 的 listen 数组定义,每个条目可同时声明 http(页面/接口)、https(TLS)、io(Socket.IO)三种服务标志。默认模板监听两个端口:
- 8080:HTTP 页面与 REST 接口;
- 1337:Socket.IO 实时通道(聊天 + 同步播放指令)。
生产环境典型做法(官方 Wiki 附录 A/B 给出 nginx 与 Caddy 两个范例):反代只转发 HTTP,WebSocket 走 8443 的 HTTPS 端口直连(listen 中声明 https: true, io: true 的条目)。
3.3 数据与状态存储
- MySQL 数据库:用户、频道注册、频道媒体库(channel library)、别名(alias)、封禁记录等持久数据,由 knex 迁移脚本在首次启动时建表;
- chandump/ 目录:每个频道一个 JSON 快照文件(播放队列、聊天过滤、权限表等频道状态),按
channel-save-interval(默认 5 分钟)周期落盘; - 日志目录:
logs/下按类型分文件(错误、风险操作、频道操作等)。
官方 Wiki 的备份建议即由这两部分组成:mysqldump 导出数据库 + tar 打包 chandump 目录。
3.4 权限模型
CyTube 的等级(rank)体系贯穿全局:
- 频道内等级:0(访客)→ 1(注册用户)→ 2(版主)→ 3(频道管理员)→ 4(频道所有者);
- 站点级管理员:数据库
users表中global_rank >= 255的账号,可进站点管理后台(ACP)、管理全部频道; - 首个站点管理员不能在界面上点出来,官方指南的做法是首账号注册后用 SQL
UPDATE users SET global_rank=255 WHERE name='...'手工授予。
3.5 协议与扩展
- 官方没有文档化的 REST/机器人 API;Wiki 明确说明写机器人应复用官方前端所用的同一套 Socket.IO 消息协议;
socketconfig.md(仓库 docs/ 目录)描述了客户端如何通过socketconfig/<频道>接口发现可用的 Socket.IO 端点;bin/admin.js提供站点管理命令行(如ban-channel/unban-channel),service-socket配置项允许把命令行通过 UNIX socket 暴露给外部服务(PM2 等无 stdin 场景)。
四、功能特性
以下特性均可在官方 Wiki/FAQ 与 3.0 分支源码中对应到出处:
同步播放核心
- 服务器计时器权威驱动播放:暂停、跳转(seek)由服务器统一广播
mediaUpdate(默认每 5 秒),防止误操作打断全房间; - 「Leader」机制:临时把控制权授给某个用户,让普通人也能暂停/拖进度条;
- voteskip(投票跳过)内建,可审计记录。
播放队列与媒体库
- 频道播放队列:排队添加、拖动排序、收藏进频道媒体库(library)复用;
- 单用户队列上限
playlist.max-items(默认 4000)。
媒体源嵌入体系(官方 FAQ「Which media providers are supported」实查)
- YouTube(视频、播放列表)、Vimeo、Dailymotion、Soundcloud、Streamable、Livestream、Twitch(直播/VOD/剪辑)、HLS 直播流;
- HTTPS 直链视频(MP4/H.264、WebM/VP8、WebM/VP9、Ogg/Theora 等浏览器可播放格式),原始文件由服务器 ffmpeg 探测元数据后全房间同步;
- 自托管内容(custom media):通过自定义 manifest JSON 让服务器同步播放你放在自己服务器上的视频,配合
ffmpeg.enabled: true使用; - 明确不再支持:Google Drive(官方已弃用且不提供支持)、年龄限制类 YouTube 视频(Google 2020 年起禁止第三方站点嵌入)。
聊天与社区
- 集成聊天室:表情(emote)、聊天过滤器(chat filter)、消息长度限制(默认 320 字符)、新账号聊天限制(防灌水,
docs/new-account-chat-restrictions.md); - 频道可深度定制:CSS、频道 JS、投票(poll,默认最多 50 个选项)、频道 blacklist/保留名规则;
- 用户别名(alias)自动清理机制(默认 1 个月过期,每小时清扫)。
站点管理
- 站点管理后台 ACP +
bin/admin.js命令行(频道封禁等,2022-09 起内置 ban-channel 等子命令); - 频道注册数限制(默认每用户 5 个)、每 IP 注册账号数限制(默认 5)、游客登录节流(默认 60 秒);
- YouTube Data v3 API Key 配置(站内 YouTube 搜索需要)、Twitch Client ID(VOD 查询需要)。
五、快速开始(最小可用示例)
以下步骤来自官方 Wiki《CyTube 3.0 Installation Guide》的精简转述(本篇为认知篇,未做本地实测;逐命令实测与排障见本专栏后续部署与运维篇目),用于建立整体认知:
# 1. 依赖:Debian/Ubuntu 需要 build-essential、git、MariaDB 与 Node.js Active LTS
sudo apt update && sudo apt install build-essential git mariadb-server
# 2. 从官方仓库克隆 3.0 分支(当前版本线)
git clone -b 3.0 https://github.com/calzoneman/sync
# 3. 以非 root 用户安装依赖(官方明确警告:root 执行 npm 会跳过 postinstall 导致安装不完整)
cd sync
npm install
# 4. 生成配置文件(模板注释详尽),修改 MySQL 连接与监听端口
cp config.template.yaml config.yaml
# 5. 启动(前台进程;首次启动自动建表、初始化日志与频道数据目录)
node index.js
启动后浏览器访问 http://服务器IP:8080 即可注册账号;首个账号再通过 SQL 提升为站点管理员(global_rank=255)。官方 Wiki 同时给出 nginx/Caddy 反代 + TLS 的完整范例配置。
⚠️ 注意:官方 Wiki 开篇即声明「当前安装与配置流程对新手不友好」,需要具备 Linux 系统管理、Web 服务器与数据库基础。这正是多数用户选择容器化/Compose 方式部署的原因。
六、适用场景与限制
适合的场景
- 异地亲友观影夜:房间即开即用,往队列里丢 YouTube/直链视频就能全房间同步看,聊天一边聊;
- 兴趣社区常驻观影室:频道媒体库沉淀片单,CSS/JS 定制房间风格,等级体系交给社区自治;
- 自建片源的同步放映厅:custom media + 自托管直链,把自有服务器上的 MP4/WebM 做成同步放映;
- 机器人增强的自动化房间:基于 Socket.IO 协议写 Bot(官方 Wiki 收录了 PonkBot、CytubeBot 两个开源 Bot)实现自动点歌/排片。
明确的限制(官方渠道明示)
- 不是媒体库服务器:不管理本地影片集、不做转码、没有海报墙;
- 无官方移动端 App(Wiki FAQ 明确),移动浏览器可用但体验一般;
- 无文档化 REST API,自动化需走 Socket.IO 协议或
bin/admin.js; - Google Drive 播放已弃用;年龄限制 YouTube 视频无法嵌入;
- 直链必须 HTTPS(浏览器混合内容策略),HTTP 直链在官方 HTTPS 站点上不可用;
- Windows 不支持(官方兼容性表),Linux 64 位为第一公民;
- 项目由作者个人业余维护(IRC 社区支持),大版本特性趋稳,重心在依赖升级与缺陷修复。
七、同类选型对比
结合「协同观看」这一核心诉求,选取三个常见对比对象做量化定位对比(数据查询日期 2026-10-28;SyncTube 仓库状态、CyTube 版本/星数当日实查,Jellyfin SyncPlay 与 Owncast 定位以其官方 README/文档为准):
| 维度 | CyTube 3.86.1 | SyncTube(Kagami/synctube) | Jellyfin(SyncPlay) | Owncast |
|---|---|---|---|---|
| 定位 | 多人协同观看室(平台视频嵌入 + 聊天) | 同为 synchtube.com 复刻的轻量观影室 | 全功能媒体库服务器的群体同步播放 | 自托管直播服务器(主播→观众) |
| 内容来源 | YouTube/Vimeo/Twitch/HLS/HTTPS 直链/自托管 custom media | 外部平台嵌入 | 自己媒体库的本地影片(须先入库) | 主播实时推流(RTMP→HLS) |
| 同步机制 | 服务器计时器权威 + Socket.IO 广播 | Socket.IO 广播 | SyncPlay 服务端对齐各客户端进度 | 同一路流,天然同步 |
| 聊天 | 内建(表情/过滤/等级) | 内建(轻量) | 有(SyncPlay 房间聊天) | 内建(直播聊天,支持机器人集成) |
| 观众点播/排队 | 强(队列 + 频道媒体库 + 投票跳过) | 有队列 | 无点播排队语义(片库决定内容) | 无(单向广播) |
| 技术栈 | Node.js(Express + Socket.IO)+ MySQL | Node.js(较老) | C#/.NET + SQLite/PostgreSQL | Go + 可选外部存储 |
| 资源占用 | 轻量(官方:小实例含 nginx/DB 可在 512MB 内存内运行) | 轻量 | 中等(转码/扫描开销) | 轻量到中等(转码时上升) |
| 许可 | MIT | MIT | GPL-2.0 | GPL-2.0…MIT 混合(以仓库为准) |
| 维护状态(2026-10-28 实查) | 3.0 分支滚动更新,最后提交 2026-10-01 | GitHub 仓库已 404(2026-10-28 核验),实质停止维护 | 活跃(大社区) | 活跃 |
如何选:
- 要「一起看平台上的视频 + 聊天 + 谁都能点歌」→ CyTube:唯一在本组对比中把「观众排队点播 + 频道自治 + 聊天」做成完整闭环且仍在活跃维护的观影室服务器;
- 想看的是自己的电影库且需要海报墙/刮削/转码 → Jellyfin(开 SyncPlay):影片管理是它的事,同步观看只是附属功能;
- 要做的是直播(一人播、大家看)→ Owncast:定位完全不同,与观影室互补而非竞争;
- 看到旧文章推荐 SyncTube → 慎选:其 GitHub 仓库已不可访问(2026-10-28 核验 404),CyTube 即其同类中事实上的存续者。
八、参考链接
- 官方源码仓库(GitHub):https://github.com/calzoneman/sync
- 官方安装指南(Wiki):https://github.com/calzoneman/sync/wiki/CyTube-3.0-Installation-Guide
- 官方用户指南(Wiki):https://github.com/calzoneman/sync/wiki/CyTube-3.0-User-Guide
- 官方 FAQ(媒体源支持清单):https://github.com/calzoneman/sync/wiki/Frequently-Asked-Questions
- 自托管内容(custom media)文档:https://github.com/calzoneman/sync/blob/3.0/docs/custom-media.md
- Socket 端点发现文档:https://github.com/calzoneman/sync/blob/3.0/docs/socketconfig.md
- 官方运营实例:https://cytu.be
- 星数取证(shields.io):https://img.shields.io/github/stars/calzoneman/sync