WWDC Quick Look 💓 By SwiftGGTeam
Discover Continuity Camera for tvOS

Discover Continuity Camera for tvOS

元の動画を見る

ハイライト

tvOS 17 では Continuity Camera と Mic が導入され、iPhone/iPad を Apple TV のカメラとマイク入力ソースとして使用できます。既存のiOSカメラアプリはDevice Discoveryを追加するだけでtvOSに対応でき、AVAudioEngineの音声処理APIによりビデオ会議やライブブロードキャストなどの新たなシーンを実現できます。

主要内容

以前、tvOS には、コンテンツ再生 (ストリーミング) とゲームの 2 つのカテゴリのアプリしかありませんでした。カメラとマイクを使用すると、コンテンツ作成、ビデオ会議、ライブブロードキャストなどの新しいシナリオが可能になります。

(00:25) tvOS 17 の継続カメラは macOS Ventura の実装に似ています。iPhone または iPad を Apple TV の近くに置くと、カメラとマイクがシステムの入力デバイスになります。

既存の iOS コードは基本的に利用可能です

(02:15) tvOS は、iOS 上の AVFoundation キャプチャ API のフルセットをサポートするようになりました。

  • AVCaptureDevice / AVCaptureDeviceInput:カメラとマイク -AVCaptureSession: セッションマスターをキャプチャします -AVCaptureOutput:出力(写真、ビデオ、メタデータ) -AVCaptureVideoPreviewLayer:リアルタイムプレビュー

すでに iOS カメラ アプリをお持ちの場合、ほとんどのコードはコンパイルされ、tvOS 上で直接実行されます。 Xcode プロジェクトのターゲットにサポートされているプラ​​ットフォームとして Apple TV を追加するだけです。

デバイスの検出が主な違いです

(03:46) Apple TV にはカメラが内蔵されていないため、利用可能なデバイスを最初に検出する必要があります。 AVKit は新しいデバイス セレクターを提供します。

SwiftUI

@State private var showDevicePicker = false

// 在 body 中
.continuityDevicePicker(isPresented: $showDevicePicker) { device in
    // device 是 AVContinuityDevice
    setActiveVideoInput(device)
}

UIKit

let picker = AVContinuityDevicePickerViewController()
picker.delegate = self
present(picker, animated: true)

// delegate 回调
func continuityDevicePicker(_ picker: AVContinuityDevicePickerViewController, 
                            didConnect device: AVContinuityDevice) {
    setActiveVideoInput(device)
}

キーポイント:

  • AVContinuityDevice関連するものを含むAVCaptureDevice(ビデオとオーディオ)
  • セレクターは Apple TV にログインしているユーザーのすべてのデバイスをリストし、ゲストペアリングをサポートします
  • デバイスが接続された後、それも通過しますAVCaptureDeviceDiscoverySessionおよび KVO 通知リリース

デバイスの可用性を監視する

(09:58) デバイスはいつでも切断される可能性があり、アプリはこの状態変化を処理する必要があります。

// システム優先カメラの変化を監視
AVCaptureDevice.systemPreferredCamera
// tvOS 上只有 continuityCamera 类型

KVOによる監視systemPreferredCamera

  • nil: 使用可能なカメラがありません
  • そうではないnil: 連続カメラが利用可能です

デバイスが利用可能になったら開始するAVCaptureSession、デバイスが使用できない場合はセッションを停止し、ユーザーに新しいデバイスを接続するように求めます。

完全な tvOS 適応コード

(11:54) この講演では、既存の iOS アプリに tvOS サポートを追加する完全なプロセスを示します。存在するContentView真ん中:

#if os(tvOS)
@State private var showDevicePicker = false
#endif

var body: some View {
    // ... existing UI ...
    #if os(tvOS)
    Button("Connect Camera") {
        showDevicePicker = true
    }
    .continuityDevicePicker(isPresented: $showDevicePicker) { device in
        activateContinuityDevice(device)
    }
    .task {
        // すでにデバイスが接続されている場合は、そのまま有効化する
        if let device = AVCaptureDevice.systemPreferredCamera {
            activateContinuityDevice(device)
        }
    }
    #endif
}

キーポイント:

  • 使用する#if os(tvOS)tvOS 固有のコードを分離するためのコンパイル条件 -.taskビューが表示されたら、すでに接続されているデバイスがあるかどうかを確認してください
  • ボタンにより、ユーザーはデバイス セレクターを手動でトリガーできます

マイク API

(17:40) tvOS 17 は初めてマイクをサポートします。オーディオ セッションは入力デバイスのサポートを追加します。

  • playAndRecordカテゴリとvoiceChat/videoChat mode
  • inputAvailableプロパティは KVO をサポートし、マイクの可用性を監視します
  • 録音許可APIはiOSと互換性があります

デバイスの種類を入力してください:

  • 導通マイク: iPhone/iPad経由AVContinuityDevice得る
  • Bluetooth: AirPods またはその他のヘッドフォン、既存のオーディオ セッション API 経由でクエリ

(18:55) 合格AVAudioSessionPortデバイスの種類を特定します。

let continuityDevice: AVContinuityDevice
for port in continuityDevice.audioSessionPorts {
    if port.portType == .continuityMicrophone {
        // これは Continuity マイク
    }
}

エコーキャンセレーション

(23:32) tvOS でのエコー キャンセルは iOS よりも複雑です。録画は iPhone で行われ、再生は Apple TV からさまざまなサウンド デバイス (TV スピーカー、サウンド バー、HomePod など) に出力され、ユーザーはマイクから数フィート離れている場合があります。

tvOS 17 には、新しい音声処理およびエコー キャンセル テクノロジーが組み込まれています。有効にするのは簡単です。

let engine = AVAudioEngine()
engine.inputNode.voiceProcessingEnabled = true

または、オーディオ ユニットを使用します。

// AU VoiceIO with VoiceProcessingIO subtype

詳細

ストレージに関する考慮事項

(15:27) tvOS のファイル ストレージは iOS とは異なります。

  • .documentDirectorytvOS では利用できません。実行時にエラーが報告されます。
  • のみ使用できます.cachesDirectory- アプリの再起動の間にキャッシュデータがクリアされる場合があります
  • コンテンツ作成アプリはできるだけ早くデータをクラウドにアップロードし、使用後はローカル コピーを削除する必要があります。

代替案:

  • CloudKit: ユーザーによるデータの保存をサポート
  • iCloud: マルチユーザー シナリオでのデータ同期

インタラクティブな違い

(15:02) tvOS にはタッチ イベントがなく、ユーザーは方向キーとリモコンのボタンを介してシステムを操作します。アプリは Focus Engine に適応する必要があります。

Apple TV は、複数のユーザーとゲストをサポートする共有デバイスです。アプリは個人情報を処理する際にこれを考慮する必要があります。

録音 API の選択

API該当するシナリオ
AVAudioRecorder最も単純な音声ファイルの録音
AVCaptureビデオとオーディオを同時に録画
AVAudioEngine複雑な音声処理(カラオケなど)
AudioQueue非リアルタイム記録
AudioUnit(AU RemoteIO / AU VoiceIO)リアルタイムオーディオI/Oを直接操作

重要ポイント

  • やるべきこと: 既存の iOS カメラ アプリに tvOS サポートを追加します。

  • 実行する価値がある理由: コードの再利用率は非常に高いため、Device Discovery を追加するだけで済みます。リビングルームのシーンはまったく新しいユーザーグループを開拓します

  • 開始方法: Apple TV を Xcode ターゲットに追加し、次を使用します。#if os(tvOS)デバイス セレクターを追加すると、残りのキャプチャ ロジックが完全に再利用されます

  • やるべきこと: tvOS ビデオ会議アプリを開発する

  • 価値がある理由: tvOS 17 + Continuity Camera により、大画面のビデオ会議が可能になります。 AVAudioEngineの音声処理により、エコーキャンセルが自動で完了します。

  • 開始方法: を使用しますAVContinuityDevicePickerViewControllerデバイスを選択して作成AVCaptureSession、ビデオ出力用AVCaptureVideoDataOutput、オーディオ有効voiceProcessingEnabled

  • やるべきこと: ライブ ストリーミング アプリに連続カメラを統合します。

  • 価値がある理由: ユーザーは iPhone の高解像度カメラをライブ ブロードキャスト ソースとして使用し、大画面でリアルタイムにコメントやギフトを見ることができます。

  • 開始方法: iOS を再利用するAVCaptureSessiontvOS 固有のデバイス検出プロセスを構成、追加し、デバイスの切断と再接続の処理に注意を払う

  • やるべきこと: tvOS バージョンを教育/フィットネス アプリに追加し、モーション認識にカメラを使用します。

  • 実行する価値がある理由: 大画面 + カメラ = 新しいインタラクション方法。フィットネス アプリはユーザーの動きを分析でき、教育アプリはジェスチャーを操作できます。

  • 開始方法: を使用しますAVCaptureMetadataOutputフレームごとに顔・人体検出データを取得し、大画面上でリアルタイムにフィードバックを提供

関連セッション

コメント

GitHub Issues · utterances