网易云音乐一起听同步原理:两个人听到的不是同一条流

发布时间: · 来源:网易云音乐官网资讯 · 分类:技术原理 · 评论 4 条

网易云音乐一起听房间界面显示两名成员的播放进度
房间内共享的是曲目与播放位置,音频流各自独立拉取。

很多用户第一次用一起听会问同一个问题:为什么对方网络差,我的音质没变差?答案是房间里根本没有「同一条流」。房主与成员各自从最近的 CDN 节点拉取同一首曲目,服务端只负责广播三样东西:当前曲目 ID、播放位置、播放状态。

这套设计的好处是音质各自决定,坏处是「同步」变成了一个纯时间问题。两个人听到的同一小节,实际可能相差一两百毫秒,这在副歌齐唱时能听出来,在正常听歌时几乎无感。

同步的是位置,不是声音

位置同步采用「权威时钟 + 偏移补偿」。房主客户端每 2 秒上报一次播放位置,服务端盖上服务器时间戳后广播;成员端拿到后按自己与服务器的时钟差换算成本地位置,再与当前实际播放位置比较,差值超过 80ms 就微调播放速率,而不是直接跳转。

微调的做法是把播放速率临时改成 1.02 或 0.98 倍,持续几百毫秒后恢复。人耳对 2% 的速率变化不敏感,但能立刻察觉「跳了一下」,所以客户端宁可慢一点追,也不做硬跳。

时钟差本身也在漂。手机与服务器的时钟每分钟可能差几毫秒,客户端每 30 秒重新估算一次往返延迟并取中位数,避免单次网络抖动把估算值带偏。

一起听房间内的成员列表与播放位置指示
成员列表右侧显示各自的缓冲状态,落后者会被标记。

40 个房间的误差分布

我们在 2026 年 9 月组织了 40 组双人测试,每组播放同一份 20 首的歌单,记录每分钟的位置差。参与者分布在 11 个城市,网络条件覆盖家宽、5G 与公司网络。

不同网络条件下的同步误差(40 个房间,每房间 20 分钟)
网络条件房间数误差中位数95 分位追帧次数/小时
同城家宽12180ms260ms3.1
跨省家宽16260ms410ms5.8
5G 移动网络8310ms520ms9.4
跨国4620ms980ms17.2

跨国的 620ms 已经接近「能听出来」的边界,尤其是歌词同步显示时,对方可能比你早看到下一句。这一档的追帧次数也最高,每小时 17 次,意味着平均三分半就要微调一次。

房间人数对误差的影响比网络更大。10 人房间的落队率(某一成员连续 10 秒以上偏离超过 1 秒)是 4%,25 人升到 11%,50 人满员时到 19%。原因是房主上报的位置只有一个,成员越多,网络条件差异越大,统一对齐越难。

房间人数与落队率(同一房主、同一歌单)
房间人数测试房间落队率平均追帧间隔
10 人64%18 分钟
25 人611%9 分钟
50 人419%5 分钟

「同步这件事,做得越精细,越容易在弱网下产生 audible 的修正痕迹。所以我们把阈值定在 80ms,而不是 20ms。」——一起听项目组的公开技术分享

弱网降级:从追帧到切歌对齐

当网络抖动持续超过 500ms,或者连续三次追帧失败,客户端会切到「按曲目对齐」模式:只在切歌时同步位置,中间不再追帧。用户会看到房间顶部出现一行灰字「网络较弱,已切换为切歌同步」,但播放不会中断。

这个降级是有代价的:两个人可能相差十几秒,同一首歌听到的段落完全不同。产品侧的选择是「宁可不同步,也不要卡顿」,因为卡顿会让人直接退出房间,而不同步只影响聊天时的默契。

如果想让房间更稳,能做的主要是三件事:房主用有线或稳定 Wi-Fi、成员尽量用同一运营商、人数控制在 25 人以内。房间设置里关闭「允许成员点歌」也能减少切歌带来的重新对齐。需要客户端的话,下载页有五个平台的安装包。

← 返回资讯列表

用户评论(4 条)

异异地第四年

原来不是同一条流,难怪她卡的时候我这边一点事没有,只是歌对不上。

声声学小白

1.02 倍速追帧这个设计挺聪明,硬跳真的很难受,像 CD 跳针。

夜夜班司机

50 人房间确实乱,上次集体听歌,一半人在副歌一半人在前奏。

南南风

跨国那档基本没法用,我在温哥华跟国内朋友听,歌词永远差一句。

相关阅读