尚未检测到更新。GitHub 发布版本后会显示在这里。
制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Watch any movie together, in sync, while you see and hear each other. One shared link → same room → synchronized playback + webcam/mic.
This repo is a single Node app that provides everything:
public/, editable source in src/index.source.html)/peerjs)/rt (room roster, play/pause sync, "who is
talking", and chat)/admin (live people-count + chat monitoring)/turn-credentials/mkv-stream (FFmpeg stream-copy → fragmented MP4)SECURITY.md and disclose it in your privacy
policy. The app already shows users an in-room notice that chat messages may
be reviewed.Browser ──(audio/video, P2P, E2E encrypted)── Browser ← never hits the server
│ │
└───────── /rt (chat, subtitles, sync, talking) ───────┘
│
Node server ── /peerjs (signaling) ── /admin (monitor)
│ ── /turn-credentials
│
coturn (TURN relay, your VPS or managed) ← media only when P2P fails
The diagram's P2P media path refers to calls and files shared from a device.
A pasted MKV source follows source → Node/FFmpeg stream-copy → viewer. An
opaque direct-video source can follow source → viewer only when the browser
reports full support, as described below.
Multi-party uses a mesh (everyone connects to everyone). This is good for small groups (roughly up to 6–8 people). Beyond that you'd move to an SFU (e.g. mediasoup / LiveKit / Janus) — that's the scaling path, not a quick toggle.
Only one remote camera is shown at a time. It rotates every 2 minutes and switches immediately to whoever starts talking (with onset/hangover detection so brief noises don't cause false switches). You still hear everyone.
Production is split over two hosts:
public/ folder is served by Vercel at
samecouch.com (www.samecouch.com and the old watchmovietogether.com
domains redirect there). Vercel deploys automatically on every push to
main. Edit the root vercel.json; public/vercel.json is a generated copy
(npm run build:frontend). Vercel cannot run the Node server.server/server.js: room server/signaling,
chat relay, IPTV gateway, remuxer, admin) runs on a virtual server from
Netwise Hosting Ltd in London, UK, as the systemd unit
samecouch.service in /opt/samecouch, with nginx terminating TLS in front
of it. The coturn TURN relay runs on the same server. Config files are in
deploy/vps/; secrets live only in /etc/samecouch.env on the server, never
in this repo. Deploys are manual: copy the changed files to
/opt/samecouch, run systemctl restart samecouch.service, then check that
coturn is still active. The front-end reaches the backend through
REMOTE_BACKEND in src/index.source.html.public/privacy.html and public/privacy-nl.html too.render.yaml is legacy: the Render service is no longer used.
npm install
ADMIN_PASSWORD=secret123 npm start
# open http://localhost:8080 (admin at http://localhost:8080/admin)
# regression checks (includes a two-user realtime room test)
npm test
# after editing src/index.source.html
npm run build:frontend
Camera/mic need https (or localhost). On a deployed host you're on https
already.
The server hands out short-lived TURN credentials (coturn's use-auth-secret
HMAC scheme) at /turn-credentials. You just need a TURN server that shares the
same secret.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗