2.5 可视对讲SIP服务器接入协议

更新时间:

1. 概述

1.1 编写目的

本文是可视对讲设备云对讲功能SIP服务接入协议说明。

1.2 名词解释

名词

解释

IoT

物联网

2. 介绍

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

image

3. 协议规范

3.1 SIP

SIP(Session Initiation Protocol)是⼀个应⽤层的信令控制协议。⽤于创建、修改和释放⼀个或多个参与者的会话。这些会话可以是Internet多媒体会议、IP电话或多媒体分发。会话的参与者可以通过组播(multicast)、⽹状单播(unicast)或两者的混合体进⾏通信。SIP协议详⻅《RFC 3261 SIP:Session Initiation Protocol》。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..REGISTER sip:47.112.101.107 SIP/2.0
Via: SIP/2.0/UDP 192.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.0 401 Unauthorized
Via: SIP/2.0/UDP 192.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......REGISTER sip:47.112.101.107 SIP/2.0
Via: SIP/2.0/UDP 192.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 200 OK
Via: SIP/2.0/UDP 192.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

3.2 SDP

SDP(Session Description Protocol)是⼀种会话描述格式 ― 它不属于传输协议 ― 它只使⽤不同的适当

的传输协议,包括会话通知协议(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,.INVITE sip:M28PLP9MSvu6w0Vc13HPnC6@47.112.101.107 SIP/2.0
Via: SIP/2.0/UDP 192.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 IN IP4 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:10000 stat-summary=loss,dup,jitt,TTL voip-metrics
m=audio 54480 RTP/AVPF 96 97 98 0 8 101 99 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 2130706431 192.168.1.233 54480 typ host
a=candidate:1 2 UDP 2130706430 192.168.1.233 51670 typ host
a=candidate:2 1 UDP 1694498815 121.204.13.62 54480 typ srflx raddr 192.168.1.233 rport 54480
a=candidate:2 2 UDP 169449881

3.3 RTP/RTCP

RTP(Real-time Transport Protocol)即实时传输协议,是⼀个⽹络传输协议,它是由IETF的多媒体传输⼯作⼩组1996年在RFC 1889中公布的。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协议详⻅《RFC 3550 - RTP: A Transport Protocol for Real-Time Applications》

3.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》

3.5 视频

目前⽀持H264视频格式

H264

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

3.6 DTMF

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

4. 扩展协议

4.1 开锁协议

为了扩展功能,现在SIP基础上,通过SIP INFO⽅法(详见RFC 6086 - Session Initiation Protocol (SIP) INFO Method and Package Framework)来发送、接收⾃定义请求,由于⽬前SIP采⽤udp,可能会存在丢包,为了保证成功率,这⾥采⽤双包策略,即发送端同时发送2个请求(响应)包,接收端判断3秒内如果是同⼀个包(根据reqsn),则第⼆个包不做处理。请求⽅发送命令后,在3秒内未收到响应包,则认为请求失败,并返回给上层。为了尽量减少数据包⼤⼩,采⽤x-www-form-urlencoded格式。

  • 公共头

需设置如下header

Content-Type:application/json

  • 请求

参数

类型

必填

描述

req

string

请求命令,值为unlock

reqsn

int

请求序列号,1-999范围内循环⾃增,每次请求加1,双包策略中第⼆个包reqsn不⾃增

示例:

{

"req":"unlock",

"reqsn":100

}

  • 响应

参数

类型

必填

描述

res

string

返回请求的命令,值为unlock

reqsn

int

返回请求的reqsn

status

Int

状态码,200成功,400以上失败

示例:

{

"res":"unlock",

"reqsn":100,

"status":200

}

5. 附录

《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: A Transport Protocol for Real-Time Applications》-https://tools.ietf.org/html/rfc3550

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

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

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

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

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

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