1

我一直在使用PJSIP开发 C# Xamarin 应用程序,但遇到了一个小(或大)障碍。我目前设置的系统是用户将收到来电通知,这允许他们单击通知并打开应用程序。然后,该应用程序将使用 SIP 凭据向 SIP 服务器注册,并且理想情况下会收到一条 INVITE 消息,允许他们接听来电。但是,这根本不是它的工作方式。如果在发送 INVITE 之前应用程序已向 SIP 服务器注册,则可以正常接收呼叫。但是,如果应用程序在之后注册INVITE 被发送,它永远不会被客户端接收或识别。有没有办法使用 SIP 手动检查 INVITE 消息,或者这是一个根本不存在的功能?

4

2 回答 2

0

当 SIP 服务器收到来电(INVITE 消息)时,它需要知道将其转发到哪里。这就是您的应用程序需要在服务器上注册的原因:这会在 SIP URI(用户)与其联系地址 (IP) 之间创建一个映射。当 SIP 服务器收到 INVITE 时,它会检查消息的 Request-URI 的映射是否存在,如果存在,则将消息转发到相应的联系地址。

如果在 SIP 服务器接收到 INVITE 消息时不存在映射,则 SIP 服务器将通过返回最终响应(如 404 Not Found)简单地结束 INVITE 事务。您的客户将不会收到收到 INVITE 消息的通知。

如果您有权访问 SIP 服务器,则可以在 SIP 服务器中创建应用程序 URI 与其联系地址之间的静态映射。这意味着您的应用程序将不再需要注册。它不是很灵活,但在这种情况下它会帮助你。但是请注意,当使用静态映射时,SIP 服务器可能总是会转发传入的 INVITE 消息。即使您的应用程序没有运行。

于 2020-04-28T06:26:09.890 回答
0

问题在于 SIP REGISTER 方法的工作原理,

SIP REGISTER 方法的目的是让 SIP 服务器知道在哪里可以到达该用户 - 它应该将 SIP INVITE 发送到哪个 IP 地址和端口。

如果您还没有注册,您的 SIP 服务器将不知道在整个 Internet 中的哪个 IP 地址发送 SIP INVITE 进行呼叫,当它想呼叫它时。

虽然您可以将您的应用程序设置为侦听传入的 SIP INVITES,并且可以正常工作,但服务器仍然需要知道将其发送到哪个 IP 地址和端口,因此您需要另一种机制来告诉该 SIP 服务器哪个 IP发送 SIP INVITE 的地址和端口,但这是设置 SIP REGISTER 来解决的问题,因此使用 SIP REGISTER 功能可能是最简单的。

如果你好奇的话,我写了一篇关于 SIP REGISTRAR 函数如何工作的博客文章。

于 2020-04-28T06:21:30.497 回答