Skip to main content
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(视频)。
想”听全场”请用 auto_subscribe_audio=True 分别收每个人的音频,不要订阅音频合成流:合成流里包含 agent 自己的声音,会形成回声。

unsubscribe

取消订阅。

request_key_frame

请求远端视频立即发送关键帧,SDK 内部限制每秒最多一次。开启 decode_video 时,解码出错 SDK 会自动请求,一般无需手动调用。

switch_layer

对方发布了多层(simulcast)视频时,主动切换订阅的层,结果通过 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,每个都会拿到全部帧。