CyTube 介绍与选型指南

CyTube(开源多人协同观看室服务器)介绍与选型指南:2013 年 synchtube 复刻的项目沿革、Node.js+Socket.IO+MySQL 架构与同步播放机制、媒体源嵌入体系、功能特性、快速开始、适用限制,附与 SyncTube/Jellyfin SyncPlay/Owncast 的量化选型对比(2026-10-28 联网溯源)。

CyTubeCyTube流媒体自托管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.1HTTP 服务器:页面、账号、频道管理 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.0Prometheus 指标暴露(配合 conf/example/prometheus.toml)
ffmpeg/ffprobe(可选)系统二进制直连原始视频文件时探测时长/编码
@cytube/mediaqueryGitHub 独立仓库引用各媒体平台的链接解析与元数据获取

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 方式部署的原因。

六、适用场景与限制

适合的场景

  1. 异地亲友观影夜:房间即开即用,往队列里丢 YouTube/直链视频就能全房间同步看,聊天一边聊;
  2. 兴趣社区常驻观影室:频道媒体库沉淀片单,CSS/JS 定制房间风格,等级体系交给社区自治;
  3. 自建片源的同步放映厅:custom media + 自托管直链,把自有服务器上的 MP4/WebM 做成同步放映;
  4. 机器人增强的自动化房间:基于 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.1SyncTube(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)+ MySQLNode.js(较老)C#/.NET + SQLite/PostgreSQLGo + 可选外部存储
资源占用轻量(官方:小实例含 nginx/DB 可在 512MB 内存内运行)轻量中等(转码/扫描开销)轻量到中等(转码时上升)
许可MITMITGPL-2.0GPL-2.0…MIT 混合(以仓库为准)
维护状态(2026-10-28 实查)3.0 分支滚动更新,最后提交 2026-10-01GitHub 仓库已 404(2026-10-28 核验),实质停止维护活跃(大社区)活跃

如何选:

  • 要「一起看平台上的视频 + 聊天 + 谁都能点歌」→ CyTube:唯一在本组对比中把「观众排队点播 + 频道自治 + 聊天」做成完整闭环且仍在活跃维护的观影室服务器;
  • 想看的是自己的电影库且需要海报墙/刮削/转码 → Jellyfin(开 SyncPlay):影片管理是它的事,同步观看只是附属功能;
  • 要做的是直播(一人播、大家看)→ Owncast:定位完全不同,与观影室互补而非竞争;
  • 看到旧文章推荐 SyncTube → 慎选:其 GitHub 仓库已不可访问(2026-10-28 核验 404),CyTube 即其同类中事实上的存续者。

八、参考链接