Skip to main content
SRTC Python SDK(PyPI 包名 srtc)面向服务端 AI 场景:让你的 Python 服务以一个”参会者”的身份加入频道,收到频道里每个人的声音,再把合成好的声音推回去。

适用场景

  • AI 语音助手 / 语音机器人:ASR → LLM → TTS 管线接入频道
  • 服务端录音、质检、实时转写
  • 已有 pipecat 语音 agent,想接到 SRTC 频道里(见 接入 pipecat)

和 C SDK 的区别

两者底层是同一套原生内核,行为一致。区别在于数据形态: 模型的输入输出都是原始数据,所以 AI 场景用 Python SDK 基本不用碰编解码。

安装

依赖只有 cffi、av(自带 ffmpeg 与 libopus,不需要在系统里另装 ffmpeg)、numpy。

支持平台

Python 3.10 及以上。同一平台的安装包对所有 Python 3.x 小版本通用。
glibc 低于 2.28 的系统(如 CentOS 7):SDK 本身支持到 glibc 2.17,但依赖 av 的新版本只提供 glibc 2.28+ 的安装包, pip 会转而尝试从源码编译并失败。请固定 av 的版本安装:
Alpine(musl)暂未提供 Python 安装包,需要的话请联系我们。

线程模型

SDK 基于 asyncio,所有接口都要在事件循环里调用:
  • 信令、断线重连、音视频收发都在 SDK 内置的原生库里运行,不占用 Python 的 GIL,不会拖慢你的 Python 代码
  • 所有事件回调、async for 拿到的数据帧,都在事件循环线程里交给你,不需要加锁
  • 入会、订阅、发布这类要等服务端协商的接口是 async 的,等待期间不阻塞事件循环
事件回调里不要做同步的耗时操作(比如同步调用模型推理),那会卡住整个事件循环,所有频道的收发都会受影响。耗时处理请用 await 异步调用,或放到线程池 / 进程池里。

部署注意

不要在已经使用过 SDK 的进程里 fork。 原生内核在 fork 出的子进程里无法工作:
  • 只 import srtc、还没创建过 Channel 就 fork:没问题(gunicorn --preload 等场景可以正常用)
  • 已经创建过 Channel 再 fork:子进程里再用会直接抛 RuntimeError,不会卡死
  • 用 multiprocessing 时请设置 multiprocessing.set_start_method("spawn")
容量参考。 单进程实测(Apple M 系列,每个频道收 1 路 + 发 1 路音频):20 个频道同时在线约占 61% 单核 CPU、181 MB 内存,零丢帧。Python 侧的编解码是单进程的上限所在,会话多时请多进程横向扩展。
每个频道连接都要用单独签发的 Token。Token 与一次会话绑定,同一个 Token 加入第二次会被服务端以 1032 拒绝。

下一步