WaveKat Voice——这款可在 Mac 和 Linux 上运行、会记录并转写每一通通话的软电话——现在运行在一个我们从零编写的 SIP 引擎上:wavekat-sip。这是一个开源的 Rust crate,电话信令和音频传输都由它自己完成,底下没有任何第三方 SIP 协议栈。你拨出或接听的每一通电话、每一次保持和转接,如今都跑在我们从头到尾自己掌握的代码上。
这是我们朝着那个念念不忘的目标又迈进的一步:让每一家小企业都拥有大企业的声音。大公司的电话系统之所以可靠,是因为运营它的人掌控着它的每一层。自己掌握 SIP 引擎,就是我们掌控了你的通话真正经过的那一层——需要更可靠时、需要新功能时,中间不再隔着一个黑盒。
SIP 是什么,为什么它是难啃的那部分
SIP(会话发起协议)是电话之间建立通话所讲的语言——把你的线路注册到运营商、让对方的电话响起来、协商用哪种音频编解码器,并在通话结束时干净地挂断。通话接通之后,实际的音频则由 RTP 承载。SIP 只要有一点微妙的差错,就会出现掉线、单向听不到声音,或者一条线路悄无声息地再也收不到来电。它不起眼、却极为严苛,是软电话里其他一切功能赖以立足的核心。
不久之前,WaveKat Voice 的通话还是通过一个第三方 SIP 库来驱动的。它让我们很快就能打通电话,在早期这是正确的选择。但借来的协议栈会替你决定通话如何建模、错误如何暴露、哪些功能根本触及不到——当我们开始做呼叫转接和高清音频这样的功能时,我们是在迁就它的形状,而不是顺着自己的思路做事。
我们为什么要自己写
我们从零重写了 WaveKat Voice 的 SIP 引擎,也就是 wavekat-sip,理由很朴素,有三条:
- 掌控。 把来电者置于保持状态、转接通话、用会话计时器让长通话保持存活——这些功能都落在 SIP 这一层。掌握了这一层,我们就能直接把功能加上去,而不是把别人的模型掰弯来凑合。
- 轻量。 WaveKat Voice 是一款安静地待在一旁的轻量桌面应用。一个专注、为此而生的引擎能让它保持小巧——只带上它真正用到的 SIP 和 RTP,而不是一个通用协议栈里包罗万象的一切。
- 没有黑盒。 当一通电话出问题时,从你按下的按钮到线路上的数据包,中间的每一行代码我们都能读、都能改。你的通话是怎么工作的,对我们来说没有任何禁区。
这个引擎负责什么
wavekat-sip 只管连线层面的事务,不涉足音频设备和通话编排层,因此保持着小巧和可嵌入:
| 领域 | 它做什么 |
|---|---|
| 注册 | 把你的线路注册到运营商(摘要认证),并保持在线,让来电始终能找到你。 |
| 通话 | 拨出电话、接听来电,并在你接起之前给对方送出规范的振铃信号。 |
| 通话中控制 | 保持与恢复(SIP re-INVITE,RFC 3264)、盲转与询问转接(SIP REFER,RFC 3515),以及电话菜单所需的 DTMF(按键音)。 |
| 音质 | 协商 Opus 编解码器实现宽频「高清」语音,对方不支持时自动回落到标准的 G.711。 |
| 可靠性 | RFC 4028 会话计时器,防止长通话在中途被网络悄悄掐断。 |
它是开源的——和 WaveKat 的其他部分一样
wavekat-sip 不是一个私有的内部组件。它以 Apache-2.0 许可证发布在 crates.io 上,文档在 docs.rs,就像我们的语音活动检测和话轮检测 crate 一样。任何用 Rust 构建软电话、语音机器人或通话录音网桥的人,都可以使用 WaveKat Voice 正在运行的这个引擎。开放地构建就是我们的工作方式——产品底下的工具供你审阅、供你复用,而不是一道护城河。
说句实话:它还早。这个 crate 正在积极开发中,API 在版本之间仍会变化。但它是驱动一个真实产品的真实引擎,不是一个演示品。
常见问题
wavekat-sip 是什么?
wavekat-sip 是 WaveKat 自研的开源 Rust crate,负责 SIP 信令和 RTP 音频传输。它是 WaveKat Voice 拨出或接听每一通电话背后的引擎,底下没有任何第三方 SIP 协议栈。
wavekat-sip 是开源的吗?我能用在自己的项目里吗?
可以。wavekat-sip 以 Apache-2.0 许可证发布在 crates.io 上,文档在 docs.rs。任何用 Rust 构建软电话、语音机器人或通话录音网桥的人,都可以使用 WaveKat Voice 正在运行的这同一个引擎。
WaveKat Voice 支持高清音频吗?
支持。WaveKat Voice 会协商 Opus 编解码器来实现宽频「高清」语音;当对方不支持 Opus 时,会自动回落到标准的 G.711。
WaveKat Voice 能配合任意 SIP 运营商使用吗?
可以。wavekat-sip 采用标准的 SIP 注册(摘要认证),因此可与任何兼容 SIP 的运营商或 PBX 配合——用你已有的账号,无需任何运营商专属配置。
wavekat-sip 可以用于生产环境了吗?
它是驱动一个真实产品的真实引擎,因此已经每天在用——但它还早。这个 crate 正在积极开发中,API 在版本之间仍会变化,所以如果你现在就基于它构建,请锁定版本。
这对你的通话意味着什么
大多数时候,WaveKat Voice 的通话不会让你察觉到任何变化——这正是重点。电话照常接通,声音一如既往。变化发生在幕后:那些让 WaveKat Voice 用起来像一个真正前台的功能——保持、呼叫等待、转接、高清音频——如今按我们自己的节奏推出,而不是看某个依赖库的脸色;哪里需要更稳,我们可以直接走到运行它的那行代码跟前。
WaveKat Voice 在公测期间免费,支持 Mac 和 Linux。接入你已有的电话运营商,你的下一通电话就运行在一个我们亲手打造、并且开源送出的引擎上。