<!--
{
  "availability" : [
    "iOS: 26.4.0 -",
    "iPadOS: 26.4.0 -",
    "macCatalyst: 26.4.0 -",
    "macOS: 26.0.0 -",
    "visionOS: 26.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "ImmersiveMediaSupport",
  "identifier" : "/documentation/ImmersiveMediaSupport/PresentationDescriptorReader",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Immersive Media Support"
    ],
    "preciseIdentifier" : "s:21ImmersiveMediaSupport28PresentationDescriptorReaderC"
  },
  "title" : "PresentationDescriptorReader"
}
-->

# PresentationDescriptorReader

An object that provides the functionality required to understand and process immersive presentation commands.

```
class PresentationDescriptorReader
```

## Overview

Immersive commands are packed as an array of [`PresentationCommand`](/documentation/ImmersiveMediaSupport/PresentationCommand) objects contained in a [`PresentationDescriptor`](/documentation/ImmersiveMediaSupport/PresentationDescriptor).
This object is used during an Immersive Video playback as a source of rendering values its published variables, or the application can pull presentation commands by time to write an output metadata track.

## Topics

### Initializers

[`init(presentationDescriptor: PresentationDescriptor, isSideloaded: Bool)`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/init(presentationDescriptor:isSideloaded:))

Initializes an instance that contains the specified presentation descriptor.

### Instance Properties

[`var cameraID: String?`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/cameraID)

The current camera ID string of the immersive camera to use when rendering playback for the PTS specified in the last call to the update method.

[`var colorFade: simd_float3`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/colorFade)

The current fade color for color fading of the video frames during playback for the PTS specified in the last call to the update method.

[`var colorFadeOpacity: Float`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/colorFadeOpacity)

The current color fade opacity of the video frames during playback for the PTS specified in the last call to the update method.

[`var environmentFadeOpacity: Float`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/environmentFadeOpacity)

The current opacity of the environment backdrops during playback for the PTS specified in the last call to the update method.

[`var isShotFlopped: Bool`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/isShotFlopped)

A Boolean value that indicates whether to horizontally flip the video frame for the PTS specified in the last call to the update method.

[`var isSideloaded: Bool`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/isSideloaded)

A Boolean value that indicates whether the reader input is sideloaded or is it set during playback.

[`var presentationCommands: [PresentationCommand]`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/presentationCommands)

The active presentation commands for the PTS specified in the last call to the update method.

[`var presentationDescriptor: PresentationDescriptor`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/presentationDescriptor)

The presentation descriptor that contains the presentation commands to process.

### Instance Methods

### Instance Properties

[`var cameraOverrides: SetCameraCommand.Overrides?`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/cameraOverrides)

The current camera params which would override static metadata to use when rendering playback for the PTS specified in the last call to the update method.

[`var isShotFlipped: Bool`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/isShotFlipped)

A Boolean value that indicates whether to vertically flip the video frame for the PTS specified in the last call to the update method.

### Instance Methods

[`func metadataItem(frameTimeRange: CMTimeRange) throws -> AVMetadataItem?`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/metadataItem(frameTimeRange:))

Builds a metadata item containing the presentation commands active at the start of
the specified frame’s time range.

[`func metadataTrack(timeRange: CMTimeRange?) throws -> [AVMetadataItem]`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/metadataTrack(timeRange:))

Retrieves all metadata items to write to an output metadata track, optionally clipped
to a segment time range. Pass a `timeRange` to produce one item per segment (e.g. per
IDR group or per fixed-length interval).

[`func outputPresentationCommands(for: CMTime) -> [PresentationCommand]?`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/outputPresentationCommands(for:))

This function returns all presentation commands to be muxed into an MOV during an `AVAssetWriter` session. Don’t use this function
for playback rendering.

[`func processPresentationCommands(for: CMTime)`](/documentation/ImmersiveMediaSupport/PresentationDescriptorReader/processPresentationCommands(for:))

Processes the commands and updates the publishers exported by this reader when called by the application (e.g. render/playback loop)

## Relationships

### Conforms To

[`Sendable`](/documentation/Swift/Sendable)

[`Escapable`](/documentation/Swift/Escapable)

[`SendableMetatype`](/documentation/Swift/SendableMetatype)

[`Copyable`](/documentation/Swift/Copyable)

[`Observable`](/documentation/Observation/Observable)

---

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)