继承 srtc.ChannelHandler,覆写需要的方法,在 Channel.join(token, handler=...) 时传入。未覆写的事件会被忽略。
- 所有方法都在 asyncio 事件循环线程里调用,不需要加锁
async 方法会作为 Task 调度,不会阻塞后续事件
- 方法里抛出的异常会被记录到
srtc logger,不会中断 SDK
事件列表
on_active_speakers、on_connection_quality、on_layer_switched 依赖频道的流媒体引擎,部分部署下不会触发。业务逻辑请不要依赖它们一定到达。
顺序与时机
用户类、轨道类事件之间不保证先后顺序。例如某个用户的 on_track_added 可能先于他的 on_user_join 到达。按 uid 做幂等处理即可,不要假设”先加入、后发布”。
- 入会前已经在频道里的用户和轨道不会触发
on_user_join / on_track_added,请在入会后读取 ch.users
- 同一路轨道的
on_audio_frame / on_video_frame 严格按顺序到达
on_audio_frame 是高频事件,请用普通函数并尽快返回;需要做耗时处理时,更推荐用 ch.audio_frames() 的 async for 方式消费
断线处理
区分三种情况: