<!--
{
  "availability" : [
    "iOS: 8.0.0 -",
    "iPadOS: 8.0.0 -",
    "macCatalyst: 13.1.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AVKit",
  "identifier" : "/documentation/AVKit/AVPlayerViewController",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "AVKit"
    ],
    "preciseIdentifier" : "c:objc(cs)AVPlayerViewController"
  },
  "title" : "AVPlayerViewController"
}
-->

# AVPlayerViewController

A view controller that displays content from a player and presents a native user interface to control playback.

```
@MainActor class AVPlayerViewController
```

## Overview

A player view controller makes it simple to add media playback capabilities to your app that match the styling and features of the native system players. Using this object also means that your app automatically adopts the new features and styling of future operating system releases.

> Important:
> The framework doesn’t support subclassing ``doc://com.apple.avkit/documentation/AVKit/AVPlayerViewController``.

### Support AirPlay

AirPlay lets users stream media to Apple TV, HomePod, and AirPlay 2-compatible speakers and smart TVs. A player view controller supports AirPlay automatically, but you need to configure your app to enable it. See <doc://com.apple.documentation/documentation/AVFoundation/configuring-your-app-for-media-playback> for more information about configuring your app for background playback.

### Adopt Picture in Picture playback

[`AVPlayerViewController`](/documentation/AVKit/AVPlayerViewController) provides Picture in Picture (PiP) playback in iOS and tvOS. PiP playback lets users minimize the video player to a small floating window so they can perform other activities in the primary app or in another app.

> Note: To enable PiP playback in your macOS app, use ``doc://com.apple.avkit/documentation/AVKit/AVPlayerView``.

### Customize the tvOS playback experience

[`AVPlayerViewController`](/documentation/AVKit/AVPlayerViewController) in tvOS brings advanced Siri Remote control features to your app. This support lets users play and navigate your content, and access supporting features like subtitles and alternate audio tracks. This object also provides support for using Siri Remote voice commands, such as “Skip ahead 15 seconds” and “What did they say?”, to control playback of your content.

AVKit for tvOS extends the features of [`AVPlayerViewController`](/documentation/AVKit/AVPlayerViewController) and <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem> to provide additional ways to navigate and present content. Features unique to the tvOS player user interface include:

- Navigation Marker Groups. A group of navigation markers that allow a viewer to jump between significant events in the media timeline. The most common type of navigation marker group is a chapter list, but you can also create additional or alternative means of navigation — for example, to allow the user to quickly jump between key moments in a recorded sporting event. The player view controller lets the user choose between multiple marker groups for navigating through the media timeline.

Use the [`AVNavigationMarkersGroup`](/documentation/AVKit/AVNavigationMarkersGroup) class to create and describe navigation markers, then use the <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem/navigationMarkerGroups> property to associate marker groups with the current <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem> object.

- Interstitial Content. Some content might not relate to the main content that your app presents, or might have different presentation requirements. For example, you might not allow the user to skip over advertisements when scrubbing through the playback timeline, or to skip mandatory legal notices.

Use the [`AVInterstitialTimeRange`](/documentation/AVKit/AVInterstitialTimeRange) class to describe interstitial content, and the <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem/interstitialTimeRanges> property to associate those time ranges with the current <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem> object.

- Content Proposals. When presenting serialized content, like a TV show, you often want to propose additional content for the viewer to watch when the current episode ends. It’s straightforward to add this functionality to your app using content proposals.

Use the [`AVContentProposal`](/documentation/AVKit/AVContentProposal) class to describe the proposed content, and set it as the <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem/nextContentProposal> property of the current <doc://com.apple.documentation/documentation/AVFoundation/AVPlayerItem> object. You can implement the methods of the player view controller’s [`delegate`](/documentation/AVKit/AVPlayerViewController/delegate) object to prepare to present a content proposal, and perform actions in response to the viewer accepting, rejecting, or deferring the proposal.

## Topics

### Configuring presentation

[`showsPlaybackControls`](/documentation/AVKit/AVPlayerViewController/showsPlaybackControls)

A Boolean value that indicates whether the player view controller shows playback controls.

[`contentOverlayView`](/documentation/AVKit/AVPlayerViewController/contentOverlayView)

A view that displays between the video content and the playback controls.

[`videoGravity`](/documentation/AVKit/AVPlayerViewController/videoGravity)

A string that specifies how the video displays within the bounds of the view controller’s view.

[`videoBounds`](/documentation/AVKit/AVPlayerViewController/videoBounds)

The size and position of the video image within the bounds of the view controller’s view.

[`showsTimecodes`](/documentation/AVKit/AVPlayerViewController/showsTimecodes)

A Boolean value that determines whether the player view displays timecodes, if available.

[`appliesPreferredDisplayCriteriaAutomatically`](/documentation/AVKit/AVPlayerViewController/appliesPreferredDisplayCriteriaAutomatically)

A Boolean value that indicates whether the view controller automatically sets the screen’s display criteria to match that of the currently playing asset.

### Customizing the tvOS player UI

[`playbackControlsIncludeTransportBar`](/documentation/AVKit/AVPlayerViewController/playbackControlsIncludeTransportBar)

A Boolean value that indicates whether the player shows the transport bar and related controls.

[`playbackControlsIncludeInfoViews`](/documentation/AVKit/AVPlayerViewController/playbackControlsIncludeInfoViews)

A Boolean value that indicates whether the player presents video metadata, navigation markers, and playback settings views when the user requests them.

[`transportBarIncludesTitleView`](/documentation/AVKit/AVPlayerViewController/transportBarIncludesTitleView)

A Boolean value that indicates whether the player user interface shows the title view above the scrubber.

[`transportBarCustomMenuItems`](/documentation/AVKit/AVPlayerViewController/transportBarCustomMenuItems)

An array of actions and menus to display with the default player controls.

[`customInfoViewControllers`](/documentation/AVKit/AVPlayerViewController/customInfoViewControllers)

An array of view controllers to display as content tabs in the player user interface.

[`infoViewActions`](/documentation/AVKit/AVPlayerViewController/infoViewActions)

An array of actions to present in the Info content view.

[`contextualActions`](/documentation/AVKit/AVPlayerViewController/contextualActions)

An array of action controls to present contextually during playback.

[`customOverlayViewController`](/documentation/AVKit/AVPlayerViewController/customOverlayViewController)

A view controller that presents custom content over the player view.

[`unobscuredContentGuide`](/documentation/AVKit/AVPlayerViewController/unobscuredContentGuide)

A layout guide that represents an area that fixed-position playback controls don’t obscure when visible.

[`customInfoViewController`](/documentation/AVKit/AVPlayerViewController/customInfoViewController)

A view controller that provides client-specific content and controls alongside system-provided information and settings panels.

### Configuring the visionOS player UI

[`infoViewActions`](/documentation/AVKit/AVPlayerViewController/infoViewActions)

An array of actions to present in the Info content view.

[`customInfoViewControllers`](/documentation/AVKit/AVPlayerViewController/customInfoViewControllers)

An array of view controllers to display as content tabs in the player user interface.

[`contextualActions`](/documentation/AVKit/AVPlayerViewController/contextualActions)

An array of action controls to present contextually during playback.

[`contextualActionsInfoView`](/documentation/AVKit/AVPlayerViewController/contextualActionsInfoView)

A view the system shows adjacent to the contextual actions that’s suitable for showing related information.

[`contextualActionsPreviewImage`](/documentation/AVKit/AVPlayerViewController/contextualActionsPreviewImage)

An image to show alongside the contextual actions.

[`requiresMonoscopicViewingMode`](/documentation/AVKit/AVPlayerViewController/requiresMonoscopicViewingMode)

A Boolean value that indicates whether to permit playback of 2D video content only.

[`experienceController`](/documentation/AVKit/AVPlayerViewController/experienceController)

The experience controller for this view controller.

[`groupExperienceCoordinator`](/documentation/AVKit/AVPlayerViewController/groupExperienceCoordinator)

The group experience coordinator for this view controller.

[`viewport`](/documentation/AVKit/AVPlayerViewController/viewport)

A configuration object that manages viewport settings for different presentation modes.

[`AVViewport`](/documentation/AVKit/AVViewport)

Provides configuration options for how content is displayed
in different viewing contexts. Use this object to customize the visual presentation
of your content.

### Presenting the visionOS trimming UI

[`canBeginTrimming`](/documentation/AVKit/AVPlayerViewController/canBeginTrimming)

A Boolean value that indicates whether the current media supports trimming.

[`beginTrimming(completionHandler:)`](/documentation/AVKit/AVPlayerViewController/beginTrimming(completionHandler:))

Presents the system trimming interface controls inside the player view.

### Configuring frame analysis

[`allowsVideoFrameAnalysis`](/documentation/AVKit/AVPlayerViewController/allowsVideoFrameAnalysis)

A Boolean value that indicates whether to perform video frame analysis.

[`toggleLookupAction`](/documentation/AVKit/AVPlayerViewController/toggleLookupAction)

An action that enables the visual lookup interface.

[`videoFrameAnalysisTypes`](/documentation/AVKit/AVPlayerViewController/videoFrameAnalysisTypes)

The types of analysis a player view controller performs on a paused video frame.

[`AVVideoFrameAnalysisType`](/documentation/AVKit/AVVideoFrameAnalysisType)

Constants that define the types of analysis a player view controller may perform on a paused video frame.

### Configuring playback speed

[`speeds`](/documentation/AVKit/AVPlayerViewController/speeds)

A list of user-selectable playback speeds to show in the playback speed control.

[`selectedSpeed`](/documentation/AVKit/AVPlayerViewController/selectedSpeed)

The currently selected playback speed.

[`selectSpeed(_:)`](/documentation/AVKit/AVPlayerViewController/selectSpeed(_:))

Selects a specified playback speed.

[`AVPlaybackSpeed`](/documentation/AVKit/AVPlaybackSpeed)

An object that represents a user-selectable playback speed in a playback user interface.

### Configuring Picture in Picture

[`allowsPictureInPicturePlayback`](/documentation/AVKit/AVPlayerViewController/allowsPictureInPicturePlayback)

A Boolean value that indicates whether the player allows Picture in Picture playback.

[`canStartPictureInPictureAutomaticallyFromInline`](/documentation/AVKit/AVPlayerViewController/canStartPictureInPictureAutomaticallyFromInline)

A Boolean value that indicates whether Picture in Picture starts automatically when transitioning to the background when the view controller presents its content inline.

### Managing full-screen behavior

[`entersFullScreenWhenPlaybackBegins`](/documentation/AVKit/AVPlayerViewController/entersFullScreenWhenPlaybackBegins)

A Boolean value that determines whether the player automatically displays in full screen when the user taps the play button.

[`exitsFullScreenWhenPlaybackEnds`](/documentation/AVKit/AVPlayerViewController/exitsFullScreenWhenPlaybackEnds)

A Boolean value that indicates whether the player exits full-screen mode when playback ends.

### Managing subtitles

[`allowedSubtitleOptionLanguages`](/documentation/AVKit/AVPlayerViewController/allowedSubtitleOptionLanguages)

An array of language codes that restrict the set of subtitle languages available to the user.

[`requiresFullSubtitles`](/documentation/AVKit/AVPlayerViewController/requiresFullSubtitles)

A Boolean value that indicates whether the user can disable the display of subtitles.

[`mediaCharacteristicsForSupportedCustomMediaSelectionSchemes`](/documentation/AVKit/AVPlayerViewController/mediaCharacteristicsForSupportedCustomMediaSelectionSchemes)

### Preventing navigation

[`requiresLinearPlayback`](/documentation/AVKit/AVPlayerViewController/requiresLinearPlayback)

A Boolean value that determines whether the player allows the user to skip media content.

### Configuring skipping behavior

[`isSkipForwardEnabled`](/documentation/AVKit/AVPlayerViewController/isSkipForwardEnabled)

A Boolean value that indicates whether forward-skipping is available.

[`isSkipBackwardEnabled`](/documentation/AVKit/AVPlayerViewController/isSkipBackwardEnabled)

A Boolean value that indicates whether backward-skipping is available.

[`skippingBehavior`](/documentation/AVKit/AVPlayerViewController/skippingBehavior)

The behavior that skipping gestures perform.

[`AVPlayerViewControllerSkippingBehavior`](/documentation/AVKit/AVPlayerViewControllerSkippingBehavior)

Constants that represent the player view controller’s skipping behavior.

### Determining display readiness

[`isReadyForDisplay`](/documentation/AVKit/AVPlayerViewController/isReadyForDisplay)

A Boolean value that indicates whether the player item’s first video frame is ready for display.

### Updating Now Playing information

[`updatesNowPlayingInfoCenter`](/documentation/AVKit/AVPlayerViewController/updatesNowPlayingInfoCenter)

A Boolean value that indicates whether the view controller updates Now Playing information.

### Proposing additional content

[`contentProposalViewController`](/documentation/AVKit/AVPlayerViewController/contentProposalViewController)

The view controller responsible for the presentation of content proposals.

### Accessing the player

[`player`](/documentation/AVKit/AVPlayerViewController/player)

The player object that provides the media content for the view controller to display.

### Accessing the delegate object

[`delegate`](/documentation/AVKit/AVPlayerViewController/delegate)

The delegate object for the player view controller.

### Configuring pixel buffers

[`pixelBufferAttributes`](/documentation/AVKit/AVPlayerViewController/pixelBufferAttributes)

The pixel buffer attributes of the video frames the view controller presents.

### High dynamic range

[`preferredDisplayDynamicRange`](/documentation/AVKit/AVPlayerViewController/preferredDisplayDynamicRange)

Describes how High Dynamic Range (HDR) video content renders.

[`AVDisplayDynamicRange`](/documentation/AVKit/AVDisplayDynamicRange)

Describes how High Dynamic Range (HDR) video content renders.



---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)