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 使用两套互不覆盖的校准值。
- 在控制端点击“开始校准”,所有被控端进入时间校准页面。
- 点击“自动校准”。控制端会按照当前屏幕位置,从左到右逐台校准。
- 每台设备收到静止指令后冻结并回传毫秒时间。
- 控制端根据往返时间计算单程网络延迟,并修正该设备的浏览器时间。
- 如照片对比仍有少量误差,可进入“手动微调”,以
1ms为单位修正。
时间校准只修正设备使用的浏览器时间,不会修改操作系统时间,也不会覆盖设备播放延迟。
不同电脑的浏览器、声卡、扬声器和屏幕存在不同的实际输出延迟,需要单独校准:
- 在控制端选择一台设备。
- 点击“播放延迟校准叮声”,与控制端叮声进行对比。
- 调整该设备的播放延迟补偿,直到声音或画面同步。
- 正数表示让该设备提前启动,例如
+100ms会提前调用播放100ms。 - 负数表示让该设备推迟启动,例如
-100ms会推迟100ms。
播放延迟不会改变控制端下发的统一目标时刻,只会在对应被控端本地修正媒体的实际启动时机。
控制端点击播放时,会先检测即时网络状态,然后向所有设备发送同一个“控制端当前时间 + 3000ms”的绝对播放时刻。被控端根据校准后的本地浏览器时间等待目标,并结合自己的独立播放延迟补偿启动媒体。
如果设备仍在校准页面,点击同步播放会先让全部设备返回播放页面,再下发统一播放目标。
可以一次选择多个视频或音频:
- 第一项完成上传和设备分发后即可播放
- 当前项目播放期间会自动上传、分发并缓存下一项
- 新增文件只会追加到列表末尾,不会顶掉正在播放的媒体
- 每一项都可以单独删除
- 结束后动作支持暂停、单集循环、列表循环和列表随机
被控端播放页面支持以下快捷键:
↑/↓:上下移动显示区域+/-:调整纵向显示高度←/→:横向压缩或拉伸,用于裁掉视频左右黑边0:恢复默认显示设置
调整结果保存在当前被控设备浏览器中,不影响其他设备。
syncwall-server-clean/ 是不包含依赖和构建缓存的纯净源码目录,适合单独复制或部署。
syncwall-server-clean.zip 是对应压缩包。解压后执行:
npm install
npm run dev更详细的说明位于:
syncwall-server-clean/docs/使用教程.mdsyncwall-server-clean/docs/故障排查.mdsyncwall-server-clean/docs/文件说明.md
- 浏览器通常要求用户至少点击或按键一次,才允许有声媒体自动播放。
- 热点网络或信号较差的 Wi-Fi 会影响上传速度和延迟稳定性。
- 视频能否播放取决于被控设备浏览器支持的编码,推荐使用 H.264/AAC 视频或常见 MP3/AAC 音频。
- 控制端地址包含固定管理路由,请只在可信局域网内使用。