国标gb28181在做内网穿透时遇到的一些问题

同某个厂家的摄像头做国标gb28181的联调,遇到一些问题这里做一下记录

情况是这样子的,这次项目的特点是使用国标gb28181做为摄像机和平台之间的通信协议方式,并且平台是上级在公网上,有一个公网ip,摄像头是下级,在内网里,要经过网关同公网上的平台通信。在我司和对方的厂家的内网里都有测试用摄像头,都能通到外网去。环境搭建好后将两个地点的摄像头向公网上的平台注册。

首先发现的问题是对方网络里的摄像头无法注册成功,我方网络里的摄像头则可以成功。两边的配置信息都是对的,后来发现该厂商的摄像头在请求注册时没有在via里加上rport参数导致。

因为我们这个项目是内网到外网,再从外网到内网,有内网穿透的情况,内网映射到外网的端口会发生改变,所以要有一套机制来做穿透,因为国标是基于sip协议的,sip下做内网穿透的事rport机制,如果发送的请求不带rport标识就是不启用这套机制,所以在外网到内网时会出问题。因为内网的头在发送信息到公网上会经过一个网关,网关会使用nat协议转换内网的端口,这个映射到公网上的端口可能和内网的一致,也有可能不一致!而刚好在我方的网络里这个端口恰巧一致了!而对方的不一致。

公网上的平台在收到摄像头的注册信息里因为没有发现rport参数,在返回注册响应时,直接使用请求里的摄像头内网端口信息了,直接导致对方网络里的摄像头得不到注册成功信息,而我方因为刚好映射为了相同的端口,却能收到注册响应能注册上。

如下是osip里打印出的日志,反应出了这个问题,收到的端口是17961,发送时却到了内网的39512上

| INFO1 | 63978 <eXtl_udp.c: 452> Message received from: 113.118.241.57:17961
| INFO1 | 63978 <udp.c: 1408> Received message len=500 from 113.118.241.57:17961:
REGISTER sip:340200000020000000065@112.33.56.65:5066 SIP/2.0
Via: SIP/2.0/UDP 192.168.1.200:39512;branch=z9hG4bKa5394e4c
From: <sip:34020000001320000205@340200>;tag=5f7b2db0
To: <sip:34020000001320000205@340200>
Contact: <sip:34020000001320000205@192.168.1.200:39512>
Call-ID: 023D9B1335824B31@192.168.1.200
CSeq: 548 REGISTER
Max-Forwards: 70
Expires: 3600
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
User-Agent: HTSIP AGENT 2.0
Content-Length: 0


| INFO3 | 63978 <udp.c: 1426> MESSAGE REC. CALLID:023D9B1335824B31
| INFO1 | 63978 <udp.c: 1473> no transaction for message
| INFO2 | 63978 <osip_transaction.c: 136> allocating transaction resource 45 023D9B1335824B31
| INFO2 | 63978 <nist.c: 31> allocating NIST context
| INFO4 | 63979 <osip_transaction.c: 349> sipevent tr->transactionid: 45
| INFO4 | 63979 <osip_transaction.c: 350> sipevent tr->state: 15
| INFO4 | 63979 <osip_transaction.c: 351> sipevent evt->type: 12
| INFO4 | 63979 <osip_transaction.c: 352> sipevent evt->sip: c4033050
| INFO3 | 63979 <jcallback.c: 358> cb_rcvregister (id=45)
| INFO4 | 63979 <osip_transaction.c: 373> sipevent evt: method called!
| INFO4 | 63980 <osip_transaction.c: 349> sipevent tr->transactionid: 45
| INFO4 | 63980 <osip_transaction.c: 350> sipevent tr->state: 16
| INFO4 | 63980 <osip_transaction.c: 351> sipevent evt->type: 20
| INFO4 | 63980 <osip_transaction.c: 352> sipevent evt->sip: bc005f00
| INFO2 | 63980 <eXutils.c: 755> DNS resolution with 113.118.241.57:39512
| INFO2 | 63980 <eXutils.c: 779> getaddrinfo returned: 113.118.241.57 port 39512
| INFO1 | 63980 <eXtl_udp.c: 779> Message sent: (to dest=113.118.241.57:39512)
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.1.200:39512;branch=z9hG4bKa5394e4c;received=113.118.241.57
From: <sip:34020000001320000205@340200>;tag=5f7b2db0
To: <sip:34020000001320000205@340200>;tag=1082451661
Call-ID: 023D9B1335824B31@192.168.1.200
CSeq: 548 REGISTER
User-Agent: JUNTAI SIP UAS/1.0
Date: 2019-06-29T21:52:10.001
Expires: 3600
Content-Length: 0

其次,在摄像头取到流,关闭流发送BYE时也存在问题,如下,在返回ack和bye时,找到的地址不对了,是内网的ip或地址去了

| INFO1 | 369109 <jcallback.c: 1528> cb_sndreq_retransmission (id=133)
| INFO4 | 369109 <osip_transaction.c: 373> sipevent evt: method called!
| INFO2 | 369522 <osip_transaction.c: 136> allocating transaction resource 134 385231458
| INFO2 | 369522 <ict.c: 32> allocating ICT context
| INFO4 | 369522 <osip.c: 1456> 1 Pending event already in transaction !
| INFO4 | 369522 <osip_transaction.c: 349> sipevent tr->transactionid: 134
| INFO4 | 369522 <osip_transaction.c: 350> sipevent tr->state: 0
| INFO4 | 369522 <osip_transaction.c: 351> sipevent evt->type: 16
| INFO4 | 369522 <osip_transaction.c: 352> sipevent evt->sip: 8038f730
| INFO2 | 369522 <eXutils.c: 755> DNS resolution with 113.118.241.57:18669
| INFO2 | 369522 <eXutils.c: 779> getaddrinfo returned: 113.118.241.57 port 18669
| INFO1 | 369522 <eXtl_udp.c: 779> Message sent: (to dest=113.118.241.57:18669)
INVITE sip:34020000001320000205@113.118.241.57:18669 SIP/2.0
Via: SIP/2.0/UDP 192.168.200.2:5066;rport;branch=z9hG4bK1721778447
From: <sip:34020000002000000065@112.33.56.65:5066>;tag=332179470
To: <sip:34020000001320000205@113.118.241.57:18669>
Call-ID: 385231458
CSeq: 4 INVITE
Contact: <sip:34020000002000000065@112.33.56.65:5066>
Content-Type: application/sdp
Max-Forwards: 70
User-Agent: JUNTAI SIP UAS/1.0
Subject: 34020000001320000205:1,34020000002000000065:1
Content-Length:   165

v=0
o=34020000002000000065 0 0 IN IP4 112.33.56.65
s=Play
c=IN IP4 112.33.56.65
t=0 0
m=video 33508 RTP/AVP 96
a=recvonly
a=rtpmap:96 PS/90000
y=0200000681
| INFO3 | 369535 <udp.c: 1426> MESSAGE REC. CALLID:385231458
| INFO4 | 369535 <osip.c: 1456> 1 Pending event already in transaction !
| INFO4 | 369535 <osip_transaction.c: 349> sipevent tr->transactionid: 134
| INFO4 | 369535 <osip_transaction.c: 350> sipevent tr->state: 1
| INFO4 | 369535 <osip_transaction.c: 351> sipevent evt->type: 13
| INFO4 | 369535 <osip_transaction.c: 352> sipevent evt->sip: 90003ae0
| INFO3 | 369535 <jcallback.c: 511> cb_rcv1xx (id=134)
| INFO4 | 369535 <osip_transaction.c: 373> sipevent evt: method called!
| INFO1 | 369536 <eXtl_udp.c: 452> Message received from: 113.118.241.57:18669
| INFO1 | 369536 <udp.c: 1408> Received message len=664 from 113.118.241.57:18669:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.200.2:5066;rport;branch=z9hG4bK1721778447
From: <sip:34020000002000000065@112.33.56.65:5066>;tag=332179470
To: <sip:34020000001320000205@340200>;tag=717142644a97aa49
Contact: <sip:34020000001320000205@192.168.1.200:53922>
Call-ID: 385231458
CSeq: 4 INVITE
Max-Forwards: 70
Allow: ACK,BYE,CANCEL,INVITE,NOTIFY,REFER,UPDATE,INFO
Supported: timer
Session-Expires: 200;refresher=uac
Server: WER Agent Ver 1.0
Content-Type: application/sdp
Content-Length: 153

v=0
o=34020000001320000205 0 0 IN IP4 192.168.1.200
s=Play
c=IN IP4 192.168.1.200
t=0 0
m=video 19002 RTP/AVP 96
a=rtpmap:96 PS/90000
a=sendonly
| INFO3 | 369536 <udp.c: 1426> MESSAGE REC. CALLID:385231458
| INFO4 | 369536 <osip.c: 1456> 1 Pending event already in transaction !
| INFO4 | 369536 <osip_transaction.c: 349> sipevent tr->transactionid: 134
| INFO4 | 369536 <osip_transaction.c: 350> sipevent tr->state: 2
| INFO4 | 369536 <osip_transaction.c: 351> sipevent evt->type: 14
| INFO4 | 369536 <osip_transaction.c: 352> sipevent evt->sip: 900035d0
| INFO3 | 369536 <jcallback.c: 930> cb_rcv2xx (id=134)
| INFO2 | 369536 <eXosip.c: 1444> Allow header contains UPDATE
| INFO1 | 369536 <jcallback.c: 217> cb_nict_kill_transaction (id=134)
| INFO4 | 369536 <osip_transaction.c: 373> sipevent evt: method called!
| INFO4 | 369537 <sdp_message.c: 1481> The rfc2327 says there should be at least an email or a phone header!- anyway, we don't mind about it.
| INFO2 | 369538 <eXutils.c: 755> DNS resolution with 113.118.241.57:53922
| INFO2 | 369538 <eXutils.c: 779> getaddrinfo returned: 113.118.241.57 port 53922
| INFO1 | 369538 <eXtl_udp.c: 779> Message sent: (to dest=113.118.241.57:53922)
ACK sip:34020000001320000205@192.168.1.200:53922 SIP/2.0
Via: SIP/2.0/UDP 192.168.200.2:5066;rport;branch=z9hG4bK396241289
From: <sip:34020000002000000065@112.33.56.65:5066>;tag=332179470
To: <sip:34020000001320000205@340200>;tag=717142644a97aa49
Call-ID: 385231458
CSeq: 4 ACK
Contact: <sip:34020000002000000065@112.33.56.65:5066>
Max-Forwards: 70
User-Agent: JUNTAI SIP UAS/1.0
Content-Length: 0
| INFO1 | 373733 <udp.c: 1264> ACK restransmission sent.
| INFO4 | 374410 <osip_transaction.c: 349> sipevent tr->transactionid: 121
| INFO4 | 374410 <osip_transaction.c: 350> sipevent tr->state: 18
| INFO4 | 374411 <osip_transaction.c: 351> sipevent evt->type: 9
| INFO4 | 374411 <osip_transaction.c: 352> sipevent evt->sip: 0
| INFO1 | 374411 <jcallback.c: 217> cb_nict_kill_transaction (id=121)
| INFO4 | 374411 <osip_transaction.c: 373> sipevent evt: method called!
| INFO4 | 374411 <osip_transaction.c: 265> transaction already removed from list 121!
| INFO2 | 374411 <osip_transaction.c: 281> free transaction resource 121 zxw34020000001320000244-191679322
| INFO2 | 374411 <nist.c: 73> free nist resource
| INFO2 | 374484 <osip_transaction.c: 136> allocating transaction resource 137 385231458
| INFO2 | 374484 <nict.c: 32> allocating NICT context
| INFO4 | 374484 <osip_transaction.c: 349> sipevent tr->transactionid: 137
| INFO4 | 374484 <osip_transaction.c: 350> sipevent tr->state: 10
| INFO4 | 374484 <osip_transaction.c: 351> sipevent evt->type: 18
| INFO4 | 374484 <osip_transaction.c: 352> sipevent evt->sip: 801c7150
| INFO2 | 374484 <eXutils.c: 755> DNS resolution with 192.168.1.200:53922
| INFO2 | 374484 <eXutils.c: 779> getaddrinfo returned: 192.168.1.200 port 53922
| INFO1 | 374484 <eXtl_udp.c: 779> Message sent: (to dest=192.168.1.200:53922)
BYE sip:34020000001320000205@192.168.1.200:53922 SIP/2.0
Via: SIP/2.0/UDP 192.168.200.2:5066;rport;branch=z9hG4bK1886964964
From: <sip:34020000002000000065@112.33.56.65:5066>;tag=332179470
To: <sip:34020000001320000205@340200>;tag=717142644a97aa49
Call-ID: 385231458
CSeq: 5 BYE
Contact: <sip:34020000002000000065@192.168.200.2:5066>
Max-Forwards: 70
User-Agent: JUNTAI SIP UAS/1.0
Content-Length: 0

同时,请看这篇文章国标Gb28181里Contact和Route的使用_wwyyxx26的专栏-CSDN博客

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
GB28181协议是中国国家标准化管理委员会发布的视频监控领域的通信协议标准。其目的是建立一种统一的视频监控传输协议,实现不同品牌、不同系统的视频设备之间的互联互通。 内外网穿透是指在网络环境中通过一定的技术手段,使得内网中的设备可以和外网进行通信。在视频监控系统中,内外网穿透技术可以用于实现远程监控,即用户可以通过外网访问和控制内网中的视频设备。 在GB28181协议中,内外网穿透是一个重要的功能要求。它通过设备的注册与保活机制,在设备侧与监控平台之间建立起一条可靠的通信链路。这条链路可以穿越设备所处的内网环境和外网环境,实现远程访问和控制。 为了实现内外网穿透,GB28181协议使用了一些技术手段。首先,设备需要向监控平台注册,告知自己的IP地址和端口号。监控平台可以根据这些信息建立与设备的连接。其次,设备在内网中会定发送保活信号给监控平台,以维持连接的稳定性。这样,即使设备的IP地址是动态分配的,也可以保持通信的正常进行。 通过GB28181协议实现的内外网穿透技术,为视频监控系统的远程访问和控制提供了便利。用户可以通过互联网任意地点,随随地地监控和管理视频设备,增强了视频监控系统的实际应用价值。同,内外网穿透技术也为视频监控系统的安全性提供了保障,确保了设备与监控平台之间的安全通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值