SIP心跳

SIP协议分为普通心跳和会话心跳。

普通心跳

由于SIP本身没有定义心跳,因而在实践中一般采用OPTIONS消息作为心跳,OPTIONS原来是用来作为获取对方能力的消息,正好也可以检测对方当前服务状态,比较合适。

正常情况下,UAS收到OPTIONS心跳,什么也不用做,直接回复200即可。

但是这种心跳的问题在于,如果服务异常重启,那么之前的会话则无法检测,因此规范也定义了会话级心跳。

会话心跳

SIP的会话心跳,是在初始请求时携带 timer 标识,标识自己支持会话刷新,UAS在响应的时候也可以标识自己是否支持。实际应用中,是可配置的一般可以简单的由对方来发送心跳,本地响应即可。

在确认支持会话刷新机制后,会话在接通后,其中一端可启动定时器定期刷新会话,可以使用 UPDATE 或者 INVITE,相对于能力是请求响应中可以获取到。一般实践中,UPDATE 消息应用于接通前,因此接通后使用 INVITE 消息。

INVITESession-Expires 字段会携带时间和刷新者,响应需要对应的关系如下

UAC是否支持 请求refresher参数 响应refresher参数
none uas
uac NA
uas NA
none uas 或 uas
uac uac
uas uas

一般要求对方主动刷新的时候,本地响应相对比较简单,参照上面表格响应即可。本地主动刷新需要设定时器参照刷新周期内,在大于 Min-SE 时间的任意时间发起(默认很多服务为90秒)。实测很多运营商服务都是90秒检测,失败后直接 BYE 挂机。

更早的文章

RTP打包带B帧的H264

正常情况下,RTP传输的H264是BP规格的,也就是只有I/P帧的视频内容。是否可以传输高规格视频呢,答案是肯定的。 H264视频规格分析H.264有四种画质级别,分别是BP、EP、MP、HP: Baseline Profile 基本画质。支持I/P帧,只支持无交错和CAVLC。 Extended …

技术 继续阅读