如何在 C# 中保持 SIPSorcery VOIP 通话?

How to hold SIPSorcery VOIP call in C#?

我正在使用 SIPSorcery dll 通过 C# WPF 应用程序拨打和接听电话。通话和接听工作正常,没有任何问题。我想在通话中实现保留功能。我已经检查了 SIPSorcery dll 中的所有方法我不确定是否有在 SIP 巫术中保持呼叫的功能。是否可以在 SIPSorcery 中保持通话?如果可能的话,我该如何在我的 windows 应用程序中做到这一点?

使用 SIP 保持呼叫的典型方法是发送重新邀请请求并向 SDP 提议添加 a=recvonly 属性。有关 SIP 流程的示例,请参阅 Music On Hold 示例 RFC https://www.rfc-editor.org/rfc/rfc7088#section-2.8.3.

sipsorcery 代码中使用 SIP re-INVITE 的一个示例是 https://github.com/sipsorcery/sipsorcery/blob/master/sipsorcery-core/SIPSorcery.Servers.Cores/SIPApplicationServer/SIPDialogueManager.cs 第 676 行。

你应该基于 RFC : https://www.rfc-editor.org/rfc/rfc6337#section-5.3

基本上,要保持呼叫,您需要发送带有 a=sendonly 媒体属性的 re-INVITE。在重新邀请的 200 OK 响应中,您应该收到 a=recvonly。

取消保持呼叫您需要发送带有 a=sendrecv 的 re-INVITE,并且应该会收到带有 a=sendrecv 的 200 OK 响应。