Clock drift

I'm working on a project which requires synchronised audio output from two devices. To do this I'm using a peer-to-peer connection to calculate the offset between system uptime (mach_absolute_time) on the devices, then triggering playback of each track using AVAudioPlayer.play(atTime:). With calibration of output latency this works really well, syncing the devices to within ~10ms.


I'm syncing the devices only at the start of a three hour session, but this was working fine initially on the two devices I was using (iPhone 6 and 4th generation Apple TV). Sadly after updating to some new, more powerful hardware (iPad Pro 2017, Apple TV 4K) I'm getting some significant clock drift after the initial sync, despite these two devices having the same CPU. The iPad's clock gains on the Apple TV's to such an extent that even if I compensated for the drift when triggering playback, the sync would become imperfect over the course of a single track lasting 40-50 minutes.


Is it normal to see clock drift between CPUs of the same type? Am I just unlucky with these two particular devices? Is there anything I can do about this? How do other multiroom playback systems such as Airplay solve this problem?


Many thanks!