0

我试图实现GameKit通过蓝牙/wifi在多个设备上同步播放歌曲。仍然我总是有 0.1-0.5 秒的延迟。认为这样的同步是微不足道的。我找到了实现我想要的 BM 接收器节拍器,声音是真正同步播放的。

我正在使用GKSendDataReliable并发送 1 个有节奏的小包。在这里使用本教程完成所有事情。

我用谷歌搜索了很多,但找不到答案和/或我的瓶颈。将不胜感激任何建议/方法。也许一些教程?

4

1 回答 1

1

您使用多少设备?我假设它是服务器 - 客户端方案。这是我会做的(它可能不起作用,但你正在寻求建议/方法),非常粗略的算法:

-server 设置一个计时器并使用 PING 数据包将其值发送给客户端,每个客户端都记住它

-client 收到 PING 包,并发送响应包

-server 获取响应数据包,检查时间并将生成的增量存储在某处(在向量中)

-server 发送更多 PING 数据包并获得更多时间增量

- 当服务器有足够的数据时,它会计算平均 ping 时间(CLIENTX_TIME)并选择最大的一个(BIGGEST_TIME)

-server 向所有客户端发送 START 数据包,数据包有一些附加信息说 XX_TIME 开始播放

-服务器在 BIGGEST_TIME 之后开始播放音乐

-客户端在 XX 时间后获取 START 数据包并开始播放音乐,其中 XX 是按播放器计算的(因此对于最慢的客户端,它将为 0,对于其他客户端,它将是 BIGGEST_TIME-CLIENTX_TIME)

- 这个过程一遍又一遍地进行,每次你想玩什么,你就提前做

问题是您将永远无法始终同步所有内容-不幸的是,这是网络的本质;)

于 2012-10-25T13:59:55.367 回答