跳转到主要内容
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.alreadyJoined
  • SRTCError.tokenExpired
  • SRTCError.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
自 1.4.2 起,整屏共享默认包含本 App 自己的窗口。凡是会渲染这路共享画面的窗口都要放进 excludedWindowIds,否则形成无限镜像。窗口列表在 startCapture() 时快照一次,之后新开的窗口一律进画面。

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) 背景虚化与背景替换互斥,后调用的生效;两者在装载前调用也会被记住,装载完成后自动生效。

相关页面