sherpa-tts-server (Rust)
基于 sherpa-onnx SDK 的现代化纯 Rust HTTP TTS 服务,与原有 C++ 服务架构及 HTTP 契约完全对齐。 支持普通 WAV 合成与实时流式播放(原生 PCM16 裸流与 MP3 流)。普通链路使用 POST /tts 并从 /wav/* 获取音频;流式链路使用 POST /tts-stream 创建播放 URL,支持原生 HTTP Chunked PCM16 裸流(format: "pcm",由 FreeSWITCH mod_audio_fork 驱动,零编解码与极速起播)或 MP3 流(由 FreeSWITCH mod_shout 拉取 audio/mpeg)。
特性亮点
- 高性能异步架构:基于 Tokio 与 Axum 0.8 构建纯异步 HTTP 服务,零阻塞 I/O。
- 线程池隔离与背压:固定大小
OfflineTtsPool管理 C 绑定的 sherpa-onnx 模型实例,队列打满时 503 快速失败。 - 并发请求去重(Inflight Deduplication):基于
tokio::sync::broadcast合并同文本/音色/语速并发请求,避免重复推理。 - 带活跃读租约(ReadLease)保护的 LRU 缓存:保护正在推流或下载的文件不被淘汰删除。
- 原生 HTTP Chunked PCM16 与 MP3 流式双驱动:支持
format: "pcm"输出裸 PCM16 流(配合audio_fork://消除 ffmpeg 转码延迟,首包延迟再降 200~300ms);实时 MP3 流式管道对齐 FreeSWITCHmod_shout混音时钟(起播预缓冲 Stream Prebuffering),消除首包空音打断。
目录结构
text
sherpa-tts-server/
├── src/ # Rust 源码 (cache, config, ffmpeg, http, streaming, tts, types)
├── config.toml # 运行时配置
├── scripts/ # 测试与联调客户端脚本
│ ├── request-tts.ts # 普通 TTS 请求测试客户端
│ └── request-tts-stream.ts # 流式 TTS 压测与生命周期回归脚本
├── run-server.ts # 本地自包含调试启动入口
├── build.ps1 / build.sh # Windows (PowerShell 7) / Linux 构建脚本
└── dist/ # 自包含交付目录 (win_x64 / linux_x64)构建
Windows x64 (PowerShell 7)
powershell
pwsh .\build.ps1脚本将自动执行 cargo build --release,并将二进制 sherpa_tts_server.exe、config.toml 以及 sherpa-onnx-c-api.dll、sherpa-onnx-cxx-api.dll、onnxruntime.dll 等依赖动态库完整装配至 dist/win_x64/。
Linux x64
bash
./build.sh运行
本地启动
powershell
bun run run-server.ts或直接进入产物目录运行:
powershell
cd dist\win_x64
.\sherpa_tts_server.exe服务默认读取工作目录下的 config.toml,也可通过 sherpa_tts_server.exe <config_path> 显式指定。
验证
1. 健康检查
bash
curl http://127.0.0.1:9080/health2. 同步合成测试
powershell
bun scripts/request-tts.ts "测试语音合成"3. 流式 MP3 压测
powershell
bun scripts/request-tts-stream.ts --base-url http://127.0.0.1:9080 --parallel 5