Skip to main content

整体模型

Swift SDK 的对象模型可以概括为:
  • SRTC:SDK 主入口,负责入会和创建本地轨道
  • Channel:一次真实的频道连接,负责发布、订阅、用户列表和事件分发
  • Track:音频或视频流的抽象对象
  • ChannelDelegate / TrackDelegate:事件回调入口
  • SRTCVideoView / VideoView / SRTCVideoRenderer:视频渲染层
从第一性原理看,RTC 系统本质上是在同步三类状态:
  • 连接状态
  • 用户状态
  • 媒体轨道状态
Swift SDK 也是围绕这三类状态来设计 API,所以理解这套模型之后,绝大多数接口都会变得自然。

SRTC 与 Channel

SRTC

SRTC 更像一个“工厂 + 会话入口”,你通常用它来做两件事:
  • joinChannel(token:options:)
  • createLocalMicTrack(...) / createLocalCameraTrack(...) / createLocalScreenTrack(...)

Channel

加入频道成功后,真正承载业务状态的是 Channel
  • 发布本地轨道
  • 订阅远端轨道
  • 获取频道信息与用户信息
  • 监听用户进出、轨道变化、断线重连、自定义消息
可以把它理解为“已经完成鉴权和网络连接的一次 RTC 会话”。

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 轨道绑定完成
详细事件清单见 事件参考

建议继续阅读