Highlight
tvOS 17 引入 Continuity Camera 和 Mic,iPhone/iPad 可以作为 Apple TV 的摄像头和麦克风输入源。现有 iOS 相机 App 只需添加 Device Discovery 即可适配 tvOS,配合 AVAudioEngine 的语音处理 API 可实现视频会议、直播等全新场景。
核心内容
tvOS 上的 App 以前只有两类:内容播放(流媒体)和游戏。现在有了摄像头和麦克风,内容创作、视频会议、直播等全新场景成为可能。
(00:25)tvOS 17 的 Continuity Camera 与 macOS Ventura 上的实现类似:把 iPhone 或 iPad 靠近 Apple TV,摄像头和麦克风就成为系统的输入设备。
已有 iOS 代码基本可用
(02:15)tvOS 现在支持 iOS 上的全套 AVFoundation 捕获 API:
AVCaptureDevice/AVCaptureDeviceInput:摄像头和麦克风AVCaptureSession:捕获会话主控AVCaptureOutput:输出(照片、视频、元数据)AVCaptureVideoPreviewLayer:实时预览
如果你已有 iOS 相机 App,大部分代码直接在 tvOS 上编译运行。只需要在 Xcode 项目的 target 里添加 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)设备可能随时断开,App 需要处理这种状态变化:
// 监听系统首选摄像头变化
AVCaptureDevice.systemPreferredCamera
// tvOS 上只有 continuityCamera 类型
用 KVO 监听 systemPreferredCamera:
nil:没有可用摄像头- 非
nil:有 Continuity Camera 可用
设备可用时启动 AVCaptureSession,设备不可用时停止会话并提示用户连接新设备。
完整的 tvOS 适配代码
(11:54)演讲演示了给现有 iOS App 添加 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 首次支持麦克风。Audio Session 新增了对输入设备的支持:
playAndRecordcategory 和voiceChat/videoChatmodeinputAvailable属性支持 KVO,监控麦克风可用性- 录音权限 API 与 iOS 一致
输入设备类型:
- Continuity Microphone:iPhone/iPad,通过
AVContinuityDevice获取 - Bluetooth:AirPods 或其他耳机,通过现有 Audio Session API 查询
(18:55)通过 AVAudioSessionPort 识别设备类型:
let continuityDevice: AVContinuityDevice
for port in continuityDevice.audioSessionPorts {
if port.portType == .continuityMicrophone {
// 这是 Continuity 麦克风
}
}
回声消除
(23:32)tvOS 的回声消除比 iOS 更复杂:录音在 iPhone 上进行,播放从 Apple TV 输出到各种音响设备(电视扬声器、Sound Bar、HomePod 等),用户可能距离麦克风几英尺远。
tvOS 17 内置了新的语音处理和回声消除技术。启用方式很简单:
let engine = AVAudioEngine()
engine.inputNode.voiceProcessingEnabled = true
或者用 Audio Unit:
// AU VoiceIO with VoiceProcessingIO subtype
详细内容
存储注意事项
(15:27)tvOS 的文件存储与 iOS 不同:
.documentDirectory在 tvOS 上不可用,运行时会报错- 只能使用
.cachesDirectory - 缓存数据可能在 App 重启之间被清除
- 内容创作 App 应该尽快将数据上传到云端,用完后删除本地副本
替代方案:
- CloudKit:支持按用户存储数据
- iCloud:多用户场景下的数据同步
交互差异
(15:02)tvOS 没有触摸事件,用户通过遥控器上的方向键和按钮与系统交互。App 需要适配 Focus Engine。
Apple TV 是共享设备,支持多用户和访客。App 处理个人信息时需要考虑这一点。
录音 API 选择
| API | 适用场景 |
|---|---|
AVAudioRecorder | 最简单的音频文件录制 |
AVCapture | 同时录制视频和音频 |
AVAudioEngine | 复杂音频处理(如卡拉 OK) |
AudioQueue | 非实时录制 |
AudioUnit (AU RemoteIO / AU VoiceIO) | 直接操作实时音频 I/O |
核心启发
-
做什么:给现有 iOS 相机 App 添加 tvOS 支持
-
为什么值得做:代码复用率极高,只需要加 Device Discovery。客厅场景打开了全新的用户群体
-
怎么开始:在 Xcode target 里添加 Apple TV,用
#if os(tvOS)添加设备选择器,其余捕获逻辑完全复用 -
做什么:开发一个 tvOS 视频会议 App
-
为什么值得做:tvOS 17 + Continuity Camera 让大屏视频会议成为可能。配合 AVAudioEngine 的语音处理,回声消除自动完成
-
怎么开始:用
AVContinuityDevicePickerViewController选择设备,创建AVCaptureSession,视频输出用AVCaptureVideoDataOutput,音频启用voiceProcessingEnabled -
做什么:在直播 App 中集成 Continuity Camera
-
为什么值得做:用户可以用 iPhone 的高画质摄像头作为直播源,在大屏上实时看到弹幕和礼物
-
怎么开始:复用 iOS 的
AVCaptureSession配置,添加 tvOS 特有的设备发现流程,注意处理设备断开重连 -
做什么:给教育/健身类 App 添加 tvOS 版本,利用摄像头做动作识别
-
为什么值得做:大屏 + 摄像头 = 全新的交互方式。健身 App 可以分析用户动作,教育 App 可以做手势互动
-
怎么开始:用
AVCaptureMetadataOutput获取每帧的人脸/人体检测数据,在大屏上实时反馈
关联 Session
- What’s new in AVFoundation — AVFoundation 新特性,包括捕获 API 更新
- What’s new in voice processing — 语音处理和回声消除的深入讲解
- Support Continuity Camera in your tvOS app — 官方文档指南
评论
GitHub Issues · utterances