向海康NVR发送带SDP的INVITE消息后,总是收到400 Bad Request错误提示

Really_want 2018-04-26 03:23:59
通过GB28181文档中描述的内容,利用exosip库编写了一个简单的测试程序:SIP服务器。SIP服务器自动处理注册(REGISTER)或心跳(Keepalive)后,向一个特定的设备发起“历史视音频回放”请求,INVITE(带SDP),收到的响应始终是400。应该是SIP头,或SDP中的参数填写不正确,折腾了好久了,就是找不到具体是什么原因。
以下是winshark抓包结果,现在发贴给各位大神看一下,看看能不能找出哪里出了问题,先谢过:

INVITE请求

Session Initiation Protocol (INVITE)
Request-Line: INVITE sip:34020000001180000002@3402000000 SIP/2.0
Message Header
Via: SIP/2.0/UDP 192.168.1.134:5060;rport;branch=z9hG4bK741052420
From: <sip:34020000002000000001@3402000000>;tag=334479113
To: <sip:34020000001180000002@3402000000>
Call-ID: 655742294
CSeq: 20 INVITE
Contact: <sip:34020000002000000001@192.168.1.134:5060>
Content-Type: application/sdp
Max-Forwards: 70
User-Agent: exosipdemo/0.0.0
Subject: 34020000001320000004:1,34020000004000000001:1
Content-Length: 273
Message Body
Session Description Protocol
Session Description Protocol Version (v): 0
Owner/Creator, Session Id (o): 34020000004000000001 0 0 IN IP4 192.168.1.134
Session Name (s): Playback
URI of Description (u): 34020000001320000004:3
Connection Information (c): IN IP4 192.168.1.134
Time Description, active time (t): 1520728052 1520729999
Media Description, name and address (m): video 5061 RTP/AVP 96 98 97
Media Attribute (a): recvonly
Media Attribute (a): rtpmap:96 PS/90000
Media Attribute (a): rtpmap:98 H264/90000
Media Attribute (a): rtpmap:97 MPEG4/90000
Unknown: y=1200000001
Unknown: f=


400 Bad Request

Session Initiation Protocol (400)
Status-Line: SIP/2.0 400 Bad Request
Message Header
Via: SIP/2.0/UDP 192.168.1.134:5060;rport=5060;branch=z9hG4bK741052420
From: <sip:34020000002000000001@3402000000>;tag=334479113
To: <sip:34020000001180000002@3402000000>;tag=997336290
Call-ID: 655742294
CSeq: 20 INVITE
User-Agent: Embedded Net DVR/NVR/DVS
Content-Length: 0


NVR 28181配置
...全文
4295 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
marlin_mo 2019-05-09
  • 打赏
  • 举报
回复
你好,我在请求实时视频着块卡了好久,注册没问题。发INVITE消息后,NVR没有任何回应。能帮忙贴下你发的INVITE代码不?感谢~~
zhiweiHong 2018-06-28
  • 打赏
  • 举报
回复
能说一下请求行是哪一行吗
百灵工作室 2018-05-02
  • 打赏
  • 举报
回复
既然是400错误,就看看你的请求有没有哪里疏漏,对照4xx类错误排查
Really_want 2018-04-28
  • 打赏
  • 举报
回复
引用 12 楼 qq_34196952 的回复:
楼主, 如果将Request-Line的uri设置成u字段值的话, 会报420错误是怎么解决的
你好,我目前没遇到过420错误,很抱歉不能给出准确的办法。只能说,各种办法都试试。哈哈。你可以参考RFC3261说明,以下是一种情况: 8.1.3.5 Processing 4xx Responses ... If a 420 (Bad Extension) response is received (Section 21.4.15), the request contained a Require or Proxy-Require header field listing an option-tag for a feature not supported by a proxy or UAS. The UAC SHOULD retry the request, this time omitting any extensions listed in the Unsupported header field in the response. ... 其他的,再详细看看RFC原文吧:https://www.rfc-editor.org/pdfrfc/rfc3261.txt.pdf
大马猴呀 2018-04-27
  • 打赏
  • 举报
回复
楼主, 如果将Request-Line的uri设置成u字段值的话, 会报420错误是怎么解决的
Really_want 2018-04-26
  • 打赏
  • 举报
回复
引用 10 楼 fly_y 的回复:
你这里请求回放的通道编号是132000004,但是invite下的参数是nvr的,所以会回400,你把sip编号改成通道的吧
谢谢大神通过QQ联系给予的大力相助。 本贴就此结了,上面还有一位大神也给出了很耐心细致地帮助,所以,我决定你们平分积分。 再次谢过! 问题的根本原因还是我个人对SIP协议吃得不够透彻。 解决本贴中问题的方法很简单:把Request-Line中的URI设置为SDP中的u字段的URI(即NVR中的通道ID)就行了。 对于这种错误,我表示很尴尬。
fly_y 2018-04-26
  • 打赏
  • 举报
回复
你这里请求回放的通道编号是132000004,但是invite下的参数是nvr的,所以会回400,你把sip编号改成通道的吧
Really_want 2018-04-26
  • 打赏
  • 举报
回复
引用 8 楼 lizhigang34 的回复:
好久没用28181的东西了,以前也只是做过IPC与平台的国标检测,没试过NVR。海康的NVR如果过检了,应该是经过这个软件检测的,但按你说的测试NVR又有问题,如果实在搞不定,只能尝试联系下海康的售后了。
嗯嗯,我正在联系那边的技术支持!非常感谢您的细心指教。再次表示感谢!
lizhigang34 2018-04-26
  • 打赏
  • 举报
回复
好久没用28181的东西了,以前也只是做过IPC与平台的国标检测,没试过NVR。海康的NVR如果过检了,应该是经过这个软件检测的,但按你说的测试NVR又有问题,如果实在搞不定,只能尝试联系下海康的售后了。
Really_want 2018-04-26
  • 打赏
  • 举报
回复
引用 3 楼 lizhigang34 的回复:
给你一段INVITE请求参考下,。。。
我注意到了你的参考代码中的这一行: Route: <sip:34020000001320000001@192.168.13.155:7010;lr> 我发出去的请求中确实没有这一行。我的消息发出前是有的,也就是在调用exosip的eXosip_call_send_initial_invite()函数前是设置了的,但是我跟踪代码发现Route在这个函数中被移除掉了,我不是很清楚为什么要移除。因为是在exosip中做的事情,我没有贸然修改。最后发出去的INVITE消息中就没有了那一行。
lizhigang34 2018-04-26
  • 打赏
  • 举报
回复
公安部有提供个GB/T 28181的检测工具,海康的设备应该都是过检了的,你不然就用那个工具再对接下海康的NVR,然后抓包看看,与你自己发出的INVITE有什么区别。 或者再试一下,把CSeq改成从1开始,看你每次都是20
Really_want 2018-04-26
  • 打赏
  • 举报
回复
引用 5 楼 lizhigang34 的回复:
公安部有提供个GB/T 28181的检测工具,海康的设备应该都是过检了的,你不然就用那个工具再对接下海康的NVR,然后抓包看看,与你自己发出的INVITE有什么区别。
或者再试一下,把CSeq改成从1开始,看你每次都是20

你说的检测工具,应该是指SPVMN,界面像这个样子:

用这个软件,我测试过IPC的直播,没问题。但测试NVR时就有问题了。问题可能是设备的问题,也可能是我程序的问题,还可能是我使用SPVNM软件的问题。所以,暂时没有使用,SPVNM。
Really_want 2018-04-26
  • 打赏
  • 举报
回复
引用 3 楼 lizhigang34 的回复:
给你一段INVITE请求参考下,感觉是你SDP的o行Owner/Creator, Session Id (o): 34020000004000000001 0 0 IN IP4 192.168.1.134,这个ID与你本地的SIP用户ID不一致.

没用的,最开始我填的也是自己的ID,后来没招了,就各种修改。根据国标28181中的流程图,我的理解是:流接收者可以不是INVITE消息的发起者,这里的o行也就指的是流接收者。如果我理解有错,欢迎指正!
lizhigang34 2018-04-26
  • 打赏
  • 举报
回复
给你一段INVITE请求参考下,感觉是你SDP的o行Owner/Creator, Session Id (o): 34020000004000000001 0 0 IN IP4 192.168.1.134,这个ID与你本地的SIP用户ID不一致.

INVITE sip:34020000001320000001@3402000000 SIP/2.0
Call-ID: 05e8affcd324bff50b631f49e6020acb@0.0.0.0
CSeq: 1 INVITE
From: <sip:34020000002000000001@3402000000>;tag=18061828_53173353_08f1fbb7-381b-45bb-a457-725a566012a9
To: <sip:34020000001320000001@3402000000>
Max-Forwards: 70
Contact: "34020000002000000001" <sip:192.168.2.12:5100>
Content-Type: application/sdp
Route: <sip:34020000001320000001@192.168.13.155:7010;lr>
Via: SIP/2.0/UDP 192.168.2.12:5100;branch=z9hG4bK08f1fbb7-381b-45bb-a457-725a566012a9_53173353_3577300819576244
Content-Length: 225

v=0
o=34020000001320000001 0 0 IN IP4 192.168.13.155
s=Play
c=IN IP4 192.168.13.155
t=0 0
m=video 6000 RTP/AVP 96 98 97
a=recvonly
a=rtpmap:96 PS/90000
a=rtpmap:98 H264/90000
a=rtpmap:97 MPEG4/90000
y=0100000001
f=

Really_want 2018-04-26
  • 打赏
  • 举报
回复
引用 1 楼 lizhigang34 的回复:
看不出来INVITE哪里有问题,你可以试试发个请求实时视频的INVITE信令。会不会是请求的录像时间段t=xxx xxx没内容,而导致回复400
您回答得真快,首先我要表示激动地感谢! 我看了你的回答,我立即参考你的建议,做了修改并测试,结果依然是400。下面是修改后的INVITE:

Session Initiation Protocol (INVITE)
    Request-Line: INVITE sip:34020000001180000002@3402000000 SIP/2.0
    Message Header
        Via: SIP/2.0/UDP 192.168.1.134:5060;rport;branch=z9hG4bK3552532082
        From: <sip:34020000002000000001@3402000000>;tag=3613302276
        To: <sip:34020000001180000002@3402000000>
        Call-ID: 3124317512
        CSeq: 20 INVITE
        Contact: <sip:34020000002000000001@192.168.1.134:5060>
        Content-Type: application/sdp
        Max-Forwards: 70
        User-Agent: exosipdemo/0.0.0
        Content-Length:   221
    Message Body
        Session Description Protocol
            Session Description Protocol Version (v): 0
            Owner/Creator, Session Id (o): 34020000004000000001 0 0 IN IP4 192.168.1.134
            Session Name (s): Play
            Connection Information (c): IN IP4 192.168.1.134
            Time Description, active time (t): 0 0
            Media Description, name and address (m): video 5061 RTP/AVP 96 98 97
            Media Attribute (a): recvonly
            Media Attribute (a): rtpmap:96 PS/90000
            Media Attribute (a): rtpmap:98 H264/90000
            Media Attribute (a): rtpmap:97 MPEG4/90000
            Unknown: y=0200000001
应答还是:

Session Initiation Protocol (400)
    Status-Line: SIP/2.0 400 Bad Request
    Message Header
        Via: SIP/2.0/UDP 192.168.1.134:5060;rport=5060;branch=z9hG4bK3552532082
        From: <sip:34020000002000000001@3402000000>;tag=3613302276
        To: <sip:34020000001180000002@3402000000>;tag=1899996222
        Call-ID: 3124317512
        CSeq: 20 INVITE
        User-Agent: Embedded Net DVR/NVR/DVS
        Content-Length: 0
lizhigang34 2018-04-26
  • 打赏
  • 举报
回复
看不出来INVITE哪里有问题,你可以试试发个请求实时视频的INVITE信令。会不会是请求的录像时间段t=xxx xxx没内容,而导致回复400

2,543

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧