wavekat

WaveKat Voice 為什麼執行在自研 SIP 引擎上

· Eason Guo
#語音AI #工程 #開源 #SIP

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。接入你已有的電話電信業者,你的下一通電話就執行在一個我們親手打造、並且開源送出的引擎上。