tvOS Media Playback
Overview
Playback is a first-class surface on Apple TV. Default to AVPlayerViewController and the system transport model unless the product truly needs a custom player experience.
Workflow
- Classify the request:
- standard media playback
- catalog-to-player handoff
- custom overlay controls
- now-playing or remote command integration
- playback performance or responsiveness issue
- Prefer
AVPlayerViewControllerfor the baseline player. - Keep the handoff from catalog to player explicit and reversible.
- If the player needs custom overlays, make them sparse, focusable, and secondary to the media itself.
- Wire system playback behaviors before inventing custom controls:
- transport via Siri Remote
- subtitle and alternate-audio selection
- Picture in Picture where the product supports it
- Now Playing and remote command metadata when the app owns custom playback state
- Validate remote behavior and overlay focus in the simulator, then confirm on device when playback polish matters.
Strong defaults
- Prefer
AVPlayerViewControllerunless there is a concrete product reason not to. - Keep player overlays separate from catalog UI. They solve different interaction problems.
- Use
MPRemoteCommandCenterand now-playing metadata only when the app is responsible for transport behavior beyond the default AVKit experience. - Keep overlays lightweight and easy to exit.
- Use standard system playback affordances before custom chrome.
Anti-patterns
- Building a custom player just to restyle controls.
- Carrying dense catalog UI into the player overlay.
- Making overlay focus heavier than the playback content.
- Ignoring subtitles, alternate audio, PiP, or remote commands when the product expects them.
- Treating playback as just another detail screen.
References
references/playback-architecture.mdreferences/player-overlays-and-controls.mdreferences/now-playing-and-remote-commands.md- In addition to the references above, use web search to consult current Apple Developer documentation when AVKit, PiP, or playback-control guidance may have changed.