srtc.Channel 代表一个已加入的频道连接。通过 await Channel.join(...) 创建,支持 async with,退出时自动离开。一个进程里可以同时存在多个 Channel,彼此独立。
所有方法都要在 asyncio 事件循环里调用。失败时抛出 srtc.SdkError。
生命周期
Channel.join
异常:
SdkError。常见的有 Token 失效(1021 / 1032)、并发已达上限(1033)、无可用节点(1034 / 1035),见 错误码。
leave
async with 时退出会自动调用。
wait_closed
网络抖动引起的短暂断线由 SDK 自动重连,期间触发
on_connection_state(RECONNECTING),不会结束 wait_closed。只有放弃重连、彻底离开时才会返回。closed
disconnect_reason
None。
信息查询
以下属性读取的是本地缓存,不走网络,可以随时调用。订阅
开启了auto_subscribe_audio / auto_subscribe_video 时不需要手动订阅。
subscribe_audio / subscribe_video
uid 与 track_id 来自 on_track_added 事件或 UserInfo.stream_tracks。
订阅频道的合成流时,uid 传 srtc.MCU_PUBLISHER_UID,track_id 传 srtc.TRACK_AMCU_ID(音频)或 srtc.TRACK_MCU_ID(视频)。
unsubscribe
request_key_frame
decode_video 时,解码出错 SDK 会自动请求,一般无需手动调用。
switch_layer
on_layer_switched 通知。
发布
publish_audio
AudioTrack,之后用 await track.write(pcm) 推送数据。
异常:
SdkError,如发布协商失败(180300)或超时(180302)。
unpublish
消费媒体数据
两种方式任选:在ChannelHandler 里实现 on_audio_frame / on_video_frame,或者用下面的 async for。后者更适合线性的 AI 处理流程。
audio_frames
frame.uid 区分说话人),格式为入会时的 audio_format。频道断开后迭代自然结束。
video_frames
消费速度跟不上时,SDK 会丢掉最旧的帧(音频缓冲约 10 秒,视频 60 帧),保证延迟不会无限增长。可以同时开多个
async for,每个都会拿到全部帧。