2.5 可視對講SIP服務器接入協議
1. 概述
1.1 編寫目的
本文是可視對講設備云對講功能SIP服務接入協議說明。
1.2 名詞解釋
名詞 | 解釋 |
IoT | 物聯網 |
2. 介紹
本文檔旨在描述SIP對講服務接入規范,云對講采?標準SIP協議,其主要分為注冊、會話建?、通話、會話結束、注銷等幾個階段。涉及SIP、SDP、RTP、RTCP、PCMA、PCMU、Speex、Opus、H264、DTMF等協議。
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