SIP Sorcery(C#):服务器拒接呼叫及接收端检测方法问询
场景说明
发起呼叫的代码片段
SIPUserAgent objSIPUserAgent = new SIPUserAgent(); WindowsAudioEndPoint objWindowsAudioEndPoint = new WindowsAudioEndPoint(new AudioEncoder()); VoIPMediaSession objVoIPMediaSession = new VoIPMediaSession(objWindowsAudioEndPoint.ToMediaEndPoints()); objVoIPMediaSession.AcceptRtpFromAny = true; string strDestinationAddress = strDialledNumber + gblStrDomain; bool blnCallResult = await objSIPUserAgent.Call(strDestinationAddress, gblStrExtentionNumber, gblStrExtentionPassword, objVoIPMediaSession);
- 服务器通过上述代码向接收端发起呼叫
- 接收端已收到来电通知
技术问询解答
1. 服务器如何拒接或取消已发起的呼出呼叫?
要取消或终止已发起的呼出呼叫,需结合SIP协议规范与所用SDK的API操作:
- 保留呼叫会话引用:若
SIPUserAgent.Call()方法存在返回呼叫会话实例的重载(比如SIPCall对象,而非仅返回布尔值),发起呼叫时必须保存该会话的引用。 - 调用对应终止方法:
- 呼叫未被接收端接通时,调用会话对象的
Cancel()方法(对应SIP协议的CANCEL请求),即可取消呼出呼叫; - 呼叫已接通时,调用会话对象的
Hangup()或Terminate()方法(对应SIP协议的BYE请求),终止当前呼叫; - 若SDK的
SIPUserAgent类提供直接挂断指定呼叫的方法,也可传入目标呼叫标识完成操作。
- 呼叫未被接收端接通时,调用会话对象的
2. 接收端如何检测到呼叫已被服务器拒接或取消?
接收端可通过监听协议消息与SDK事件回调来检测:
- 监听SIP协议层消息:
- 服务器取消未接通呼叫时,接收端会收到
CANCEL请求; - 服务器终止已接通呼叫时,接收端会收到
BYE请求; - 服务器直接拒接呼叫时,接收端会收到4xx类SIP响应(如486 Busy Here、403 Forbidden等)。
- 服务器取消未接通呼叫时,接收端会收到
- 监听SDK封装事件:
所用SIP SDK通常会封装对应状态事件,比如CallCancelled(呼叫被取消)、CallTerminated(呼叫被终止)、CallRejected(呼叫被拒接)等,接收端只需注册这些事件的处理逻辑,就能实时感知呼叫状态变化。
内容的提问来源于stack exchange,提问作者Smit Rathod
相关产品推荐
相关产品推荐

