Video hosted by Apple at devstreaming-cdn.apple.com

Configure player

Close

WWDC Index does not host video files

If you have access to video files, you can configure a URL pattern to be used in a video player.

URL pattern

preview

Use any of these variables in your URL pattern, the pattern is stored in your browsers' local storage.

$id
ID of session: tech-talks-111465
$eventId
ID of event: tech-talks
$eventContentId
ID of session without event part: 111465
$eventShortId
Shortened ID of event: tech-talks
$year
Year of session: 2026
$extension
Extension of original filename: mp4
$filenameAlmostEvery
Filename from "(Almost) Every..." gist: ...

Photos & Camera 111465

Build a great camera experience for iPhone Duo

2026 • iOS • 9:27

Discover how to leverage the outer and inner cameras on iPhone Duo. Explore the Virtual Front Camera, and find out how to use the direction coordinator to switch between cameras and update your UI as people open and close iPhone Duo. Learn best practices for handling preview aspect ratios, positioning, and rotation to deliver a seamless capture experience.

Speaker: Tarun Rajendran

Open in Apple Developer site

Transcript

Hi, my name is Tarun and I’m from the camera software team. In this video, I’ll cover the new camera features on iPhone Duo, and I’ll go over how to build a great experience with them. I’ll begin by introducing the new front cameras on iPhone Duo. Then I’ll share how to handle camera direction changes when people open or close their device. Finally, I’ll cover some tips that will polish your app’s camera preview on iPhone Duo. Now, it’s time to meet the iPhone Duo’s new front cameras. iPhone Duo is the first iPhone to support two front cameras.

Both of these cameras are square sensors with an ultrawide field of view. On the outside of the device, you’ll find the outer ultrawide camera. It takes fantastic photos and videos. Open the device and you’ll find the inner ultrawide camera, the first under-display camera on iPhone. Your app can stream from the front cameras through AVFoundation. Just like on any other iPhone, use AVCaptureDevice Discovery Session to find the front camera.

Request position .front, along with the Wide or Ultra Wide device type. When you do this on iPhone Duo, your app will now discover the new Virtual Front Camera. The Virtual Front Camera is a new AVCaptureDevice that automatically switches between the outer and inner physical cameras. When you have your iPhone Duo open, the Virtual Front Camera uses the front camera on the inner display.

When you close your iPhone, the camera will automatically switch to the front camera on the outer display. The Virtual Front Camera uses the most relevant front camera for your app. The Virtual Front Camera handles the camera switch for you. But you can do even more by responding to camera direction changes. On iPhone Duo, each front camera has its own AVCaptureDevice type.

Use the built-in outer ultrawide device type to access the front camera on the outer display. Use the built-in inner ultrawide device type to access the one on the inner display. When you use these device types, you get access to the full capabilities of each camera. The inner ultrawide camera has a 1080p video resolution with support up to 60fps. The outer ultrawide camera supports up to 4K resolution and 120fps.

When your app uses the virtual front camera, you only have access to the features that are common across both physical cameras. That is a max 1080p resolution and 60fps. It’s also important to note that depth is only supported when accessing the individual cameras. When you use the individual cameras, your app is responsible for switching between them when someone opens or closes their iPhone Duo. Use the new AVCaptureDeviceDirectionCoordinator API to manage the transition.

For some background, AVCaptureDevice has always provided a fixed position property. On iPhone, that has always been back or front. Both the inner and outer front cameras have the value front. But things get more interesting on iPhone Duo, where the displays can face opposite directions. This would mean a front camera is not always looking at you. For example, you could be looking at the inner display, but be streaming from the outer front camera. In this case, a front camera is facing away from you.

And while your app is streaming from the outer front camera, you might close the device. That same camera now swings to directly face you. If you flip the device while it’s open, you can take a selfie with the back cameras. Now your app and the back camera are both directly facing you.

To ensure your app always knows where the cameras are facing, use the direction coordinator. The direction coordinator tells your app where the cameras are and keeps you up to date as that changes. To create a direction coordinator, you need three things: your app’s UIView, the device types you want to monitor, and a change handler.

When your app’s UIView is on the outer display, the coordinator will show the outer display front cameras as forward-facing, and the rear cameras as backward-facing. When the device is opened, your app’s UI view moves to the inner display. Your change handler will be called and will report the outer front and rear cameras as as backward facing cameras, and the inner front camera as forward facing.

If you flip the device while it’s open, you can move a camera app to the outer display. When this happens, you’ll find the rear camera and the outer front camera both become forward facing devices. On iPhone Duo, a camera app can use both displays at once. That’s great for a group video call, or for showing a child something fun while you take their photo.

In this situation, you will have two different UIViews for each display at the same time. One for the outer display and one for the inner display. Create a separate direction coordinator for each view. The outer displays coordinator will report the rear cameras as forward-facing, while the inner displays coordinator will report them as backward-facing. Each coordinator reports positions relative to its own view. Camera apps can enable this using the SceneAccessories API. Learn how in the video, Leverage multiple displays and scenes on iPhone Duo.

Because the direction coordinator is tied to a view, it is isolated to the main actor. Keep in mind that your change handler from the direction coordinator should not use AVFoundation APIs directly. Rather than handing you an AVCaptureDevice, the direction coordinator provides an AVCaptureDeviceDescriptor. The device descriptor is a main-actor-safe, sendable representation of an AVCaptureDevice. It contains all the information needed to create an AVCaptureDevice and can be safely passed to your camera actor.

From there, you can interact with your AVFoundation APIs. Here’s what you should do in your change handler. As someone opens or closes their device, your change handler will be called to tell your app which camera is now forward-facing. At this time, reconfigure your AVCaptureSession to keep streaming from the forward-facing camera.

Consider how the new camera direction affects your decision to mirror the preview. When the rear camera is forward-facing, mirror the preview for a natural selfie camera experience. Finally, use the change handler to perform any UI updates your app needs while changing cameras. You’ll find the direction coordinator in AVKit.

More details about the AVCaptureDeviceDirectionCoordinator can be found in the article, “Choosing a Camera by the Direction it Faces” in Apple’s Developer Documentation. Now that we’ve gone over camera direction changes, I’ll go over some tips to give your app a polished preview on iPhone Duo. When you stream using the full field of view of the rear camera on the inner display, you will have additional display space around your preview.

Take advantage of this extra space by offsetting the preview so you can group controls in the remaining space. Alternatively, you can have the preview fill the display. You have the flexibility to make the decision that’s right for your app. Use the videoGravity property on AVCaptureVideoPreviewLayer to determine how to lay out your preview within the layer bounds. Check out the documentation for more details. When streaming from the ultra-wide front cameras, you can fill the display by taking advantage of the square sensor.

Use dynamicAspectRatio on AVCaptureDevice to select a landscape aspect ratio on the inner display. Learn more about the power of the square sensor in the video “Support the Center Stage Front Camera in your iOS app” from WWDC26. A final note on handling rotation in your app: Adopt the AVCaptureDeviceRotationCoordinator to ensure your camera preview and photos always remain upright. On iPhone Duo, the Rotation Coordinator will update when your app moves displays. Use the coordinator to ensure your app’s rotation is applied consistently across displays. Read the article “Supporting Device Rotation in Your Camera App” for more information about using the rotation coordinator. After adopting rotation coordinator, disable camera-sensor-orientation compensation to improve performance. This compensation is enabled on all the front cameras on iPhone Duo. A few next steps. Use the iOS 27.1 SDK to take full advantage of iPhone Duo. Decide how your app will handle switching cameras when the device opens or closes. Adopt a direction coordinator if you want to move beyond the virtual front camera. Finally, test your app on iPhone Duo and make sure your camera preview looks great. I look forward to how your camera app unfolds on iPhone Duo.