mirror of
https://github.com/yattee/yattee.git
synced 2026-06-04 13:54:19 +00:00
On tvOS, registering MPRemoteCommandCenter handlers makes the system classify the app as a long-form video media app. When audio is routed to AirPlay 2 endpoints (HomePods), the system then enforces a ~2s look-ahead buffer in the AVAudioSession → AirPlay 2 pipe for multi-speaker sync. The result is a 2-3 second audio drain on pause and refill on resume. The buffer lives downstream of mpv, so no mpv command (ao-reload, seek-flush, audio-add) can flush it; AVAudioSession setCategory overrides (mode/policy) and setActive(false)/setActive(true) cycles are also ignored once the app is media-classified. Workaround: detect the active audio route via routeChangeNotification on tvOS. While AirPlay/HomePod is the output, suppress MPNowPlayingInfoCenter publication and disable every MPRemoteCommand so tvOS un-classifies us. When the route returns to local outputs, republish the cached Now Playing info and reconfigure remote commands. A latch defers all media integration until the audio session has been activated at least once, so no commands are registered before the route can be evaluated. Trade-off: while playing to HomePods, the Control Center widget and external Siri Remote play/pause are not available — but pause/resume is responsive.