iOS 27에서 반응성 높은 카메라 앱 만들기
Apple의 카메라 성능 팀은 미리보기 출력을 제외한 모든 것을 지연시켜 카메라 실행 시간을 절반으로 줄였습니다. 1초에 가깝던 실행 시간이 대략 그 절반으로 떨어졌고, 이는 실험실 라이트보드에서 측정한 2배 개선입니다1. 이를 가능하게 하는 지렛대는 iOS 26 이상에서 사용할 수 있는 Deferred Start API이며, 그 뒤에 있는 원리는 단순명료합니다. 카메라 실행이 빠르게 느껴지도록 만드는 가장 중요한 단일 요소는 미리보기 프레임이 화면에 얼마나 빨리 나타나는가입니다1.
이 글의 틀은 “AVFoundation 앱이 즉각적으로 느껴지려면 무엇을 해야 하는가”입니다. 기술적으로 실행되고 있는 카메라와 사용 준비가 된 것처럼 느껴지는 카메라 사이의 간극이 바로 쓰러지는 도미노가 빠져나가는 그 간극이기 때문입니다. 세 개의 WWDC26 세션이 이 영역을 다룹니다. 반응성 높은 실행과 지속적인 캡처를 다루는 세션 303, 반응성을 잃지 않으면서 고해상도로 캡처하는 세션 304, 그리고 새로운 정사각형 Center Stage 전면 카메라를 다루는 세션 341입니다. 이들은 동일한 캡처 세션 아키텍처를 통해 연결되어 있어, 하나를 채택하면 나머지를 적용하는 비용이 더 낮아집니다.
핵심 요약
- 네 단계로 이루어진 실행 시퀀스(앱 실행, 세션 구성/시작, 출력 초기화, 미리보기 스트리밍)는 대부분의 시간을 출력 초기화에 씁니다. Deferred Start는 미리보기를 렌더링하는 출력 하나를 제외한 모든 출력을 미루어, Apple의 실험실 측정에서 실행 시간을 절반으로 줄입니다1.
AVCaptureVideoPreviewLayer기반 앱은 iOS 26 이상에 대해 다시 컴파일하면 자동 Deferred Start를 무료로 얻습니다. 비디오 데이터 출력 기반 앱은 동일한 이득을 얻으려면 수동 모드를 채택해야 합니다1.- 사진 출력을 지연하면 미리보기는 빨라지지만 첫 캡처는 빨라지지 않으므로,
AVCapturePhotoOutput의isResponsiveCaptureEnabled와 함께 사용하여 처리가 준비될 때까지 촬영을 버퍼링하세요1. - iOS 27에 새로 도입된 Pro Video Storage는 시스템 전체에 걸친 저장 공간 풀을 미리 할당하여, 높은 데이터 전송률의 ProRes 기록이 파일 시스템 경합으로 끊기지 않고 결정론적으로 유지되도록 합니다1.
- Center Stage 전면 카메라(iPhone 17, iPhone Air, iPhone 17 Pro)는 전면
.builtInUltraWideCamera로 노출되는 정사각형 센서입니다.dynamicAspectRatio는 세션을 다시 만들지 않고도 정사각형에서 어떤 종횡비든 잘라내며,AVCaptureSmartFramingMonitor가 Auto Zoom과 Auto Rotate를 구동합니다2.
실행 시퀀스는 네 단계로 이루어진다
Apple 카메라 성능 팀의 엔지니어 Jake가 세션 303에서 네 가지 실행 단계를 짚어 갑니다.
카메라 실행은 네 단계를 거치며, Apple의 엔지니어 Jake가 이를 순서대로 분석합니다1. 첫째, 앱이 실행됩니다. 링커가 바이너리를 로드하고, 정적 초기화 코드가 실행되며, UI 씬이 생성됩니다. 둘째, 세션이 구성되고 시작됩니다. AVCaptureSession을 초기화하고, 구성을 커밋하고, 세션을 시작하는 일 모두가 시간과 시스템 리소스를 소모합니다. 셋째, 모든 AVCaptureOutput이 초기화되며, 이 시간은 출력의 개수와 품질 설정에 비례해 늘어납니다. 넷째, 미리보기가 스트리밍을 시작하고 프레임이 앱으로 흘러 들어옵니다1.
이를 빠르게 만드는 작업은 UI에서 시작됩니다. 실행을 두 단계로 나누세요. 미리보기를 표시하는 데 필수적인 리소스와, 미리보기가 실행된 뒤로 미룰 수 있는 리소스입니다1. AVFoundation의 고전적인 샘플 카메라 앱인 AVCam에서는, 실행되는 순간 사람이 필요로 하는 요소는 카메라 미리보기와 셔터 버튼뿐입니다. 이미지 웰과 모드 선택기는 그 뒤에 서서히 나타나도 됩니다. 이 원리는 UI를 넘어 일반화됩니다. 미리보기가 렌더링되기 전에 생성된 모든 리소스는 실행 시간을 늘립니다1.
세션 자체가 그다음 압박 지점입니다. AVCaptureSession은 모든 캡처 객체를 조율하기 때문에, Jake는 메인 스레드가 UI 설정을 마치자마자 가장 먼저 세션을 생성합니다. 하지만 세션 생성은 메인 스레드를 차단하므로, UI 씬 설정과 병렬로 실행하고 멈춤을 피하기 위해 세션 생성을 메인 스레드 밖으로 디스패치하세요1. 같은 주의가 startRunning()과 stopRunning()에도 적용됩니다. 둘 다 차단 호출이며, 메인 스레드에서 호출하면 앱이 멈춥니다1. 여러 번 커밋하는 대신 처음부터 단일 구성을 커밋하세요. 재구성을 할 때마다 실행 시간이 늘어나기 때문입니다1.
Deferred Start: 2배의 이득
출력 초기화는 실행에서 가장 비용이 큰 부분이지만, 그 순간 대부분의 출력은 쓸모없는 짐입니다. 미리보기를 렌더링하는 데에 앱은 미리보기 레이어 하나 또는 단일 출력 하나만 필요합니다. 무비 파일 출력과 사진 출력은 첫 프레임에 아무 기여도 하지 않습니다1. Deferred Start는 이 점을 이용합니다. 출력 초기화를 실행이 끝날 때까지 미루어, 첫 프레임이 표시되기 전에는 미리보기 출력만 초기화되도록 합니다1.
모든 AVCaptureOutput과 AVCaptureVideoPreviewLayer는 isDeferredStartEnabled 속성을 가지고 있습니다. 이를 true로 설정하면 해당 출력이 지연되며, 미리보기를 렌더링하는 출력 하나를 제외한 모든 것을 지연하세요1. 지연된 작업이 언제 실행될지를 결정하는 두 가지 모드가 있습니다. 자동 모드에서는 시스템이 미리보기가 나타난 직후의 최적 시점을 선택하고, 두 개의 델리게이트 콜백을 발생시켜 앱이 이를 추적할 수 있게 합니다. 초기화가 시작되기 전의 sessionWillRunDeferredStart와 초기화가 완료된 후의 sessionDidRunDeferredStart입니다1. iOS 26 이상 SDK에 대해 다시 컴파일된 앱은 기본적으로 자동 모드를 얻으며, automaticallyRunsDeferredStart가 이미 true로 설정되어 있습니다1.
// Automatic mode — defer everything but the preview layer
session.beginConfiguration()
session.automaticallyRunsDeferredStart = true // true by default on iOS 26+ SDK
photoOutput.isDeferredStartEnabled = true // defer the photo output
// videoPreviewLayer renders preview, so it is NOT deferred
session.commitConfiguration()
session.startRunning() // call off the main thread
수동 모드는 제어권을 앱에 돌려줍니다. automaticallyRunsDeferredStart를 false로 설정하고, 먼저 와야 하는 시작 작업(환경설정 읽기, 필수적이지 않은 UI 구성)을 무엇이든 수행한 다음, runDeferredStartWhenNeeded()를 호출하여 시스템에 진행해도 좋다고 알립니다1. 수동 모드는 특히 한 가지 아키텍처에서 중요합니다. AVCaptureVideoDataOutput으로 미리보기를 렌더링하는 앱입니다. Deferred Start는 데이터 출력에 자동으로 적용되지 않으므로, 그런 앱은 동일한 실행 이득을 얻기 위해 수동 Deferred Start를 채택하며, 보통 첫 프레임이 표시된 뒤에 이를 트리거합니다(Jake는 CAMetalLayer를 통해 표시 시점을 추적합니다)1.
Apple은 확장되는 LED 패턴을 캡처하는 두 대의 폰을 비교하여 실험실 라이트보드에서 그 결과를 검증했습니다. Deferred Start가 활성화된 폰은 빨간색과 초록색 LED가 모두 켜져 있는 동안 패턴을 잡아냈고, 그렇지 않은 폰은 초록색 LED가 거의 사라진 뒤에야 실행을 마쳤습니다1. 시간으로 보면 Deferred Start가 없는 실행은 1초에 가까웠고, 적용했을 때는 실행 시간이 절반으로 줄어 2배 개선되었으며, 복잡한 캡처 세션에서는 그 이상의 개선을 보였습니다1.
그래프가 한 번만 다시 빌드되도록 파괴적 변경을 일괄 처리하라
실행 시퀀스에서 나온 단일 구성 원칙에는, WWDC26 랩 패널의 한 카메라 엔지니어가 설명한 메커니즘이 그 뒤에 있습니다. AVCaptureSession은 캡처 객체들의 그래프를 조율하며, 파괴적 변경을 강제하는 속성을 설정할 때마다 세션이 그 그래프를 다시 해석합니다5. 재구성은 보통 한 번에 한 가지 이상을 바꾸는 일을 의미하므로(사진 모드에서 비디오 모드로 전환하거나 활성 포맷을 더 낮은 해상도로 한 단계 내리는 등), 각 속성을 따로따로 설정하면 모든 단계마다 그래프가 다시 빌드됩니다5. 전체 배치를 beginConfiguration()과 commitConfiguration()으로 감싸면, 배치가 한 가지 변경을 담든 스무 가지를 담든 그래프는 커밋 시점에 정확히 한 번만 다시 해석됩니다5. 패널리스트는 이 한 쌍을 은행 거래에 비유했습니다. beginConfiguration()이 거래를 열고, 출금과 입금이 보류 상태로 남아 있다가, commitConfiguration()이 이들을 함께 정산합니다5.
Deferred Start는 또 하나의 실행 이전 지렛대와 깔끔하게 결합됩니다. 패널은 Deferred Start와 준비된 사진 설정 배열(AVCapturePhotoOutput의 setPreparedPhotoSettingsArray(_:completionHandler:))이 서로 직교적이고 상호 보완적임을 확인했습니다. 하나는 출력 준비를 미루어 미리보기가 먼저 나타나게 하고, 다른 하나는 최악의 경우를 대비한 정지 영상 파이프라인 리소스를 미리 할당하며, 충돌 없이 함께 조합할 수 있습니다5.
빠른 미리보기는 빠른 캡처가 아니다
사진 출력을 지연하는 데에는 분명히 짚고 넘어가야 할 함정이 있습니다. 미리보기는 훨씬 빨리 시작되지만, 첫 캡처까지의 시간은 그대로입니다. 시스템이 캡처를 시작하기 전에 여전히 지연된 사진 출력의 초기화를 끝내야 하기 때문입니다1. 미리보기는 떠 있고, 사용자가 셔터를 누르지만, 순간은 이미 지나가 버린 것입니다.
해결책은 AVCapturePhotoOutput의 isResponsiveCaptureEnabled입니다. 이 속성은 캡처를 시작하는 시점과 처리가 시작되는 시점 사이에 버퍼링을 더해, 사진 출력이 완전히 준비되지 않았더라도 그 순간을 캡처할 수 있게 합니다1. Apple의 도미노 데모에서, Deferred Start와 함께 반응성 높은 캡처를 실행한 폰은 쓰러지는 도미노를 깔끔하게 잡아냈지만, 대조군 폰은 완전히 놓쳤습니다1. 이 조합이 권장 패턴입니다. 품질 사진 출력과 함께 Deferred Start를 채택해 실행을 빠르게 유지하고, 사진 출력이 초기화를 마치기 전의 그 시간을 반응성 높은 캡처로 메우세요1.
연속 고해상도 캡처
Apple 카메라 소프트웨어 팀의 엔지니어 Mohit이 세션 304에서 농구 코트에서 fast capture prioritization을 시연합니다.
세션 304는 반응성 이야기를 고해상도 연속 촬영으로 확장합니다. 그 메커니즘은 AVCapturePhotoOutput의 isFastCapturePrioritizationEnabled로, 새로운 속성이 아니라 기존 속성입니다. 활성화하면 시스템이 짧은 시간에 연속된 여러 캡처를 감지하고, 사진 품질을 최고 품질 설정에서 균형 설정으로 조정하여 캡처와 처리 양쪽 모두에 더 적은 시간이 들도록 합니다4. 새로운 부분은 OS와 함께 도착합니다. iPhone 16과 iPhone 17에서 iOS 27부터, 시스템은 그 균형 설정의 빠른 캡처들을 deferred photo processing을 사용해 나중에 처리하기도 합니다. 이는 다음 캡처를 막지 않고 사진을 완성하는 WWDC23의 백그라운드 파이프라인입니다(위의 Deferred Start 실행 API와는 별개입니다)4. Apple의 농구 데모에서는, deferred processing과 반응성 높은 캡처, fast capture prioritization이 모두 활성화되었을 때 같은 플레이를 한 번 막힌 캡처 대 다섯 장의 반응성 높은 촬영으로 그 차이가 드러났습니다4.
같은 세션은 고해상도 지원 표도 업데이트합니다. 24MP와 48MP 캡처 지원이 iPhone 16 Pro의 망원 카메라와 iPhone 17의 초광각 카메라로 확장되며, 18MP 옵션은 iPhone 17의 Center Stage 전면 카메라에만 존재합니다4. 우선순위 설정이 요청할 수 있는 것을 제한합니다. 12MP는 세 가지 우선순위 수준 모두에서 작동하고, 단일 프레임 48MP는 균형 또는 품질이 필요하며, 다중 프레임 융합 18MP와 24MP 포맷은 처리 시간이 더 길기 때문에 품질 우선순위가 필요합니다4. deferred processing이야말로 그런 다중 프레임 융합을 반응성 높은 앱에서 실용적으로 만드는 요소입니다. 무거운 작업이 캡처 세션과 메모리를 공유하지 않고 백그라운드에서 일어나기 때문입니다4.
미리보기 렌더링: 레이어 대 데이터 출력
두 가지 출력이 미리보기를 구동할 수 있으며, 그 선택이 그 외에 얼마나 많은 일을 해야 하는지를 결정합니다. AVCaptureVideoPreviewLayer는 앱에서 프레임마다 별도 작업 없이 카메라가 보는 것을 정확히 보여 줍니다. HDR 톤 매핑을 자동으로 처리하고, CPU와 GPU 오버헤드를 낮게 유지하며, 저지연 표시를 위해 튜닝됩니다1. 절충점은 프레임 단위 접근을 제공하지 않는다는 것입니다1. (그 자동 톤 매핑의 HDR 측면에 대해서는, AVFoundation HDR 및 Apple Log 글이 캡처와 표시 파이프라인을 깊이 있게 다룹니다.)
AVCaptureVideoDataOutput은 프레임 단위 처리가 우선일 때의 대안입니다. 이것이 주요 표시 출력으로서 미리보기 레이어의 자리를 차지하며, 프레임 흐름에 대한 제어권을 앱에 줍니다. 프레임마다 커스텀 UI 오버레이, Metal 통합, 프레임 분석이 가능합니다1. 그 비용은 위에서 언급한 수동 Deferred Start 채택과, 한 가지 규율 규칙입니다. 프레임 드롭을 피하고 경험을 유려하게 유지하려면 프레임 단위 작업을 짧게 유지하세요1. 피드를 보여 주기만 하면 될 때는 미리보기 레이어를 사용하고, 진짜로 프레임을 처리할 때는 데이터 출력으로 손을 뻗으세요.
압박 속에서 성능 유지하기
대부분의 카메라 개발은 통제된 환경의 책상에서 이루어지지만, 사람들은 뜨거운 햇볕이 내리쬐는 날에 앱을 사용하고, 기기가 뜨거워지면 시스템이 스로틀링을 합니다1. 두 가지 비용 API가 앱이 그것을 미리 볼 수 있게 합니다. 하드웨어 비용은 세션의 하드웨어 사용 비율을 나타내는 0과 1 사이의 값을 반환합니다. 1을 넘으면 시스템이 그 구성을 지원할 수 없다는 뜻입니다1. 이 비용은 카메라 개수, 활성 포맷(1080p 대 4K), 프레임 속도, 그리고 포맷이 비닝되었는지 여부에 따라 올라갑니다. 하드웨어 비용은 포맷의 최대 프레임 속도를 가정하므로, 60fps 포맷에서 30fps로 실행하는 앱은 보고되는 비용을 낮추기 위해 프레임 속도 재정의를 설정해야 합니다1.
시스템 압박 비용도 0에서 1을 반환하며, 현재 상태의 비용을 나타내고, 1을 넘으면 구성이 지속 불가능해집니다1. 채택 패턴은 이렇습니다. 구성을 커밋한 후 하드웨어 비용이 1 이하로 유지되는지 확인하고, AVCaptureDevice의 systemPressureState를 관찰한 다음 변경에 대한 핸들러를 등록합니다1. 압박이 올라가면 핸들러는 캡처 기기의 프레임 속도를 줄이고, GPU나 Apple Neural Engine 작업을 스로틀링하며, UI 작업을 최소화합니다1.
Pro Video Storage: 결정론적 ProRes 기록
세션 303은 높은 데이터 전송률의 비디오 캡처를 위해 iOS 27에 새로 도입된 Pro Video Storage를 소개합니다.
전통적인 파일 시스템 I/O는 비결정론적입니다. 시스템이 경쟁하는 연산, 메모리 단편화, 저장소 마모를 동시에 다루기 때문에 기록 타이밍이 들쭉날쭉합니다1. ProRes 같은 높은 데이터 전송률의 캡처는 프레임을 떨어뜨리지 않고 기록하기 위해 지속적인 고대역폭 I/O를 필요로 하며, 가변적인 타이밍은 정확히 잘못된 속성입니다. iOS 27에 새로 도입된 Pro Video Storage는, 높은 데이터 전송률 캡처를 위해 미리 할당된 저장 공간을 추적하고 관리하여 이 문제를 해결합니다. 모든 앱이 공유하는 시스템 전체 리소스이며, 기존 무비 기록 API에 연결됩니다1.
앱은 AVCaptureMovieFileOutput에 usesProVideoStorage를 설정하거나, 비디오 데이터 출력에서 기록할 때는 AVAssetWriter에 설정하여 옵트인합니다1. 그러면 저장소가 할당과 파일 I/O를 처리하여, 높은 데이터 전송률 코덱에 대해 기록 성능을 일관되게 유지합니다. 채택 순서는 이렇습니다. Pro Video Storage는 싱글톤이므로 공유 접근자를 통해 가져와 지원 여부를 확인하고, 무비 파일 출력과 세션, 연결, 선택한 포맷을 구성하고, 무비 파일 출력의 isProVideoStorageSupported를 확인하고, 저장소가 크기 조정이나 파일 생성/삭제 처리로 바쁘지 않은지 확인한 다음, 이를 활성화하고 기록을 시작합니다1. 캡처하는 동안 기록은 미리 할당된 풀에 쓰이고, 캡처가 끝나면 최종 위치로 옮겨집니다1. 카메라 설정에서 이제 사람들이 얼마나 많은 저장 공간을 할당할지 제어할 수 있고, remainingCapacity 메서드가 남은 용량을 보고하며, 설정 열기 메서드가 앱에서 그 UI로 사용자를 데려갑니다1.
Center Stage 전면 카메라는 정사각형이다
Apple 카메라 소프트웨어 팀의 엔지니어 Tracy가 세션 341에서 정사각형 Center Stage 전면 카메라를 소개합니다.
전통적인 전면 카메라 센서는 4x3 종횡비를 가져 프레이밍을 폰 방향에 묶어 둡니다. iPhone 17, iPhone Air, iPhone 17 Pro의 Center Stage 전면 카메라는 95도 렌즈와 결합된 정사각형 이미지 센서를 사용하며, 이는 모든 iPhone 전면 카메라 중 가장 넓은 시야각입니다2. Apple의 엔지니어 Tracy는 그 이점을 이렇게 설명합니다. 정사각형 형태 덕분에 사용자는 폰을 회전하지 않고도 인물 또는 가로 셀피를 찍으며 어떤 종횡비든 선택할 수 있고, 이는 한 손으로 안정적인 그립을 유지하면서 가운데 정렬되고 자연스러운 눈맞춤의 이미지를 얻게 해 줍니다2.
세션 설정은 일반적인 AVFoundation입니다3. AVCaptureSession을 만들고, 전면 .builtInUltraWideCamera 기기 유형으로 카메라를 AVCaptureDevice로 찾고, 이를 AVCaptureDeviceInput으로 감싸고, 미리보기용 AVCaptureVideoPreviewLayer와 사진용 AVCapturePhotoOutput을 추가합니다. 세션은 호환되는 미디어 유형 사이에 AVCaptureConnection을 암시적으로 구성합니다2.
기본 구성 요소는 iOS 26부터 사용할 수 있는 AVCaptureDevice의 dynamicAspectRatio입니다. 이 속성을 설정하면 세션을 다시 만들거나 미리보기를 중단하지 않고도 정사각형 센서에서 선택한 종횡비를 잘라내므로, 전환이 매끄럽습니다2. 이 속성은 1280부터 4032까지의 정사각형 포맷에서 다섯 가지 종횡비(3x4, 4x3, 9x16, 16x9, 1x1)를 지원하며, 한 가지 제약이 있습니다. 4032 사진 포맷은 3x4와 4x3만 지원하는데, 이 둘이 가장 높은 해상도를 보존하기 때문입니다2.
// Tap to Rotate using dynamicAspectRatio
let discovery = AVCaptureDevice.DiscoverySession(
deviceTypes: [.builtInUltraWideCamera],
mediaType: .video,
position: .front
)
guard let device = discovery.devices.first else { return }
// Find a format that supports the desired ratio
guard let format = device.formats.first(where: {
$0.supportedDynamicAspectRatios.contains(.ratio4x3)
}) else { return }
try device.lockForConfiguration()
device.activeFormat = format
let timestamp = device.setDynamicAspectRatio(.ratio4x3) // returns first-buffer timestamp
device.unlockForConfiguration()
각 포맷은 자신의 supportedDynamicAspectRatios를 알리며, 종횡비를 설정하면 변경이 적용되는 첫 버퍼의 타임스탬프를 반환합니다2. 반환된 타임스탬프는 장식이 아닙니다. 비디오 기록에서 그것은 한 클립을 끝내고 다음 클립을 새 종횡비로 시작하게 해 주는 이음매입니다.
Auto Zoom, Auto Rotate, 그리고 센서 보정
AVCaptureSmartFramingMonitor(iOS 26 이상, 카메라에서 가져옴)는 dynamicAspectRatio 위에 얹혀 Auto Zoom과 Auto Rotate를 구동합니다2. 이 모니터는 자동 얼굴 및 시선 감지로부터 주기적인 프레이밍 추천을 제공하며, 각 추천은 앱이 적용하거나 무시할 수 있는 종횡비와 줌 배율을 담고 있습니다. 사진 캡처를 대상으로 하기 때문에 4032 사진 포맷이 활성일 때만 추천합니다2. 기본적으로는 아무것도 추천하지 않으므로, enabledFramings를 설정하고(모든 supportedFramings로, 또는 선택한 일부로), recommendedFraming을 KVO로 관찰한 다음 각 추천을 적용하세요. 매끄러운 전환을 위해 순서가 중요합니다. 종횡비를 먼저 설정한 다음 줌 배율을 설정하세요2. 모니터는 세션이 실행되는 동안 시작할 수 있으며, 자동 프레이밍을 끄는 것은 KVO 등록을 해제하고 stopMonitoring을 호출하는 것을 의미합니다2.
새 센서와 함께 한 가지 정확성 함정이 따라옵니다. 이전 iPhone 전면 카메라는 센서를 Landscape Left로 장착했기 때문에, 세로 셀피는 재생 시 270도 회전을 요청하는 EXIF 태그를 지닌 채 네이티브 센서 방향으로 도착했습니다. Center Stage 센서는 Portrait로 장착되어 있어, 옛 회전 값에 의존하는 앱은 사진을 옆으로 또는 거꾸로 렌더링하게 됩니다2. AVCapturePhotoOutput은 센서 방향 보정을 통해 기본적으로 이를 처리합니다. HEIC, JPEG, 비압축 처리 사진을 물리적으로 회전시키고 EXIF 메타데이터를 업데이트하여, 출력이 이전처럼 Landscape Left로 도착하게 함으로써 기존 회전 로직이 계속 작동하도록 합니다2. 두 가지 유의 사항이 있습니다. 보정은 Bayer RAW나 Apple ProRAW에는 절대 적용되지 않으며, Apple은 최상의 성능을 위해 보정을 끈 상태로(cameraSensorOrientationCompensationEnabled를 통해) 테스트하여 방향이 올바르게 유지되는지 확인할 것을 권장합니다2.
비디오와 통화를 위한 Center Stage
비디오 기록에서 dynamicAspectRatio는 동일하게 작동하지만, QuickTime 무비 트랙은 모든 샘플이 동일한 크기를 공유하도록 요구하므로, 캡처 도중 종횡비를 바꾸면 기록이 멈춥니다2. AVCaptureMovieFileOutput에서는 변경 시 기록이 자동으로 멈춥니다. AVCaptureVideoDataOutput과 AVAssetWriter를 함께 쓸 때는 setDynamicAspectRatio 완료 타임스탬프가 한 기록을 끝내고 다른 기록을 새 종횡비로 시작하는 분할 지점입니다2. 기록에는 또한 이 카메라에서 얼굴 인식 기반의 두 가지 시네마틱 안정화 모드 cinematicExtended와 cinematicExtendedEnhanced가 추가되는데, 이들은 배경보다 피사체를 안정적으로 유지하는 것을 우선합니다2.
비디오 통화는 가장 간단한 경로를 가집니다. Center Stage는 Voice over IP 백그라운드 모드를 사용하는 회의 앱에 대해 이미 활성화되어 있으며, 사용자가 제어 센터의 비디오 효과 메뉴에서 켜고 끕니다2. 그 백그라운드 모드가 없는 앱은 Center Stage API를 직접 채택합니다. 이는 (Portrait, Studio Light, Gestures처럼) 프로세스별로 활성화되므로, 제어 모드(앱 내 버튼을 허용하는 cooperative 또는 app)를 설정한 다음 isCenterStageEnabled를 true로 설정하면, 프레이밍이 모두를 가운데에 유지합니다2. 한 가지 비디오 통화 개선이 더 기본적으로 꺼진 채로 제공됩니다. 연결의 preferredVideoStabilizationMode를 lowLatency로 설정하여 활성화하는 실시간 저지연 안정화 모드입니다2.
채택 가이드
세 세션은 계층적인 채택에 보답합니다.
모든 AVFoundation 카메라 앱: Deferred Start를 가장 먼저 채택하세요. AVCaptureVideoPreviewLayer로 미리보기를 렌더링하고 iOS 26 이상 SDK에 대해 다시 컴파일하면 자동 모드가 무료로 켜집니다. automaticallyRunsDeferredStart가 true이고 미리보기가 아닌 모든 출력이 isDeferredStartEnabled = true인지 확인하여 검증하세요1. 사진 출력의 isResponsiveCaptureEnabled와 짝지어, 빠른 미리보기가 동시에 사용 가능한 셔터가 되도록 하세요1.
데이터 출력 및 Metal 파이프라인: 무료 이득에서 빠지게 됩니다. 수동 Deferred Start를 채택하고, 첫 프레임이 표시된 후에 runDeferredStartWhenNeeded()를 트리거하며, 프레임 단위 작업을 짧게 유지하세요1. 뜨거운 기기에서 파이프라인이 우아하게 저하되도록 systemPressureState 관찰을 연결하세요1.
ProRes 및 높은 데이터 전송률 비디오: iOS 27에서 Pro Video Storage를 채택하여 지속적인 기록을 결정론적으로 만들고, 기록 전에 isProVideoStorageSupported와 바쁨 확인으로 제한하세요1.
iPhone 17 / Air / 17 Pro의 전면 카메라 및 셀피 앱: 전면 .builtInUltraWideCamera를 찾고, dynamicAspectRatio를 통해 Tap to Rotate를 노출하며, Auto Zoom과 Auto Rotate를 위해 AVCaptureSmartFramingMonitor를 얹으세요. 끌 측정된 이유가 없는 한 센서 방향 보정은 켜 둔 채로 두고, 그것이 RAW에는 절대 손대지 않는다는 점을 기억하세요2.
FAQ
Deferred Start는 실행을 실제로 얼마나 빠르게 만드나요?
Apple은 실험실 라이트보드에서 대략 2배 빠르다고 측정했습니다. 1초에 가깝던 실행 시간이 Deferred Start 활성화로 약 그 절반으로 떨어졌고, 복잡한 캡처 세션은 그 이상으로 개선될 수 있습니다1. 이 이득은 첫 프레임 전에 미리보기 출력만 초기화하고 다른 모든 출력은 미리보기가 나타난 뒤로 미루는 데서 나옵니다1.
Deferred Start를 자동으로 얻나요?
앱이 AVCaptureVideoPreviewLayer로 미리보기를 렌더링하고 iOS 26 이상 SDK에 대해 다시 컴파일하면, 그렇습니다. 자동 모드가 켜지고 automaticallyRunsDeferredStart가 기본적으로 true입니다1. AVCaptureVideoDataOutput으로 미리보기를 렌더링하는 앱은 자동으로 얻지 못하며, 동일한 실행 이득을 얻으려면 수동 Deferred Start를 채택해야 합니다1.
Deferred Start를 써도 첫 사진이 여전히 느린 이유는 무엇인가요?
사진 출력을 지연하면 미리보기는 빨라지지만 첫 캡처는 빨라지지 않습니다. 시스템이 캡처를 시작하기 전에 여전히 지연된 사진 출력의 초기화를 끝내기 때문입니다1. AVCapturePhotoOutput의 isResponsiveCaptureEnabled를 설정하여 캡처를 버퍼링하면, 사진 출력이 완전히 준비되기 전이라도 그 순간이 기록됩니다1.
Center Stage 전면 카메라를 코드에서 어떻게 찾나요?
.front 위치에서 .builtInUltraWideCamera 기기 유형을 요청하는 AVCaptureDevice.DiscoverySession을 사용하세요. Center Stage 전면 카메라는 iPhone 17, iPhone Air, iPhone 17 Pro에서 그 초광각 전면 기기로 노출됩니다2. 거기서 dynamicAspectRatio를 설정하여 세션을 다시 만들지 않고도 정사각형 센서에서 지원되는 어떤 종횡비든 잘라내세요2.
옛 전면 카메라 회전 로직이 새 센서에서 깨지나요?
깨질 수 있습니다. Center Stage 센서가 역사적인 Landscape Left가 아니라 Portrait로 장착되어 있어, 보정되지 않은 버퍼는 옆으로 또는 거꾸로 나타나기 때문입니다2. AVCapturePhotoOutput은 HEIC, JPEG, 비압축 처리 사진(RAW는 절대 아님)에 대해 기본적으로 센서 방향 보정을 적용하므로, cameraSensorOrientationCompensationEnabled를 비활성화하지 않는 한 기존 회전 값이 계속 작동합니다2.
Apple 생태계 클러스터
이 글은 카메라와 캡처 레인에 속합니다. 프로 비디오 캡처와 표시를 위한 AVFoundation HDR 및 Apple Log 워크플로, 캡처가 앱 아키텍처에서 어디에 들어맞는지를 다루는 iOS 앱의 세 가지 표면, 미리보기를 호스팅하는 UI 레이어를 다루는 SwiftUI는 무엇으로 이루어져 있는가, 그리고 어떤 기능이 어디에 도착하는지를 다루는 Apple 플랫폼 매트릭스입니다. 허브는 Apple 생태계 시리즈입니다. iOS와 AI 에이전트 맥락은 iOS 에이전트 개발 가이드를 참고하세요.
참고 문헌
-
Apple, “Build a responsive camera app that launches quickly,” WWDC26 Session 303. Presented by Jake of Apple’s camera performance team. Covers the four-stage launch sequence, the Deferred Start API (automatic and manual modes,
isDeferredStartEnabled,automaticallyRunsDeferredStart,runDeferredStartWhenNeeded(), and thesessionWillRunDeferredStart/sessionDidRunDeferredStartcallbacks),isResponsiveCaptureEnabled, preview rendering viaAVCaptureVideoPreviewLayerversusAVCaptureVideoDataOutput, hardware cost and system pressure APIs, and Pro Video Storage (usesProVideoStorage,isProVideoStorageSupported,remainingCapacity) new in iOS 27. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple, “Support the Center Stage front camera in your iOS app,” WWDC26 Session 341. Presented by Tracy of Apple’s Camera Software team. Covers the square Center Stage front-camera sensor on iPhone 17, iPhone Air, and iPhone 17 Pro accessed as the front
.builtInUltraWideCamera;dynamicAspectRatioandsupportedDynamicAspectRatios;AVCaptureSmartFramingMonitor(enabledFramings,supportedFramings,recommendedFraming,stopMonitoring) for Auto Zoom and Auto Rotate; sensor orientation compensation (cameraSensorOrientationCompensationEnabled); cinematic stabilization modes; and the Center Stage video-call API (isCenterStageEnabled, control modes) pluslowLatencyvideo stabilization. ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩ -
Apple Developer Documentation: AVFoundation. The framework reference covering capture, editing, and playback APIs (
AVCaptureSession,AVCaptureDevice,AVCaptureDeviceInput,AVCaptureVideoPreviewLayer,AVCapturePhotoOutput,AVCaptureMovieFileOutput,AVCaptureVideoDataOutput,AVAssetWriter, andAVCaptureConnection) referenced throughout both sessions. ↩ -
Apple, “Implement high resolution photo capture,” WWDC26 Session 304. Presented by Mohit of Apple’s Camera Software team. Source for fast capture prioritization behavior (the system detecting rapid captures and adapting quality to balanced), the iOS 27 deferred processing of balanced fast captures on iPhone 16 and iPhone 17, the basketball demo (one blocked capture versus five responsive shots), the 24MP/48MP extension to the iPhone 16 Pro telephoto and iPhone 17 ultra wide cameras, the 18MP Center Stage front camera format, and the prioritization-level requirements per resolution. The property name
isFastCapturePrioritizationEnabled(iOS 17.0+) verified against Apple’s AVCapturePhotoOutput documentation. ↩↩↩↩↩↩ -
Apple, “Camera and Photo Technologies Group Lab,” WWDC26 Lab 8018. Source for the session-reconfiguration batching rule (the capture session re-resolving its object graph on disruptive property changes, and the bank-transaction analogy for
beginConfiguration()/commitConfiguration()) and the confirmation that Deferred Start and the prepared-photo-settings array are orthogonal and complementary. Paraphrased from a locally transcribed recording of the WWDC 2026 Camera and Photo Technologies Group Lab; Apple publishes no captions for the labs. The symbolsbeginConfiguration()andcommitConfiguration()onAVCaptureSession, andsetPreparedPhotoSettingsArray(_:completionHandler:)onAVCapturePhotoOutput, verified against Apple’s AVCaptureSession documentation and AVCapturePhotoOutput documentation. ↩↩↩↩↩