One Logo Pool Ball
ImmersiveMediaSupport · IOS API REFERENCE

ImmersiveCamera

struct · iOS 26.4+ · SDK 27.1

struct ImmersiveCamera

A type that holds all the information for an immersive media camera needed to process and render immersive media video frames. This type holds information about camera identifier, camera type, default presentation rate, camera pose, and camera calibration data. Immersive media content is captured using more than one camera calibrated lens. Hence it's necessary to use different geometry for each lens to render the corresponding video clips. AIV content creators should be able to add or remove any camera at any point during the creation and iteration process.

Members (11)

get · iOS 26.4+

calibration

TypeScript
get calibration(): ImmersiveCameraCalibration
Swift declaration
var calibration: ImmersiveCameraCalibration

Calibration details for this camera.

set · iOS 26.4+

calibration

TypeScript
set calibration(value: ImmersiveCameraCalibration)
Swift declaration
var calibration: ImmersiveCameraCalibration

Calibration details for this camera.

get · iOS 26.4+

presentationFrameRate

TypeScript
get presentationFrameRate(): number
Swift declaration
var presentationFrameRate: Int

Presentation frame rate suited for this immersive camera.

set · iOS 26.4+

presentationFrameRate

TypeScript
set presentationFrameRate(value: number)
Swift declaration
var presentationFrameRate: Int

Presentation frame rate suited for this immersive camera.

get · iOS 26.4+

defaultPresentationFrameRate

TypeScript
static get defaultPresentationFrameRate(): number
Swift declaration
static let defaultPresentationFrameRate: Int

Default presentation frame rate for any immersive camera.

get · iOS 26.4+

id

TypeScript
get id(): string
Swift declaration
var id: String

A unique and non empty identifier string for this immersive camera.

set · iOS 26.4+

id

TypeScript
set id(value: string)
Swift declaration
var id: String

A unique and non empty identifier string for this immersive camera.

get · iOS 26.4+

pose

TypeScript
get pose(): _Spatial_Pose3DFloat
Swift declaration
var pose: Pose3DFloat

The pose of this immersive camera. The rotation component of the pose decomposes into three axis rotations, applied intrinsically in this order: 1. **Roll** — rotation around the camera's local z-axis (the optical axis; the camera looks toward −Z). 2. **Yaw** — rotation around the camera's (post-roll) local y-axis. 3. **Pitch** — rotation around the camera's (post-roll, post-yaw) local x-axis (the right / baseline axis). This matches Spatial's `EulerAngleOrder.xyz`, which composes intrinsically as roll, then yaw, then pitch (equivalently, extrinsically as pitch, then yaw, then roll). The composition order matters — the same angle values under a different order produce a different orientation. In particular, this does **not** match `RealityKit.Transform(pitch:yaw:roll:)`, which composes intrinsically as yaw, then pitch, then roll. ### Stereo fusion constraints The rotation component is applied uniformly to both eyes as an image reorientation; it does not remap eye assignment, reproject parallax, or account for the stereo baseline encoded in the source video. For stereo (`stereoCamera`) content, only rotations that keep the stereo baseline horizontal in viewer space produce comfortable fusion: - **Roll** — rotates the baseline out of horizontal, creating vertical disparity between eyes. Small roll angles cause eye strain; larger angles (≥ a few degrees) prevent fusion entirely. - **Yaw** — may be safe in some circumstances but increasingly likely to cause anomalous parallax perception at larger angles. - **Pitch** — the baseline is the rotation axis and the invariant of the rotation depends on the projection. - Any mixed rotation that decomposes to a non-zero roll component exhibits the same failure proportional to the roll magnitude. For mono content there are no stereo constraints and the full rotation space is valid.

set · iOS 26.4+

pose

TypeScript
set pose(value: _Spatial_Pose3DFloat)
Swift declaration
var pose: Pose3DFloat

The pose of this immersive camera. The rotation component of the pose decomposes into three axis rotations, applied intrinsically in this order: 1. **Roll** — rotation around the camera's local z-axis (the optical axis; the camera looks toward −Z). 2. **Yaw** — rotation around the camera's (post-roll) local y-axis. 3. **Pitch** — rotation around the camera's (post-roll, post-yaw) local x-axis (the right / baseline axis). This matches Spatial's `EulerAngleOrder.xyz`, which composes intrinsically as roll, then yaw, then pitch (equivalently, extrinsically as pitch, then yaw, then roll). The composition order matters — the same angle values under a different order produce a different orientation. In particular, this does **not** match `RealityKit.Transform(pitch:yaw:roll:)`, which composes intrinsically as yaw, then pitch, then roll. ### Stereo fusion constraints The rotation component is applied uniformly to both eyes as an image reorientation; it does not remap eye assignment, reproject parallax, or account for the stereo baseline encoded in the source video. For stereo (`stereoCamera`) content, only rotations that keep the stereo baseline horizontal in viewer space produce comfortable fusion: - **Roll** — rotates the baseline out of horizontal, creating vertical disparity between eyes. Small roll angles cause eye strain; larger angles (≥ a few degrees) prevent fusion entirely. - **Yaw** — may be safe in some circumstances but increasingly likely to cause anomalous parallax perception at larger angles. - **Pitch** — the baseline is the rotation axis and the invariant of the rotation depends on the projection. - Any mixed rotation that decomposes to a non-zero roll component exhibits the same failure proportional to the roll magnitude. For mono content there are no stereo constraints and the full rotation space is valid.

get · iOS 26.4+

type

TypeScript
get type(): ImmersiveCamera_CameraType
Swift declaration
var type: ImmersiveCamera.CameraType

Represents the type of the camera.

set · iOS 26.4+

type

TypeScript
set type(value: ImmersiveCamera_CameraType)
Swift declaration
var type: ImmersiveCamera.CameraType

Represents the type of the camera.

Skipped declarations

1 declarations were excluded from these bindings. Each reason comes from the generator or the iOS SDK compiler.

ImmersiveCamera.init(id:calibration:type:presentationFrameRate:pose:)

The iOS SDK compiler rejected this binding: cannot find 'defaultPresentationFrameRate' in scope

All ImmersiveMediaSupport types →