Skip to main content

ChannelDelegate

通过 channel.delegates.add(delegate: self) 注册。

连接事件


用户事件


轨道事件

最常见的业务入口是 didAddTrack,因为你通常会在这里决定是否订阅远端视频或远端音频。

消息与频道事件


通话质量事件

质量走双轨,按用途选一条:didReceiveQualityReport 是每个上报周期都触发的原始数值,适合信号塔与诊断面板;didChangeConnectionQuality 只在跳档时触发,适合「网络不佳」提示与主动降级。别用前者驱动提示或降级,等级抖动时会反复闪烁。 didChangeActiveSpeakers 给的是全量快照(已按音量降序),业务侧直接覆盖 UI,不需要自己合并增量;无人说话时为空数组。
这四个事件仅 SeaStart(SFU)引擎有 —— 它们走订阅 PeerConnection 上的信令 DataChannel,WangSu(CDN)引擎没有这条通道。详见 通话质量与活跃说话人

TrackDelegate

通过 track.delegates.add(delegate: self) 注册。

轨道级事件

其中 trackDidBindRtcTrack(_:) 对视频渲染尤其有用,因为远端轨道对象可能先出现,底层媒体轨道稍后才真正绑定完成 —— 收到这个事件才代表可以渲染。 两个 screenBroadcast 事件只在 iOS 全屏采集(ScreenCaptureMode.broadcast)下触发: 全屏共享由用户从系统 UI 发起、也可能从系统胶囊直接停止,这些动作发生在 App 之外, 只能靠事件感知。startCapture() 成功仅代表 SDK 已就绪,收到 screenBroadcastDidStart 才是真正”共享中”。详见屏幕共享

AudioRouteSessionDelegate

iOS 专有。 通过 AudioRouteSession.shared.delegates.add(delegate: self) 注册, 所有回调均在主线程执行,协议提供默认空实现,只实现关心的方法即可。 reason 区分了变化来源(.oldDeviceUnavailable 拔出、.newDeviceAvailable 插入、 .override App 主动覆盖),排查路由问题时它往往比结果本身更有价值。 audioRouteSessionDidRecoverFromInterruption(_:) 与系统的 AVAudioSession.interruptionNotification(.ended) 不等价:系统电话挂断瞬间音频硬件尚未释放, SDK 会等通话真正结束且 App 回到前台后才重建会话,失败还会重试——只有真正恢复成功才触发此回调。 业务层在这里刷新 UI 即可,不需要自己处理这套时序。 详见音频路由