整体模型
Swift SDK 的对象模型可以概括为:SRTC:SDK 主入口,负责入会和创建本地轨道Channel:一次真实的频道连接,负责发布、订阅、用户列表和事件分发Track:音频或视频流的抽象对象ChannelDelegate/TrackDelegate:事件回调入口SRTCVideoView/VideoView/SRTCVideoRenderer:视频渲染层
- 连接状态
- 用户状态
- 媒体轨道状态
SRTC 与 Channel
SRTC
SRTC 更像一个“工厂 + 会话入口”,你通常用它来做两件事:
joinChannel(token:options:)createLocalMicTrack(...)/createLocalCameraTrack(...)/createLocalScreenTrack(...)
Channel
加入频道成功后,真正承载业务状态的是 Channel:
- 发布本地轨道
- 订阅远端轨道
- 获取频道信息与用户信息
- 监听用户进出、轨道变化、断线重连、自定义消息
Track 体系
本地轨道
远端轨道
音频的 Mix 模式
Swift SDK 当前的一个关键实现点是:本地音频默认采用混音模式发送。 这意味着:- 麦克风、自定义音频、屏幕音频会先进入内部
AudioMixer - PeerConnection 中真正发送的是一条内部
audio_mix音频轨道 - 业务层仍然可以分别控制每个音频源的创建、静音、停止采集
- 减少多路音频并发发布时的复杂度
- 让自定义音频、麦克风、屏幕音频采用统一发送模型
- 与已有的 rtc-js 架构保持一致
视频采集与发布
视频轨道的生命周期通常分成三步:- 你可以先本地预览,再决定是否发布
- 可以单独控制硬件采集与网络发送
- 出现权限失败、设备切换失败时,状态更容易定位
视频渲染方式
SDK 提供三种常见渲染入口:SRTCVideoView
SwiftUI 组件,最适合直接在页面里渲染:
VideoView
适合 UIKit / AppKit,使用 bind(track:) 管理绑定关系。
SRTCVideoRenderer
更底层的渲染视图,由轨道自己调用 addRenderer(...) / removeRenderer(...) 绑定。
设备管理
DeviceManager.shared 用于处理设备枚举和设备变化监听:
- 枚举摄像头:
cameras() - macOS 枚举麦克风 / 扬声器:
microphones()、speakers() - iOS 枚举音频路由:
audioRoutes() - 监听设备热插拔与音频会话中断:
DeviceManagerDelegate
DeviceManager 建一层 UI,而不是自己重新写一套平台差异处理。
事件模型
频道级事件走ChannelDelegate:
- 加入成功
- 重连 / 断开
- 用户加入、离开、更新
- 远端轨道新增、更新、移除
- 自定义消息
TrackDelegate:
- 轨道信息变化
- 静音 / 取消静音
- 采集结束
- 底层 WebRTC 轨道绑定完成