GB28181-2016中的媒體流傳輸模式分析

   在GB28181的2016版中,對於媒體流的傳輸在原有UDP傳輸的基礎中,增加了主動tcp和被動tcp的方式。

   1.UDP的傳輸

    這個是普遍的傳輸方式,GB28181服務端在發invite時,在攜帶的SDP中包含了接收媒體的端口,設備端(被呼叫端)收到invite後,解析該端口,通過UDP將媒體流發向該端口。

   2.TCP被動

   GB28181服務端在發invite時,在攜帶的SDP中包含了接收媒體的端口,並監聽該端口的媒體數據,設備端(被呼叫端)收到invite後,解析該端口,通過TCP將媒體流發向該端口。

   3.TCP主動

   設備端(被呼叫端)告知服務端自己的媒體流tcp端口,服務端主動去連接設備端(被呼叫端)的該端口,獲取數據。

 

基於新的2016版GB28181協議,我們在設備端開發時除了傳統的udp發流外,還要考慮tcp主動和tcp被動兩種方式,在代碼的實現中,我們通過被服務端invite所攜帶的sdp進行區分,代碼如下:

enum SYMediaProtocol
{
	SYUdp = 0,  //UDP傳輸
	SYTcpActive, //tcp主動
	SYTcpPassive  //tcp被動
};

SYMediaProtocol CGbtDeviceAgent::getMediaProtocol(const sstd::string szProtocol )
{
    SYMediaProtocol protocol = kUdp;
    if (szProtocol == MediaMedium::RTP_AVP_TCP || szProtocol == MediaMedium::TCP_RTP_AVP)
    {
        if (medium.setup == MediaMedium::active)
        {
            protocol = SYTcpActive;
        }
        else
        {
            protocol = SYTcpPassive;
        }
    }
    return protocol;
}

我們通過 sdp的信息解析後可以判斷具體的媒體流傳輸協議,以下是tcp主動呼叫時服務端和設備端的GB28181報文,爲了突出重點,限制篇幅,只截取invite和200OK的報文:


INVITE sip:[email protected]:14940 SIP/2.0
Via: SIP/2.0/UDP 106.58.169.248:5066;branch=z9hG4bK-524287-1---96235649734f9450;rport
Max-Forwards: 70
Contact: <sip:[email protected]:5066>
To: <sip:[email protected]:14940>
From: <sip:[email protected]:5066>;tag=4452781c
Call-ID: TReMwjEl4tWDd-O-uEJ9vw..
CSeq: 1 INVITE
Subject: 53000000441329000515:0,11010200082006180524:0
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, NOTIFY, SUBSCRIBE, INFO, MESSAGE, ACK, CANCEL, OPTIONS, MESSAGE, SUBSCRIBE, INVITE, REGISTER
Content-Type: application/sdp
Supported: timer, outbound, path, path, 100rel
Content-Length: 190

v=0
o=53000000441329000515 0 0 IN IP4 106.58.169.248
s=Play
c=IN IP4 106.58.169.248
t=0 0
m=video 20000 TCP/RTP/AVP 96
a=rtpmap:96 PS/90000
a=recvonly
y=0999999999
a=setup:passive
SIP/2.0 100 Trying
Via: SIP/2.0/UDP 106.58.169.248:5066;branch=z9hG4bK-524287-1---96235649734f9450;rport=5066
From: <sip:[email protected]:5066>;tag=4452781c
To: <sip:[email protected]:14940>
Call-ID: TReMwjEl4tWDd-O-uEJ9vw..
CSeq: 1 INVITE
User-Agent: GbtDeviceKit
Content-Length: 0



SIP/2.0 200 OK
Via: SIP/2.0/UDP 106.58.169.248:5066;branch=z9hG4bK-524287-1---96235649734f9450;rport=5066
From: <sip:[email protected]:5066>;tag=4452781c
To: <sip:[email protected]:14940>;tag=1591516984
Call-ID: TReMwjEl4tWDd-O-uEJ9vw..
CSeq: 1 INVITE
Contact: <sip:[email protected]:14940>
Content-Type: Application/SDP
User-Agent: GbtDeviceKit
Content-Length:   216

v=0
o=53000000441319000515 0 0 IN IP4 192.168.137.180
s=Play
c=IN IP4 192.168.137.180
t=0 0
a=setup:active
m=video 12006 TCP/RTP/AVP 96
a=sendonly
a=rtpmap:96 PS/90000
y=0999999999
f=v/2/15/2/524288/a/1/8
ACK sip:[email protected]:14940 SIP/2.0
Via: SIP/2.0/UDP 106.58.169.248:5066;branch=z9hG4bK-524287-1---38246b00e73cc219;rport
Max-Forwards: 70
Contact: <sip:[email protected]:5066>
To: <sip:[email protected]:14940>;tag=1591516984
From: <sip:[email protected]:5066>;tag=4452781c
Call-ID: TReMwjEl4tWDd-O-uEJ9vw..
CSeq: 1 ACK
Content-Length: 0

從上圖可以看到,TCP/RTP/AVP表示請求tcp進行流媒體的傳輸,a=setup:active表示主動tcp,根據sdp的內容,這樣大家就可以很清楚的瞭解GB28181的媒體的3種傳輸方式了。

demo下載

更多信息

e-mail: [email protected]

tel: 13971177602

web:www.founu.com

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章