Browsed by
Tag: voip

会议室以及其他

会议室以及其他

近日 miniSIPServer 升级到V60版本,这是最新的、可用于商业部署的稳定版本。第一个重大特性就是“会议室”业务,该业务支持不超过 5 个本地分机用户的会议呼叫。请参考业务文档了解细节。miniSIPServer 云也同步升级支持该业务。

另外,正如我们在前一篇博客中提到,V60 业务最终移除了部分老旧的业务,例如呼叫卡、话吧。这些业务曾经对我们某些特定的客户非常重要,但就目前而言该对这些业务说再见了。

优化 miniSIPServer

优化 miniSIPServer

大约 20 年前我们开发并发布了 miniSIPServer,期间我们为越来越多的客户加入了非常多的特性和业务。

最近我们重新审视了 miniSIPServer 的所有业务。其中有些业务的历史非常悠久,我们判定这些业务可能已经无法适应目前的环境(或者说在当前环境下已经没有实用意义),例如“话吧”、“呼叫卡”等各类业务。

下一个版本将优化(或者清除)这类老旧的业务,miniSIPServer 将步入新的阶段,会变得更快、更稳定、更适合新的 VoIP 网络需求。

在 Ubuntu 24.04 (Noble Numbat)系统中运行 miniSIPServer

在 Ubuntu 24.04 (Noble Numbat)系统中运行 miniSIPServer

Ubuntu 24.04 是最新的 LTS(长期支持)版本,很显然在商业环境中将会有很广泛的部署。我们安装了这个重要的版本,并运行 miniSIPServer 进行了一些测试。测试结果非常不错,运行界面如下图所示:

在 Ubuntu 24.04 系统上运行 miniSIPServer

如果您希望在 Linux 环境中部署一个新的 VoIP 系统,那 Ubuntu 24.04 是个不错的选择。

请参考在线文档了解如何在 Linux 系统部署 miniSIPServer 的更多细节。

外线的 RequestURI 参数

外线的 RequestURI 参数

miniSIPServer 与 VoIP 服务器(网关)通过外线连接,发送消息(例如 REGISTER 或者 INVITE等消息)时会在 Request-URI 中自动附加参数“user=phone”。这是来自中国移动的要求。多数情况下这种做法都没有问题,在 RFC3261 规范中也明确定义了 RequestURI 的附加参数。

然而事情总有意外。最近有些客户向我们反映,miniSIPServer 与他们的 VoIP 服务商网络对接失败,对方服务器无法识别 RequestURI 的参数。当然,简单的方法自然是这些服务商升级自己的服务器,遵循 RFC3261 标准规范的定义,这样大家都会很舒适。

其中个别运营商坚持目前的状态,不愿意做出任何改变。那怎么办呢?我们不得不在外线的配置做出一点修改,请参考下图:

外线的 RequestUR 附加参数配置

我们在外线的“出呼叫”配置中,增加了一项“Request-URI 附加参数”。客户们可以根据自己的网络状况来设置该项的值。

需要说明的是,如果是中文界面,我们默认客户是在中国的网络环境下配置外线,因此该项的默认值是“user=phone“,而其他语种的界面中,该项默认为空。我们认为这样的处理可以满足全球各种网络环境的要求。

该修改已经应用于本地版本的 miniSIPServer 以及云端版本的 miniSIPServer,欢迎大家试用。

在 Debian 12 (bookworm) 系统中运行 miniSIPServer

在 Debian 12 (bookworm) 系统中运行 miniSIPServer

最近 Debian 发布了最新的 V12 版本,即 Bookworm 版本。毫无疑问这是最新的稳定版本,也是商业环境中将会大量部署的版本,因此我们一如既往地在该版本中运行、测试了我们最新的 miniSIPServer 版本,验证结果也是一如既往的完美!如下图所示:

在 Debian 12 系统中运行的 miniSIPServer

如果您是在 Linux 系统中部署 VoIP,您可以选择 Debian 12 系统。请参考我们的指导文档了解如何在 Linux 系统中安装、运行 miniSIPServer。相信您会喜欢 Debian + miniSIPServer 的组合。

安全问题

安全问题

OpenSSL 最近发布了新的版本用于修复若干严重的安全问题,而 miniSIPServer 是采用 OpenSSL 的库提供 “SIP over TLS”特性,因此我们也相应将 miniSIPServer 升级到最新的版本,即 V40 (20230221),该版本采用最新的 OpenSSL 库。

如果您在 VoIP 网络中部署了 “SIP over TLS”,我们强烈建议您将 miniSIPServer 升级到最新的版本。

临时响应的可靠性

临时响应的可靠性

众所周知,RFC3262 协议定义了 SIP 临时响应消息的可靠性。这是个非常古早的特性,miniSIPServer(无论是本地版本,还是云端版本)在很久以前就已经支持这个特性。在与传统电信运营商的 IMS 网络对接时,往往必须要支持可靠的临时响应消息,如果设备不具备此能力,运营商通常会直接拒绝所有的呼叫。

RFC3262 定义了“100rel”参数来指示临时响应消息的可靠性,因此我们在此将其称为“100rel”能力。通常情况下,主叫在发起呼叫时应明确指示出自己是否支持“100rel”能力,被叫也同样需要明确要求采用“100rel”能力,因此呼叫双方才能建立临时响应消息的可靠性。

启动100rel能力的基本呼叫流程

在 RFC3262 标准中,我们可以明确以下细节:

…… the initial request contained a Supported or Require header field listing 100rel, and that there is a provisional response to be sent reliably. ……

UAS core … MUST contain a Require header field containing the option tag 100rel, and MUST include an RSeq header field.

上图描述了可靠临时响应消息的基本流程。UAC 在收到可靠的临时响应 18x 消息时,应当向 UAS 方发送 PRACK 消息,告诉 UAS 自己已经收到了 18x 消息。

这不是一个很复杂的流程,我们一直都认为如此。然而几天前一位云通信用户向我们反映,他无法呼叫外部电话。我们跟踪了他的呼叫,得到以下图描述的呼叫流程:

在 100rel 流程中收到 405 错误消息

难以置信…… 这家 VoIP 运营商升级系统后,在 183 消息中要求采用“100rel”能力确保临时响应的可靠性,然而在 miniSIPServer 发送 PRACK 消息进行确认时,它居然返回“405 method not allowed”。这种情况下当然会导致所有的外呼呼叫都失败了。

这是为什么?!如果不能接受、或者不支持 PRACK 消息,它为什么在临时响应消息(也就是183消息)中明确要求“100rel”呢?

要解决这个问题本来也相当简单。只要在临时响应消息中移除“100rel”、即不要求可靠性保证即可,那样 miniSIPServer 就不会发出 PRACK 消息。但是不幸的是,这家运营商的团队居然不知道该怎么做。

我们的客户就被耽搁在这了,他的业务被迫停滞下来。另一方面,我个人猜测这家(以及某些)运营商采用了开源的服务器,例如 Asterisk、FreeSwitch 等,来构建自己的解决方案,但是他们也许没有足够的专家来理解自己究竟构建了什么。

因此我们更新了 miniSIPServer,在外线的配置中增加一个选项用于关闭“100rel”能力,如下图所示:

关闭临时响应消息的可靠性

一旦勾选了这项, miniSIPServer 向外线发出 INVITE 消息时,将不会再携带“100rel”参数。如果您对接了类似荒谬的运营商,请试试这个选项。

ptime=20, 30, 40

ptime=20, 30, 40

在 SIP 会话中, 我们常常在 SDP 中设置 ptime 参数,用于指示呼叫的双方协商 RTP 数据包的大小。如果呼叫中的一方对 RTP 数据包的大小有不同的看法, 它可以在呼叫中设置自己期望的 ptime 参数。但是世界是如此的多样而复杂,有一些 SIP 设备根本就不关心 ptime 参数,并且它们也根本不会告诉呼叫的另一方自己期望的 ptime 参数,往往就是直接开始发送 RTP 包。这种做法就极可能导致问题。

比如,“呼叫记录”业务要求 miniSIPServer 混合从呼叫双方收到的语音流。为了让工作轻松、简单,miniSIPServer 会设置 ptime 参数为20,也就是要求呼叫的双方每20毫秒发送一个 RTP 数据包,因此 miniSIPServer 每20毫秒从双方获得数据包并进行混音、保存在本地文件中。让人毫不意外的是,有些 SIP 设备每30毫秒发送一个包、有些设备每40毫秒发送一个包。当 miniSIPServer 拿到这些大小不一的包进行混音时,时间不一致、大小不一致,有些数据就不得不丢弃。这就导致最后混音的本地语音文件语音质量欠佳。

当然,理想的解决方案是各家设备都尊重 ptime 参数,但是我们对此毫不指望。

因此不得不升级 miniSIPServer 至 V40(build 20220922)来解决这个问题。新版本试图缓存从呼叫双方获得的 RTP 数据包,然后尽力平滑语音的混音过程。另外,我们不得不指出,这显然增加了服务器的 工作负荷。

再见,Windows XP/2003

再见,Windows XP/2003

最近我们更新了 miniSIPServer 以适应 4K 分辨率显示屏的显示效果,但是我们发现,如果想获得非常完美的效果,必须同时升级我们现有的开发工具链。

然而新的工具链不再支持 Windows XP/2003 操作系统。这些操作系统非常棒,勤恳、可靠、任劳任怨,我们一直非常喜爱、信任这些老旧的系统。现在是时候道别了,我们将继续前行。

如果您是在 Windows 系统上部署 miniSIPServer,最新版本(V40)及后续版本将不再支持 Windows XP/2003 系统,最低要求为 Windows 7 (或以上)版本。我们也同步重新构建了 Debian / Ubuntu 系统上的版本,以适应高分辨率的显示需求。

请享受新版本吧。如果有任何问题、或者建议,欢迎您和我们联系。谢谢!

Gnome Calls

Gnome Calls

众所周知,miniSIPServer 可以运行在 Linux 系统,因此常有客户咨询我们是否有 Linux 平台的 SIP 终端软件,大家的初衷是将整个 VoIP 系统构建在 Linux 环境中。实际上 Linux 环境有非常多的选择,例如 linphone、jami 等。

最近发布了一个新的 SIP 软终端,而且非常重要的是,它是 Gnome 项目的核心应用,这就是“Gnome Calls”。在 Debian 的软件库中,这个软件被描述为“Make and receive PSTN phone calls”,而最新版本的 Calls 可以支持 SIP 协议,在 Gnome 项目中的描述已经修改为“Make phone and SIP calls”。

在 Debian 系统中非常容易安装 Calls,请使用以下命令:

sudo apt install gnome-calls

以下截图是 Calls 运行时的主窗体界面:

Gnome Calls 主运行界面
Gnome Calls 主运行界面

点击菜单“VoIP Accounts”即可添加 SIP 账号。大多数项与其他 SIP 终端软件的配置基本一致。例如,在我们的测试环境中, miniSIPServer 的地址是“192.168.3.42”,给终端分配的账号是“100”,请参考以下配置:

SIP 账号配置
SIP 账号配置

请注意:(1)默认的端口是0,建议修改为5060;(2)添加完账号,需要使能后才能向服务器(也就是 miniSIPServer)发起注册、并正常使用。Calls 没有显示账号的运行状态,因此我们需要检查 miniSIPServer 的分机窗体来检视分机的实时状态。

拨打呼叫时,在“Dial Pad”面板直接输入被叫号码(例如101)即可,如下图所示:

拨打呼叫
拨打呼叫

如果有入呼叫,在弹出的窗体中接听、或者拒绝呼叫:

入呼叫处理
入呼叫处理

从各方面使用情况判断,“Gnome Calls”目前还比较简单、粗糙,显然后续还需要加入很多的特性和功能。如果我们希望在 Linux 环境中部署 VoIP 网络、同时希望各网元都是纯粹的 Linux 应用,“Gnome Calls”是个不错的选择。

希望各位也会喜欢这些软件。