多端同步技术拆解
6 分钟
换设备接着看:进度同步是怎么跑起来的
JellyPlay的开源文档显示,播放器在播放、暂停和停止时向服务器上报事件,播放中通常每10秒上报一次当前位置。换设备时读取服务器上最新的续播位置,离线期间的进度先进入本地发件箱,重新联网后与服务器状态做“最新优先”的协调[reference:1]。
读拆解 →不靠口号,靠公开文档和可验证的机制来说明“多端同步”到底怎么跑
图 / 多端同步事件流示意
进度同步的基础是事件上报。以JellyPlay的公开文档为例,播放器向服务器上报三种核心事件:START(播放开始)、PROGRESS(播放中,通常每10秒一次,暂停和恢复时也会触发)、STOP(播放结束、视图清理或观看达到95%)[reference:3]。每个事件携带当前位置、暂停状态、播放方式等字段。换设备时,新设备读取服务器上最新的续播位置,这就是“接着看”的来源。
离线观看时,进度事件不会丢失。它们先被写入本地的一个“发件箱”表,每条记录带有一个记录时间戳。重新联网后,同步 worker 把发件箱里的事件排空,并与服务器上的最新状态做一次协调。协调的规则是“较新的一侧胜出”:如果本地离线期间看到的位置比服务器上的新,本地位置会覆盖服务器;反过来,服务器上的新位置会保留[reference:4]。这解释了一个常见疑问:为什么离线看了很久,联网后有时需要等几秒才同步——因为事件需要排空和协调,不是实时推送。
离线发件箱里的多条 PROGRESS 事件不会全部发到服务器。文档显示,同一部作品的多个 PROGRESS 会被合并为一条,只保留最新的位置和状态,因为“只有最新的位置有意义”[reference:5]。但 START 和 STOP 不会被合并,每一次都是独立的会话边界。写入 STOP 时,之前挂起的 PROGRESS 会被删除,因为 STOP 携带的是最终位置,如果让一个中间位置的 PROGRESS 在 STOP 之后到达,服务器可能停在一个过时的中间位置[reference:6]。
同步不是“零误差”,是“误差可控”。误差主要来自三处:上报间隔(比如每10秒一次,意味着最坏情况下差10秒)、网络延迟(事件到达服务器的时间)、以及离线协调时的取舍逻辑。JellyPlay的本地续播缓存会在每次位置 tick 时写入当前位置,即使离线状态也能在本地接上。但跨设备的精确位置,取决于服务器最终收到的是哪一条事件。理解了这个机制,就不会对“为什么换设备后差了几秒”感到意外——它不是故障,是同步机制的固有边界。
分辨率只是标签,码率和编码才是地基
每秒传输的数据量。1080p流媒体码率通常在5-10 Mbps,4K在15-25 Mbps,部分平台在4K/HDR上可以到25-30 Mbps[reference:7]。码率不够,再高的分辨率也会糊;码率给足,1080p可以非常干净。
像素数量。4K的像素数是1080p的四倍,但像素多不等于信息多。在同一个屏幕上,一个编码扎实的1080p版本可能比一个码率被压缩到刚好卡在4K门槛上的流更清楚,因为它有更少的像素在争夺可用的码率[reference:8]。
播放器根据实时网速在多个码率档位之间切换。网速下降时先降码率保住流畅,网速恢复后再升回去。流畅播放的第一优先级是不中断,第二才是画质。自适应码率做得好,用户感知不到切换。
不推荐来路不明的入口,只整理能查到授权或属于公共领域的观看方式
1905电影网(CCTV6官方)、央视频、B站免费专区、西瓜视频、腾讯和爱奇艺的免费专区、芒果TV免费区、国家公共文化云。共同点是运营主体清楚,页面底部能查到版权声明或合作方,不需要安装来路不明的播放器。
导演去世满70年的作品可能进入公共版权范围,但具体计算要看出品年份、合作作者和保护期差异。Internet Archive和Wikimedia Commons上有大量公共版权或开放许可的历史影像,适合查老片和纪录片素材,不适合追新剧[reference:9]。
不替平台说话,只替判断方法说话

多端同步的体验差距不在“能不能同步”,在“同步得准不准、快不快”。每10秒上报一次和每30秒上报一次,用户感受到的续播误差完全不同。把机制说清楚,用户就不会把正常的同步边界当成故障。

“4K”是一个标签,“清楚”是观感。一个码率给足的1080p版本在普通客厅距离上可能比一个压缩过度的4K流更舒服。平台如果只标分辨率不标码率范围,用户就没法判断自己看到的是什么。

免费合法渠道的整理比“推荐一个能看的站”难,因为它需要核实运营主体和版权声明。但这是值得的。用户知道免费从哪里来,才会对“免费”有合理的预期。

我们引用JellyPlay的开源文档和公开的码率数据,是因为这些东西可以被读者自己去查。可核实的信息才有价值。说“同步很快”不如说“每10秒上报一次,误差通常十几秒”。
点击展开,回答尽量具体