SRTCEngine 是 Swift SDK 的主入口,负责加入频道、离开频道、创建本地轨道以及配置日志和音频处理器。
初始化
init()
创建一个 SDK 实例,并完成底层 WebRTC 初始化。
属性
logLevel
设置 SDK 日志级别。
示例:
language
SDK 语言,类型 String?(BCP 47 语言标签,如 "en"、"zh-CN"),默认 nil = 跟随系统语言。自 1.5.0 起提供。
只影响请求后端时的 Accept-Language 头,即后端业务错误(码 1000–99999)文案的语言;SDK 自身的报错(SRTCError.message)一律英文,不随它变化。与 logLevel 一样是进程级全局设置,建议在 joinChannel / enableIm 之前设置。
currentLanguage
当前实际生效的语言,类型 String,只读:language 已设置则为它,否则为系统首选语言,取不到时为 "zh"。自 1.5.0 起提供。
错误码与处理方式见 错误码。
audioCaptureProcessor
麦克风采集后的音频处理器,可用于变声、降噪等处理。全局只有一个,SDK 自身的本端电平计量串在它之后,两者互不影响。自 1.6.0 起不需要再用它算自己的音量,见 activeSpeakerOptions。
activeSpeakerOptions
ActiveSpeakerOptions,didChangeActiveSpeakers 快照里「自己」那一条的参数,自 1.6.0 起提供:includeLocal(默认 true)、interval(本端采样间隔,默认 0.5 秒,加入频道时读取)、silenceThreshold(默认 0.01)。详见 通话质量与活跃说话人。
audioRenderProcessor
远端音频播放前处理器,可用于播放侧音频增强。
channels
已加入且仍存活的频道列表([Channel]),按加入先后排序。空数组表示不在任何频道中。
defaultChannel
默认频道(Channel?):最早加入且仍存活的那个,它离会后顺延到下一个。无参的
leaveChannel() 作用于它。详见多频道。
方法
joinChannel(token:options:)
加入频道并返回 Channel 实例。可多次调用以同时加入多个频道,各频道的发布、订阅、成员与
事件互不干扰,仅当同一频道名已加入(或正在加入中)时抛 alreadyJoined。
返回值:
Channel
可能抛出:
SRTCError.alreadyJoinedSRTCError.tokenExpiredSRTCError.tokenInvalid- 其他网络、信令、流媒体连接错误
leaveChannel()
离开默认频道(最早加入且仍存活的那个)。
leaveChannel(_:)
离开指定频道,等价于 channel.leave(),其它频道不受影响。多频道下建议用这个版本,
避免「默认频道顺延」带来的歧义。
createLocalMicTrack(preset:)
创建本地麦克风轨道。
返回值:
LocalMicTrack
createLocalCameraTrack(preset:)
创建本地摄像头轨道。
返回值:
LocalCameraTrack
createLocalScreenTrack(preset:audioPreset:mode:)
创建本地屏幕共享轨道。
返回值:
LocalScreenTrack
iOS 全屏采集下
startCapture() 成功只代表 SDK 开始监听,画面要等用户从系统 UI 发起广播后
才会传输,真正的开始 / 结束通过 TrackDelegate.screenBroadcastDidStart /
screenBroadcastDidFinish(_:reason:) 通知。createLocalScreenTrack(source:preset:audioPreset:excludedWindowIds:excludesCurrentApplication:)
macOS 12.3+ 专用重载,用于指定显示器或窗口源。
返回值:
LocalScreenTrack
createLocalCustomVideoTrack(desc:)
创建自定义视频轨道,适合外部推帧场景。
返回值:
LocalVideoTrack
调用后可通过 pushFrame(...) 注入 CVPixelBuffer。
指定轨道 ID 建轨(1.5.5 起)
createLocalCustomVideoTrack(desc:trackId:)、createLocalScreenTrack(preset:audioPreset:mode:trackId:),以及 macOS 的 createLocalScreenTrack(source:preset:audioPreset:excludedWindowIds:excludesCurrentApplication:trackId:),与同名的原接口相同,只是多一个 trackId: String 参数,用它作为轨道 ID,不再随机生成。
适用于「同一路画面先后换采集源」:几条轨道对象各自采集、先后互斥发布,但对外始终是同一个轨道 ID。网宿 CDN 的流名由轨道 ID 决定,云端录制只拉开录时的那一路流,换了 ID,录制会判定推流中断;同 ID 先取消发布再发布则不受影响。
同一时刻只能发布同一 ID 的其中一个对象:另一个还在发布时调用
publishLocalTrack 会抛 invalidState。取消发布只对当前正在发布的那个对象生效,对已被替换的旧对象调用 unpublishLocalTrack 直接返回,不影响新轨道。
createLocalCustomAudioTrack(desc:)
创建自定义音频轨道,适合外部 PCM 输入场景。
返回值:
LocalAudioTrack
调用后可通过 pushAudioBuffer(...) 注入 AVAudioPCMBuffer。
视频前处理
defaultVideoProcessors
默认视频处理器管线。在这里配一次,此后每条新建的摄像头轨道自动带上。
摄像头轨道每次开摄像头都是新建的(关摄像头即销毁),只在轨道上设一次,下次开摄像头效果就没了 —— 这个属性就是为此存在。只影响此后新建的轨道,不追溯已存在的轨道;自定义视频轨道不受影响(那条路的帧由业务方
pushFrame,要不要过处理器自己决定)。
虚拟背景
以下方法转发到SRTCVirtualBackground.shared,状态整机一份。开启后自动作用于所有摄像头轨道,不需要往 videoProcessors 里挂东西。用法与调优见 虚拟背景。
可能抛出:
SRTCError.virtualBackgroundAlreadyInstalled、.virtualBackgroundNotInstalled、.virtualBackgroundModelNotFound(String)、.virtualBackgroundSessionFailed(String)
背景虚化与背景替换互斥,后调用的生效;两者在装载前调用也会被记住,装载完成后自动生效。