在 RTC 上发送静默会导致每个客户端的背景 CPU 使用量显著增加

作者: bolshoytoster创建于 2026年9月12日更新于 2026年9月13日

我注意到,当 AI 处于不说话的状态时,语音到语音会产生明显的 CPU 使用率。我发现了两个原因,其中一个主要原因是,在 WebRTC 连接上, s2s 不断发送 50 个包/秒的静音音频(我认为这在 WebRTC 中是标准的)。网络使用量似乎可以忽略不计(约 150 字节/秒)。在 s2s 24/7 运行,仅偶尔发言的情况下,这非常令人恼火。我已经在本地上成功地缓解了这个问题,通过在发送器耗尽发送数据时禁用它: https://GitHub.com/huggingface/speech-to-speech/blob/16d7f98ff712fb082d53497937f5456667c84680/src/speech_to_speech/api/openai_realtime/webrtc_session.py#L146-L147 和在有更多数据要发送时启用它: https://GitHub.com/huggingface/speech-to-speech/blob/16d7f98ff712fb082d53497937f5456667c84680/src/speech_to_speech/api/openai_realtime/webrtc_session.py#L120-L121 我不确定如何完全禁用它的最佳方法。完全消除 CPU 使用率的方法是调用 stopRTCRtpSender 上,然后在需要时重新创建它。我不确定是否需要重新协商,或者是否启动/停止发送器太频繁(每几秒钟在正常对话中一次)会产生太多开销。另一种方法是使用 replaceTrack 添加/删除音轨。目前在 aiortc 中,这将导致一个任务每秒醒来 50 次,以检查音轨,这不是理想的,但比当前实现要好得多。

内容来源: huggingface/speech-to-speech