◉ Pulse
otto-potato avatar
#34 today

otto-potato/SYNCWALL-

TypeScript Other

SYNCWALL 是一个局域网多设备同步播放系统,可让多台电脑同步播放视频或音频,并支持跨屏画面、循环播放、指定设备显示图片、独立音量和全部停止。 播放前先校准时间: 控制端发送“2000ms-与被控端延迟 后静止时间”。 各设备冻结并回传当时显示的毫秒时间。 系统计算时间差并自动修正,也可手动微调。 播放时,控制端统一指定“当前时间 + 3000ms”开始播放。 所有设备根据校准后的时间,在同一绝对时刻开始播放。 校准音补偿只用于修正不同设备扬声器的发声快慢,不会改变视频的同步播放时间。

Created Jul 27, 2026
Stars
7
Today
+7
Forks
0
Quality
95/100
Momentum
20

README

Fetched from GitHub on Oct 30, 2026, 10:18 PM UTC · README.md

View original on GitHub

Third-party content — Open Source Pulse is not the owner of this repository.

This README belongs to otto-potato/SYNCWALL- and its contributors. We fetch it directly from the project’s public GitHub repository and display it for reference only. All text, code, images and trademarks remain the property of their respective authors. See the repository for its license terms. Copyright / takedown policy.

SYNCWALL

SYNCWALL 是一个面向局域网多屏展示的音视频同步播放系统。控制端负责设备编排、媒体分发、时间校准和统一播放,被控端通过浏览器接入,无需单独安装客户端。

主要功能

  • 动态支持 2~100 台被控设备,按照当前排列自动切分跨屏画面
  • 视频、音频原文件上传与播放,不转码、不主动压缩清晰度或帧率
  • 大文件分片上传、失败重试与断点续传
  • 播放当前媒体时,后台上传并向设备预处理播放列表下一项
  • 支持暂停、单集循环、列表循环和列表随机
  • 指定设备显示图片、独立调节音量、全部设备强制停止
  • 跨屏播放进度条和每台设备的实时分发进度
  • 设备时间校准与设备播放延迟校准相互独立
  • 每台设备按首次连接顺序获得固定编码:aa、ab、ac……
  • 移动设备位置只改变显示序号,不改变固定设备编码
  • 被控端可使用键盘调整画面位置、纵向高度和横向拉伸

页面地址

启动服务后:

  • 控制端:http://本机IP:3000/admin666
  • 被控端:http://本机IP:3000/

服务默认监听 0.0.0.0,同一局域网内的设备可以通过服务端电脑的局域网 IP 接入。

环境要求

  • Node.js 22.13.0 或更高版本
  • 所有设备位于同一个稳定的局域网
  • 推荐使用最新版 Chrome、Edge 或其他 Chromium 浏览器

安装与启动

npm install
npm run dev

也可以使用项目内的快捷启动文件:

  • macOS:双击 启动服务-macOS.command
  • Windows:双击 启动服务-Windows.bat

常用命令:

npm run dev          # 启动局域网开发服务
npm run build        # 构建正式版本
npm test             # 构建并运行自动化测试
npm run lint         # 检查源码
npm run db:generate  # 生成数据库迁移

推荐校准流程

SYNCWALL 使用两套互不覆盖的校准值。

1. 与设备时间校准

  1. 在控制端点击“开始校准”,所有被控端进入时间校准页面。
  2. 点击“自动校准”。控制端会按照当前屏幕位置,从左到右逐台校准。
  3. 每台设备收到静止指令后冻结并回传毫秒时间。
  4. 控制端根据往返时间计算单程网络延迟,并修正该设备的浏览器时间。
  5. 如照片对比仍有少量误差,可进入“手动微调”,以 1ms 为单位修正。

时间校准只修正设备使用的浏览器时间,不会修改操作系统时间,也不会覆盖设备播放延迟。

2. 设备播放延迟校准

不同电脑的浏览器、声卡、扬声器和屏幕存在不同的实际输出延迟,需要单独校准:

  1. 在控制端选择一台设备。
  2. 点击“播放延迟校准叮声”,与控制端叮声进行对比。
  3. 调整该设备的播放延迟补偿,直到声音或画面同步。
  4. 正数表示让该设备提前启动,例如 +100ms 会提前调用播放 100ms。
  5. 负数表示让该设备推迟启动,例如 -100ms 会推迟 100ms。

播放延迟不会改变控制端下发的统一目标时刻,只会在对应被控端本地修正媒体的实际启动时机。

同步播放原理

控制端点击播放时,会先检测即时网络状态,然后向所有设备发送同一个“控制端当前时间 + 3000ms”的绝对播放时刻。被控端根据校准后的本地浏览器时间等待目标,并结合自己的独立播放延迟补偿启动媒体。

如果设备仍在校准页面,点击同步播放会先让全部设备返回播放页面,再下发统一播放目标。

播放列表

可以一次选择多个视频或音频:

  • 第一项完成上传和设备分发后即可播放
  • 当前项目播放期间会自动上传、分发并缓存下一项
  • 新增文件只会追加到列表末尾,不会顶掉正在播放的媒体
  • 每一项都可以单独删除
  • 结束后动作支持暂停、单集循环、列表循环和列表随机

被控端画面调整

被控端播放页面支持以下快捷键:

  • ↑ / ↓:上下移动显示区域
  • + / -:调整纵向显示高度
  • ← / →:横向压缩或拉伸,用于裁掉视频左右黑边
  • 0:恢复默认显示设置

调整结果保存在当前被控设备浏览器中,不影响其他设备。

纯净服务端

syncwall-server-clean/ 是不包含依赖和构建缓存的纯净源码目录,适合单独复制或部署。

syncwall-server-clean.zip 是对应压缩包。解压后执行:

npm install
npm run dev

更详细的说明位于:

  • syncwall-server-clean/docs/使用教程.md
  • syncwall-server-clean/docs/故障排查.md
  • syncwall-server-clean/docs/文件说明.md

注意事项

  • 浏览器通常要求用户至少点击或按键一次,才允许有声媒体自动播放。
  • 热点网络或信号较差的 Wi-Fi 会影响上传速度和延迟稳定性。
  • 视频能否播放取决于被控设备浏览器支持的编码,推荐使用 H.264/AAC 视频或常见 MP3/AAC 音频。
  • 控制端地址包含固定管理路由,请只在可信局域网内使用。
Rendered by GitHub from the repository’s README. Scroll to read the full file.
First trending

Jul 28, 2026

first spotted on the list

Best rank

#34

highest position reached

Appearances

1

times on the trending list

Quality score

95

out of 100

Momentum

20

trend strength indicator

Star velocity

0.07

stars per day since creation

Activity — last 60 days

daily counts, collected every 6 hours
  • Stars
  • Forks
  • Merged PRs
  • Issues
  • Closed issues

Collecting activity data since launch — check back in a few days.

Star history

total stars per snapshot

Not enough snapshots yet — check back soon.

Rank history

position on trending · lower is better

Not enough snapshots yet — check back soon.

3D card for your website

Live HTML card with a glass surface and pointer tilt. Paste the iframe on any website.

<iframe src="https://www.notionpulse.cc/embed/otto-potato/SYNCWALL-" width="420" height="240" style="border:0;max-width:100%;background:transparent" loading="lazy" title="otto-potato/SYNCWALL- — trending on Open Source Pulse"></iframe>

Stars badge

Show current stars in your README or profile. Auto-updates every 6 hours.

otto-potato/SYNCWALL- stars badge
Markdown
[![otto-potato/SYNCWALL-](https://www.notionpulse.cc/api/badge/otto-potato/SYNCWALL-.svg)](https://www.notionpulse.cc/repo/otto-potato/SYNCWALL-)
HTML
<a href="https://www.notionpulse.cc/repo/otto-potato/SYNCWALL-"><img src="https://www.notionpulse.cc/api/badge/otto-potato/SYNCWALL-.svg" alt="otto-potato/SYNCWALL- stars badge" /></a>

Repository of the Day

#34 Repository of the Day

Repository of the Week

#34 Repository of the Week

Repository of the Month

#34 Repository of the Month