ハイライト
iPhone 17 ファミリーのフロントカメラは、正方形センサーと 95 度の視野角を持つレンズを採用しています。動的なアスペクト比切り替えとスマートフレーミングにより、セルフィーやビデオ通話は、画面内の人数と位置に合わせて自動的に適応します。
主要内容
これまでフロントカメラで撮影するときには、いくつか決まった悩みがありました。
横向きで撮るか縦向きで撮るかに応じて、ユーザーはスマートフォンを回転させる必要がありました。グループ写真では、誰かに撮ってもらうか、腕を思い切り伸ばす必要がありました。ビデオ通話では、少し動いただけで画面から外れてしまい、ユーザーが手動で位置を調整しなければなりませんでした。
iPhone 17、iPhone Air、iPhone 17 Pro のフロントカメラは、これらの問題をハードウェアレベルで解決します。
センサーは従来の 4:3 の長方形ではなく、正方形です。つまり、横向き、縦向き、正方形など、どのアスペクト比を選んでもスマートフォンを回転させる必要がありません。レンズの視野角は 95 度で、iPhone のフロントカメラとしては最も広いものです。顔と視線の検出と組み合わせることで、カメラは自動的にズームし、フレームを回転させて、全員を画面内に収められます。
Apple はこの能力を 2 つの API として提供します。Dynamic Aspect Ratio と Smart Framing Monitor です。前者は画面の向きをシームレスに切り替え、後者は自動的にフレーミングの提案を返します。
ビデオ通話では、Center Stage がリアルタイムにフレームを調整し、通話参加者を常に中央に保てます。さらに、ビデオ通話の安定性に特化した低遅延手ぶれ補正モードもあります。
詳細
Dynamic Aspect Ratio
(05:29)
Dynamic Aspect Ratio は、手動および自動フレーミングの基盤です。iOS 26 から、AVCaptureDevice に dynamicAspectRatio プロパティが追加されました。
このプロパティを設定すると、カメラは正方形センサーから選択したアスペクト比を切り出します。capture session を作り直したり、プレビューを中断したりする必要はありません。切り替えはリアルタイムです。
対応するデバイスタイプは、フロントの超広角カメラである .builtInUltraWideCamera です。対応するのは正方形フォーマットのみで、解像度は 1280 から 4032 までです。利用できるアスペクト比は 3:4、4:3、9:16、16:9、1:1 の 5 種類です。4032 フォーマットは 3:4 と 4:3 のみをサポートします。この 2 つが最高の写真解像度を提供するためです。
「タップして回転」ボタンを実装するコードは次のとおりです。
// Center Stage フロントカメラを選択する
let discoverySession = AVCaptureDevice.DiscoverySession(
deviceTypes: [.builtInUltraWideCamera],
mediaType: .video,
position: .front
)
guard let camera = discoverySession.devices.first else { return }
// 目的のアスペクト比をサポートするフォーマットを見つける
let desiredAspectRatio = AVCaptureDevice.AspectRatio.ratio4x3
let format = camera.formats.first { format in
format.supportedDynamicAspectRatios.contains(desiredAspectRatio)
}
// カメラを構成する
try? camera.lockForConfiguration()
camera.activeFormat = format
camera.activeVideoMinFrameDuration = CMTime(value: 1, timescale: 30)
// アスペクト比を切り替える
let timestamp = camera.setDynamicAspectRatio(desiredAspectRatio)
camera.unlockForConfiguration()
ポイント:
DiscoverySessionは.builtInUltraWideCameraタイプのフロントカメラだけを検索しますsupportedDynamicAspectRatiosは、そのフォーマットがサポートするアスペクト比の配列を返しますsetDynamicAspectRatioは、変更が有効になる最初のフレームのタイムスタンプを返します- 切り替え中もプレビューは中断されないため、ユーザーには黒い画面が見えません
Smart Framing Monitor
(07:39)
自動ズームと自動回転は AVCaptureSmartFramingMonitor によって駆動されます。これは顔と視線の検出に基づいて、アスペクト比とズーム係数を含むフレーミング提案を定期的に返します。アプリはその提案を採用しても、無視しても構いません。
この monitor が提案を返すのは 4032 の写真フォーマットだけです。写真撮影シーン向けに設計されているためです。
設定コードは次のとおりです。
// カメラは Dynamic Aspect Ratio の手順ですでに選択済み
let format = camera.formats.first { format in
format.supportedDynamicAspectRatios.contains(.ratio4x3) &&
format.supportedFramings.contains(.smartFraming)
}
try? camera.lockForConfiguration()
camera.activeFormat = format
camera.unlockForConfiguration()
// Smart Framing Monitor を取得して設定する
let monitor = camera.smartFramingMonitor
monitor.enabledFramings = monitor.supportedFramings
// フレーミング提案を監視する
monitor.observe(\.recommendedFraming) { monitor, _ in
guard let recommendation = monitor.recommendedFraming else { return }
try? camera.lockForConfiguration()
camera.setDynamicAspectRatio(recommendation.aspectRatio)
camera.videoZoomFactor = recommendation.zoomFactor
camera.unlockForConfiguration()
}
// 監視を開始する
monitor.startMonitoring()
ポイント:
smartFramingMonitorはAVCaptureDeviceのプロパティですenabledFramingsは monitor がどのフレーミング方式を推奨できるかを制御し、サブセットに制限できます- KVO で
recommendedFramingプロパティを監視し、リアルタイムの提案を取得します - 提案には
aspectRatioとzoomFactorの 2 つの値が含まれます - 先にアスペクト比を設定し、その後でズーム係数を設定すると、プレビューの遷移がより滑らかになります
stopMonitoring()で監視を停止し、removeObserver()で監視登録を解除します
センサー方向補正
(10:05)
これまでの iPhone のフロントカメラセンサーは、横向き (Landscape Left) に取り付けられていました。縦向きで写真を撮ると、画像バッファには 270 度回転すべきことを示す EXIF 方向タグが付きます。
iPhone 17 ファミリーの Center Stage フロントカメラセンサーは、縦向きに取り付けられています。コードが従来の回転値に依存している場合、写真が横向きに表示されることがあります。
AVCapturePhotoOutput はデフォルトで方向補正を自動処理します。写真を物理的に回転させ、EXIF メタデータを更新してからアプリへ渡します。その結果、写真は旧デバイスと同じ landscape left 方向になり、既存の回転ロジックをそのまま使えます。
補正が適用されるのは、HEIC、JPEG、非圧縮の処理済み写真だけです。Bayer RAW や Apple ProRAW には適用されません。
iOS 26 では、この動作を無効にできる cameraSensorOrientationCompensationEnabled プロパティが追加されました。無効にするとパフォーマンスは向上しますが、回転処理が正しいことをアプリ側で保証する必要があります。
Center Stage ビデオ通話
(14:44)
ビデオ通話アプリが VoIP バックグラウンドモードを使っている場合、ユーザーはコントロールセンターの「ビデオエフェクト」メニューから直接 Center Stage をオンにできます。ポートレート、スタジオ照明、ジェスチャーなどのシステムレベルのビデオエフェクトはプロセス単位で有効になり、有効化後はアプリ内の対応カメラすべてに適用されます。
VoIP モードを使わないアプリでも、iPhone 17 ファミリー以降では Center Stage を手動で有効化できます。
// 対応フォーマットを選択する
let format = camera.formats.first { format in
format.supportedCenterStage == true
}
try? camera.lockForConfiguration()
camera.activeFormat = format
camera.centerStageControlMode = .cooperative // ユーザーがアプリ内で制御できるようにする
camera.isCenterStageEnabled = true
camera.unlockForConfiguration()
ポイント:
supportedCenterStageは、そのフォーマットが Center Stage をサポートするかを判定しますcenterStageControlModeには、ユーザーが制御できるcooperativeと、アプリだけが制御するappの 2 種類がありますisCenterStageEnabledで Center Stage をオンにします- 有効にすると、画面は自動的に調整され、全員が中央に収まります
低遅延手ぶれ補正
(15:47)
Center Stage フロントカメラは、ビデオ通話向けに最適化されたリアルタイムの低遅延手ぶれ補正モードもサポートします。
if let connection = videoOutput.connection(with: .video) {
connection.preferredVideoStabilizationMode = .lowLatency
}
このモードはデフォルトでオフです。有効にすると、通話中の揺れが目に見えて減り、映像がより安定します。
重要な着想
1. セルフィーアプリに「スマート集合写真」モードを統合する
作るもの: Smart Framing Monitor を使って画面内の人数を自動検出し、シャッターを押す前に全員が適切な構図に収まるよう、自動でズームと回転を行います。
価値がある理由: 複数人のセルフィーでは、誰かが切れたり端に寄りすぎたりしがちで、ユーザーは位置や距離を何度も調整する必要があります。Smart Framing Monitor は顔と視線の検出に基づいてフレーミング提案を返し、アプリが自動採用すればユーザーはシャッターを押すだけで済みます。
始め方: AVCaptureDevice の smartFramingMonitor を取得し、smartFraming を有効にし、KVO で recommendedFraming の変化を監視します。変化に応じて dynamicAspectRatio と videoZoomFactor を自動設定します。入口 API: AVCaptureSmartFramingMonitor
2. ライブ配信アプリに「横縦同時対応」を追加する
作るもの: Dynamic Aspect Ratio を使い、配信者がスマートフォンを回転させずに横向きと縦向きを切り替えられるようにします。異なるプラットフォームの推奨フォーマットに対応できます。
価値がある理由: ライブ配信プラットフォームごとに推奨画面比率は異なります。TikTok は縦向き 9:16、Bilibili は横向き 16:9 などです。以前はスマートフォンを回転させたり、設定をやり直したりする必要がありました。Dynamic Aspect Ratio は配信を中断せずリアルタイムに切り替わるため、1 つのボタンで複数プラットフォームに対応できます。
始め方: .builtInUltraWideCamera のフロントカメラを選択し、目的のアスペクト比をサポートするフォーマットを見つけ、setDynamicAspectRatio(_:) を呼んで切り替えます。入口 API: camera.setDynamicAspectRatio(.ratio16x9)
3. ビデオ会議アプリの「複数人参加」体験を改善する
作るもの: Center Stage と低遅延手ぶれ補正を有効にし、人が画面に入ってきたときに自動的にフレームを広げ、全員が見えるようにし、手持ちで動いても映像を安定させます。
価値がある理由: ビデオ会議では参加者の出入りが頻繁に起こります。誰かが加わったときに全員が画面に収まらないことがあり、手持ちデバイスの揺れも相手にとって見づらくなります。Center Stage は人物を自動追跡し、低遅延手ぶれ補正は映像の揺れを減らして通話品質を高めます。
始め方: supportedCenterStage に対応するフォーマットを選び、centerStageControlMode = .cooperative を設定し、isCenterStageEnabled をオンにします。ビデオ接続では preferredVideoStabilizationMode = .lowLatency を設定します。入口 API: camera.isCenterStageEnabled = true + connection.preferredVideoStabilizationMode = .lowLatency
4. ソーシャルアプリに「セルフィーポーズガイド」を追加する
作るもの: Smart Framing Monitor の提案を使い、プレビュー画面に視覚的なヒントを表示します。たとえば「少し左へ移動」「後ろへ下がると全体が入ります」といった案内です。
価値がある理由: 一般ユーザーは構図のルールに詳しくないため、セルフィーはバランスが崩れがちです。monitor のフレーミング提案を直感的な視覚ガイドへ変換することで、より良い写真を撮れるようになり、アプリの撮影体験も向上します。
始め方: smartFramingMonitor.recommendedFraming の変化を監視し、現在のフレーミングと提案との差を比較します。プレビューレイヤーに矢印や文字ヒントを重ね、ユーザーの位置調整を案内します。入口 API: monitor.observe(\.recommendedFraming)
5. カメラアプリで「180 度撮影」をサポートする
作るもの: 正方形センサーと 95 度の視野角を活用し、1 回の撮影で前後 2 つの方向をカバーできるようにします。後処理でパノラマや比較画像としてつなぎ合わせたり切り出したりします。
価値がある理由: iPhone 17 の正方形センサーと 95 度の超広角は、iPhone フロントカメラとして最も広い視野を持ち、従来のフロントカメラより広い範囲を 1 回で撮影できます。この特性により、前景と背景を同時に収める構図や超広角セルフィーなど、新しい撮影体験を作れます。
始め方: .builtInUltraWideCamera の 4032 解像度フォーマットを使い、最大視野を確保します。撮影後は超広角でカバーした範囲を使って、画像合成やクリエイティブな切り出しを行います。入口 API: camera.formats から最大解像度を絞り込む + .builtInUltraWideCamera
関連 Session
- 304 - 写真撮影 - Center Stage と組み合わせて使える高度な写真撮影機能を詳しく解説
- 222 - MetricKit - カメラのパフォーマンスと電力指標を分析する
- 269 - SwiftUI - カスタムカメラ UI を構築するためのベストプラクティス
- 274 - SwiftData - 撮影した写真とメタデータを保存して管理する
- 258 - Xcode 27 - カメラアプリをデバッグするための新しいツールと機能
コメント
GitHub Issues · utterances