文档

SIP服务接入规范

更新时间:
一键部署

SIP对讲服务接入规范

1. 概述

本文档旨在描述SIP对讲服务接入规范,云对讲采用标准SIP协议,其主要分为注册、会话建立、通话、会话结束、注销等几个阶段。涉及SIP、SDP、RTP、RTCP、PCMA、PCMU、Speex、Opus、H264、DTMF等协议。

图片 1

2. 协议规范

2.1 SIP

SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、网状单播(unicast)或两者的混合体进行通信。SIP协议详见《RFC 3261 SIP: Session InitiationProtocol》。

SIP有很多开源库,如PJSIP、osip2、opensipstack等,可以根据自身平台特性选择。

如下是注册阶段的示例报文:

09:57:14.634407 IP 192.168.1.233.62039> 47.112.101.107.6050: UDP, length 605
E..y#...@..<..../pek.W...e..REGISTERsip:47.112.101.107 SIP/2.0
Via: SIP/2.0/UDP192.168.1.233:62039;branch=z9hG4bK.7jiHBl8Sm;rport
From:<sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107>;tag=nPfvQ6pKa
To:sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107
CSeq: 20 REGISTER
Call-ID: 7ay7mqUOym
Max-Forwards: 70
Supported: replaces, outbound
Accept: application/sdp
Accept: text/plain
Accept: application/vnd.gsma.rcs-ft-http+xml
Contact:<sip:TU9e8mJvLJLcSsy9dmDKuc@192.168.1.233:62039;transport=udp>;+sip.instance="<urn:uuid:418ee786-4cf0-435a-b42c-5ab6d06f8b88>"
Expires: 600
User-Agent: Linphone Desktop/4.1.1(belle-sip/1.6.3)
 
 
09:57:14.658069 IP 47.112.101.107.6050> 192.168.1.233.62039: UDP, length 525
E..).&..2..2/pek.......W..._SIP/2.0401 Unauthorized
Via: SIP/2.0/UDP192.168.1.233:62039;branch=z9hG4bK.7jiHBl8Sm;received=121.204.13.62;rport=62039
From:<sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107>;tag=nPfvQ6pKa
To:sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107;tag=as4fef1d8e
Call-ID: 7ay7mqUOym
CSeq: 20 REGISTER
Server: JustPBX
Allow: INVITE, ACK, CANCEL, OPTIONS,BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
WWW-Authenticate: Digest algorithm=MD5,realm="asterisk", nonce="59320d53"
Content-Length: 0
 
 
09:57:14.670190 IP 192.168.1.233.62039> 47.112.101.107.6050: UDP, length 786
E....k..@.>...../pek.W......REGISTERsip:47.112.101.107 SIP/2.0
Via: SIP/2.0/UDP192.168.1.233:62039;branch=z9hG4bK.awvGndk3C;rport
From:<sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107>;tag=nPfvQ6pKa
To:sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107
CSeq: 21 REGISTER
Call-ID: 7ay7mqUOym
Max-Forwards: 70
Supported: replaces, outbound
Accept: application/sdp
Accept: text/plain
Accept:application/vnd.gsma.rcs-ft-http+xml
Contact:<sip:TU9e8mJvLJLcSsy9dmDKuc@121.204.13.62:62039;transport=udp>;+sip.instance="<urn:uuid:418ee786-4cf0-435a-b42c-5ab6d06f8b88>"
Expires: 600
User-Agent: Linphone Desktop/4.1.1(belle-sip/1.6.3)
Authorization:Digest realm="asterisk",nonce="59320d53", algorithm=MD5,username="TU9e8mJvLJLcSsy9dmDKuc",uri="sip:47.112.101.107", response="414132ffca95be7131b756d4890b1fc4"
 
 
09:57:14.691681 IP 47.112.101.107.6050> 192.168.1.233.62039: UDP, length 575
E..[./..2.../pek.......W.G.gSIP/2.0 200OK
Via: SIP/2.0/UDP192.168.1.233:62039;branch=z9hG4bK.awvGndk3C;received=121.204.13.62;rport=62039
From:<sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107>;tag=nPfvQ6pKa
To: sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107;tag=as4fef1d8e
Call-ID: 7ay7mqUOym
CSeq: 21 REGISTER
Server: JustPBX
Allow: INVITE, ACK, CANCEL, OPTIONS,BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Expires: 600
Contact: <sip:TU9e8mJvLJLcSsy9dmDKuc@121.204.13.62:62039;transport=udp>;expires=600
Date: Thu, 16 Jan 2020 01:57:14 GMT
Content-Length: 0

2.2 SDP

SDP(Session DescriptionProtocol)是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围。SDP不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。SDP协议详见《RFC 4566 - SDP: Session Description Protocol》

如下是INVITE携带SDP报文示例:

10:04:41.223197 IP 192.168.1.233.62039> 47.112.101.107.6050: UDP, bad length 2114 > 1472
E..... .@.T...../pek.W...J,.INVITEsip:M28PLP9MSvu6w0Vc13HPnC6@47.112.101.107 SIP/2.0
Via: SIP/2.0/UDP192.168.1.233:62039;branch=z9hG4bK.8aOxITrEA;rport
From:<sip:TU9e8mJvLJLcSsy9dmDKuc@47.112.101.107>;tag=7B13LTdJn
To: sip:M28PLP9MSvu6w0Vc13HPnC6@47.112.101.107
CSeq: 20 INVITE
Call-ID: hpgH62gK2G
Max-Forwards: 70
Supported: replaces, outbound
Allow: INVITE, ACK, CANCEL, OPTIONS,BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO, UPDATE
Content-Type: application/sdp
Content-Length: 1449
Contact:<sip:TU9e8mJvLJLcSsy9dmDKuc@121.204.13.62:62039;transport=udp>;+sip.instance="<urn:uuid:418ee786-4cf0-435a-b42c-5ab6d06f8b88>"
User-Agent: Linphone Desktop/4.1.1(belle-sip/1.6.3)
 
v=0
o=TU9e8mJvLJLcSsy9dmDKuc 2846 1117 INIP4 192.168.1.233
s=Talk
c=IN IP4 192.168.1.233
t=0 0
a=ice-pwd:305b42a8561a2b3f06a158d7
a=ice-ufrag:a60560d1
a=rtcp-xr:rcvr-rtt=all:10000stat-summary=loss,dup,jitt,TTL voip-metrics
m=audio 54480 RTP/AVPF 96 97 98 0 8 10199 100
c=IN IP4 121.204.13.62
a=rtpmap:96 opus/48000/2
a=fmtp:96 useinbandfec=1
a=rtpmap:97 speex/16000
a=fmtp:97 vbr=on
a=rtpmap:98 speex/8000
a=fmtp:98 vbr=on
a=rtpmap:101 telephone-event/48000
a=rtpmap:99 telephone-event/16000
a=rtpmap:100 telephone-event/8000
a=rtcp:51670
a=candidate:1 1 UDP 2130706431192.168.1.233 54480 typ host
a=candidate:1 2 UDP 2130706430192.168.1.233 51670 typ host
a=candidate:2 1 UDP 1694498815121.204.13.62 54480 typ srflx raddr 192.168.1.233 rport 54480
a=candidate:2 2 UDP 169449881

2.3 RTP/RTCP

RTP(Real-time TransportProtocol)即实时传输协议,是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTSP协议),视频会议和一键通(Push to Talk)系统(配合H.323或SIP),使它成为IP电话产业的技术基础。RTP协议和RTP控制协议RTCP一起使用,而且它是创建在UDP协议上的。

RTP标准定义了两个子协议,RTP和RTCP。数据传输协议RTP,用于实时传输数据。该协议提供的信息包括:时间戳(用于同步)、序列号(用于丢包和重排序检测)、以及负载格式(用于说明数据的编码格式)。控制协议RTCP,用于QoS反馈和同步媒体流。相对于RTP来说,RTCP所占的带宽非常小,通常只有5%。RTP/RTCP协议详见《RFC3550 - RTP: A Transport Protocol for Real-Time Applications》

2.4 音频

目前支持PCMA、PCMU、Speex 8kHz/16kHz、Opus音频格式

·PCMA/PCMU

PCMA/PCMU协议接入详见《RFC 3551 -RTP Profile for Audio and Video Conferences with Minimal Control》

·Speex

Speex是一个声音编码格式,目标是用于网路电话、线上广播使用的语音编码,基于CELP开发,Speex宣称可以免费使用,以BSD授权条款开放原始码。 Speex的开发者将这个格式视为Vorbis的补充。 Speex是一种有损格式,这意味著使用此格式的音讯,品质将会永久性地降低以减少档案的大小。接入详见《RFC 5574 - RTP Payload Format for the Speex Codec》

Speex支持8kHz和16kHz

·Opus

Opus是一个有损声音编码的格式,由Xiph.Org基金会开发,之后由网际网路工程任务组进行标准化,目标是希望用单一格式包含声音和语音,取代Speex和Vorbis,且适用于网路上低延迟的即时声音传输,标准格式定义于RFC 6716档案。Opus格式是一个开放格式,使用上没有任何专利或限制。接入详见《RFC 7587 - RTP Payload Format for the Opus Speech and Audio Codec》

2.5 视频

目前支持H264视频格式

·H264

H264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。主要目标是:与其它现有的视频编码标准相比,在相同的带宽下提供更加优秀的图象质量。通过该标准,在同等图象质量下的压缩效率比以前的标准(MPEG2)提高了2倍左右。接入详见《RFC3984 - RTP Payload Format for H.264 Video》

2.6 DTMF

DTMF(Dual Tone MultiFrequency)即双音多频,由高频群和低频群组成,高低频群各包含4个频率。一个高频信号和一个低频信号叠加组成一个组合信号,代表一个数字。DTMF信号有16个编码。利用DTMF信令可选择呼叫相应的对讲机。DTMF在对讲中用于发送开门指令(*键)。接入详见《RFC 2833 - RTP Payload for DTMF Digits, Telephony Tones andTelephony Signals》

3. 扩展协议

3.1 开锁协议

为了扩展功能,现在SIP基础上,通过SIP INFO方法(详见RFC 6086 - Session InitiationProtocol (SIP) INFO Method and Package Framework)来发送、接收自定义请求,由于目前SIP采用udp,可能会存在丢包,为了保证成功率,这里采用双包策略,即发送端同时发送2个请求(响应)包,接收端判断3秒内如果是同一个包(根据reqsn),则第二个包不做处理。

请求方发送命令后,在3秒内未收到响应包,则认为请求失败,并返回给上层。请求报文格式如下

·公共头

需设置如下header

Content-Type:application/json

·请求

|参数|类型|必填|描述|

|:--|:--

|req|string|是|请求命令,值为unlock

|reqsn|int|是|请求序列号,1-999范围内循环自增,每次请求加1,双包策略中第二个包reqsn不自增

|sip|string|是|开锁发起方SIP号

示例:

{
    "req":"unlock",
    "reqsn":100,
    "sip":"M124123123"
}

·响应

|参数|类型|必填|描述|

|:--|:--

|res|string|是|返回请求的命令,值为unlock

|reqsn|int|是|返回请求的reqsn

|status|int|是|状态码,200成功,400以上失败

示例:

{
"res":"unlock",
"reqsn":100,
"status":200
}

4. 附录

《RFC 3261 - SIP:Session Initiation Protocol》 - https://tools.ietf.org/html/rfc3261

《RFC 4566 - SDP:Session Description Protocol》 - https://tools.ietf.org/html/rfc4566

《RFC 3550 - RTP: ATransport Protocol for Real-Time Applications》- https://tools.ietf.org/html/rfc3550

《RFC 3551 - RTPProfile for Audio and Video Conferences with Minimal Control》- https://tools.ietf.org/html/rfc3551

《RFC 5574 - RTPPayload Format for the Speex Codec》 - https://tools.ietf.org/html/rfc5574

《RFC 7587 - RTPPayload Format for the Opus Speech and Audio Codec》 - https://tools.ietf.org/html/rfc7587

《RFC 3984 - RTPPayload Format for H.264 Video》 - https://tools.ietf.org/html/rfc3984

《RFC 2833 - RTPPayload for DTMF Digits, Telephony Tones and Telephony Signals》- https://tools.ietf.org/html/rfc2833

《RFC 6086 - SessionInitiation Protocol (SIP) INFO Method and Package Framework》- https://tools.ietf.org/html/rfc6086