ハイライト
macOS Ventura と iOS 16 で Continuity Camera が導入され、Mac は iPhone のカメラを外付けカメラとして直接使えます。高品質なビデオ入力に加え、Center Stage、Studio Light、Desk View など iPhone 独自のエフェクトもサポートします。
主要内容
Mac のカメラ体験は、これまで組み込みカメラか、ユーザーが手動で接続した外付けカメラの二択にとどまることが多かったです。デバイス切断、MacBook の蓋を閉じる、より適したカメラの出現などで、App はユーザーに再選択を求めることがよくあります。
Continuity Camera は iPhone を Mac 上の外付けカメラとマイクとして公開します。macOS 13、iOS 16、同一 Apple ID、二要素認証、USB または近距離ワイヤレス接続などの条件を満たせば、iPhone は Mac のカメラ一覧に表示されます(00:40)。
既存 App にとって最も直接的な変化は、AVFoundation の標準キャプチャチェーンをすでに使っている場合、iPhone の画質、Center Stage、Portrait、Studio Light、Desk View など多くの体験が自動的に得られることです(07:58)。
この Session の焦点は、マルチカメラ環境で App をシステム App に近づけることです。システム推奨カメラを自動追従しつつ手動選択も記憶し、iPhone ビデオストリームから最大 1200 万画素の写真をキャプチャし、Desk View を独立した AVCaptureDevice として自分のキャプチャフローに組み込みます。
詳細
カメラの自動選択
(08:43)macOS 13 は AVCaptureDevice に 2 つのクラスプロパティを追加しました。userPreferredCamera と systemPreferredCamera です。
userPreferredCamera は読み書き可能です。ユーザーが App 内で手動選択したとき、そのデバイスを書き込みます。AVFoundation は App ごとのユーザー設定を記憶し、接続・切断・再起動後も利用可能な提案を続けます。
systemPreferredCamera は読み取り専用です。ユーザー設定、デバイス状態、Continuity Camera の自動選択シグナルを組み合わせ、現在最適なカメラを示します。例えば iPhone が静止スタンド上で横向き、画面オフ、USB または近距離ワイヤレスで Mac に接続されているとき、Continuity Camera は自動選択されるべきシグナルを出します(10:44)。
概念例:
// Pseudocode based on the session transcript.
if automaticCameraSelectionEnabled {
observe(AVCaptureDevice.systemPreferredCamera) { camera in
replaceVideoInput(with: camera)
}
}
func userDidPickCamera(_ camera: AVCaptureDevice) {
AVCaptureDevice.userPreferredCamera = camera
if !automaticCameraSelectionEnabled {
replaceVideoInput(with: camera)
}
}
キーポイント:
automaticCameraSelectionEnabledは App 独自の自動モードスイッチを表し、Session は手動と自動の両モード提供を推奨します(11:56)。- 自動モードでは
systemPreferredCameraを監視し、プロパティ変化時にAVCaptureSessionのビデオ入力を更新します。 - ユーザーが手動選択したときは常に
userPreferredCameraを書き込み、システムが App の設定履歴を保持します。 - 手動モードでは
systemPreferredCameraの追従を止め、ユーザー選択デバイスを直接使います。
iPhone ビデオストリームから高解像度写真をキャプチャ
(14:33)Continuity Camera は iPhone の写真品質を macOS に持ち込みます。macOS 13 以前は macOS の写真キャプチャはビデオ解像度のみでしたが、Continuity Camera 使用後は最大 1200 万画素の写真をキャプチャできます。
Session の有効化フローは 2 層です。まず AVCapturePhotoOutput で高解像度キャプチャを有効化し、各撮影の AVCapturePhotoSettings で高解像度写真を有効化します。
概念例:
// Pseudocode based on the session transcript.
let photoOutput = AVCapturePhotoOutput()
photoOutput.isHighResolutionCaptureEnabled = true
photoOutput.maxPhotoQualityPrioritization = .quality
let settings = AVCapturePhotoSettings()
settings.isHighResolutionPhotoEnabled = true
settings.photoQualityPrioritization = .quality
settings.flashMode = .auto
photoOutput.capturePhoto(with: settings, delegate: photoDelegate)
キーポイント:
isHighResolutionCaptureEnabledはトランスクリプトのhighResolutionCaptureEnabledに対応し、キャプチャ開始前にAVCapturePhotoOutputへ設定します。isHighResolutionPhotoEnabledは各キャプチャのhighResolutionPhotoEnabledに対応し、今回の撮影が高解像度写真を出力するかを決めます。maxPhotoQualityPrioritizationは出力オブジェクトが許容する最高品質優先度を制限します。photoQualityPrioritizationは 1 回の撮影で速度と品質のトレードオフを選びます。flashModeはオン、オフ、またはシーンと光に応じた自動選択が可能です(15:58)。
顔と人体のメタデータを受信
(16:14)macOS で AVCaptureMetadataOutput が使えるようになり、App は iPhone の Continuity Camera ビデオストリームから timed metadata を受け取れます。Session は face metadata objects と human body metadata objects の 2 種を明示しています。
顔メタデータ受信は単純です。session に AVCaptureMetadataOutput を追加し、サポートされるメタデータタイプを確認し、オブジェクトタイプ配列を face に設定し、delegate でリアルタイムコールバックを受けます。
概念例:
// Pseudocode based on the session transcript.
let metadataOutput = AVCaptureMetadataOutput()
session.addOutput(metadataOutput)
if metadataOutput.availableMetadataObjectTypes.contains(.face) {
metadataOutput.metadataObjectTypes = [.face]
metadataOutput.setMetadataObjectsDelegate(delegate, queue: metadataQueue)
}
キーポイント:
AVCaptureMetadataOutput()はメタデータ専用の出力を作成します。session.addOutput(metadataOutput)はビデオ入出力が設定済みの capture session に接続します。availableMetadataObjectTypesで現在デバイスがサポートするメタデータタイプを確認します。.faceは Session の顔メタデータオブジェクトタイプに対応します。- delegate は session 実行開始後にリアルタイムの顔メタデータコールバックを受け取ります。
Desk View を独立カメラとして使う
(18:01)Desk View は Control Center から起動するシステム App だけではありません。macOS 13 は Desk View を独立した AVCaptureDevice としても公開します。
Desk View デバイスを見つける方法は 2 つです。device discovery session で Desk View camera デバイスタイプを検索するか、メインカメラの companionDeskViewCamera から対応する Desk View デバイスを取得します。後者は複数の Continuity Camera がある環境でメインカメラとデスクトップ俯瞰をペアリングするのに適しています。
概念例:
// Pseudocode based on the session transcript.
let deskViewCamera = mainCamera.companionDeskViewCamera
if let deskViewCamera {
useWithVideoDataOutput(deskViewCamera)
useWithMovieFileOutput(deskViewCamera)
useWithPreviewLayer(deskViewCamera)
}
キーポイント:
mainCameraはすでに選択された Continuity Camera のメインビデオデバイスです。companionDeskViewCameraはメインカメラとペアの Desk View デバイスを取得します。- Desk View デバイスは video data output、movie file output、
AVCaptureVideoPreviewLayerで使えます。 - Session によると Desk View の現在フォーマットは 420v、1920×1440、最大 30 fps です(19:00)。
重要ポイント
1. ビデオ会議 App の自動カメラモード
- やること:カメラ選択メニューに「自動選択」スイッチを追加する。
- 価値がある理由:
systemPreferredCameraは Continuity Camera の準備完了時に変化し、会議参加後の手動カメラ切り替えを減らせます。 - 始め方:自動モードで
AVCaptureDevice.systemPreferredCameraを監視し、変化時にAVCaptureSessionのビデオ入力を置き換える。手動選択時はAVCaptureDevice.userPreferredCameraを書き込む。
2. Mac 文書収集ツールの高品質撮影
- やること:Mac App で iPhone をカメラとして使い、紙の領収書、ホワイトボード、手書き草稿を撮影する。
- 価値がある理由:macOS 13 の Continuity Camera は最大 1200 万画素の写真キャプチャをサポートし、保存と認識にはビデオフレームだけより適しています。
- 始め方:
AVCapturePhotoOutputを使い、まず高解像度キャプチャを有効化し、各AVCapturePhotoSettingsで高解像度写真と品質優先度を有効化する。
3. 教育 App のデスクトップ俯瞰ビュー
- やること:講師画面の横に Desk View を表示し、手書き、模型、楽器、手作業をデモする。
- 価値がある理由:Desk View はメインカメラと同時利用でき、Session はメインカメラで Center Stage を有効にして顔と体の構図を安定させることを推奨します(06:52)。
- 始め方:メイン Continuity Camera デバイスから
companionDeskViewCameraを読み取り、preview layer または video data output に接続する。
4. インタラクティブ創作ツールの顔メタデータ入力
- やること:Mac 創作 App で顔の位置に応じてレイアウト、ステッカー、録画補助線を駆動する。
- 価値がある理由:macOS の
AVCaptureMetadataOutputは iPhone ビデオストリームから顔と人体メタデータを受信できます。 - 始め方:capture session に
AVCaptureMetadataOutputを追加し、availableMetadataObjectTypesを確認後に face metadata object を購読し、delegate でリアルタイムコールバックを処理する。
関連セッション
- Create camera extensions with Core Media IO — macOS カメラシステム拡張を解説。仮想カメラ、ハードウェアカメラ、システムカメラ入力の公開方法の理解に役立ちます。
- Capture machine-readable codes and text with VisionKit — VisionKit Data Scanner を解説。カメラ入力をテキストとバーコード認識へ続ける場合に適しています。
- Discover advancements in iOS camera capture: Depth, focus, and multitasking — iOS カメラキャプチャの新機能を解説。深度、フォーカス、マルチタスク、複数ビデオ出力の理解を補完します。
コメント
GitHub Issues · utterances