GB28181设备端使用SPVMN调试记录——编码端
1、SPVMN参数修改
可以按照SPVMN说明书,使用rar压缩软件解压后修改,但这种方式一定要删除相关缓存文件,下次启动SPVMN时会重新自动配置;
也可以直接修改相应目录下的缓存文件,只要不删除这些文件,这种方式删除缓存文件后又会恢复默认值;
2、注册过程异常
通过抓包发现,注册时服务器在接收到带认证的注册信息后依然返回401消息,设备端和服务器之间进行了多次“401-register-401...”循环,很多包数据后服务器才返回200 OK。
通过分析最后一个认证成功的报文和前面报文的区别发现
最后一包(完成注册的那包)via字段中,branch值与之前批量未成功的报文中此值有差异,最后一位不同
通过了解via.branch字段可知其由两部分构成,其中前半部分可认为固定字段,后面的一串字符为系统时间信息。
猜测spvmn内部会判断第一个register报文和后面带认证信息的register报文的时间差,后面报文的时间信息必须大于前面报文才可以,因此修改程序,OK!
此处修改的方式是在sip_build_register_digest_msg中,使用"sys_os_get_uptime() + 1"构成branch字段;
或者也可以在收到服务器的401消息后,延时一定时间再发送带认证信息的register消息;
3、使用spvmn发起invite异常
spvmn设备类型选择IPC,设备注册成功后,点击实时点播,注意观察发送消息编辑框中sdp报文数据中以下两行的IP地址是否正确(应该同服务器地址):
o=3402xxxxxxxxx 0 0 IN IP4 IP
c=IN IP4 IP
如果之前没有配置SPVMN的运行参数,此消息框中的IP信息很可能是错误的,可直接在此处修改IP信息,修改后点击发送消息。
通过消息输出框可以看到invite已经发出,并且收到了设备端的200 ok,同时spvmn也发出了ACK,但是图像依然没有出来!!!
使用wireshark抓包发现服务器发送的invite和客户端回复的200 OK都正常,但是最后一个ACK消息(服务器发出)的目标IP是2.7.26.160???
经过多番对比发现设备端回复的200OK信息中,contact内容和其他标准设备端(以海康IPC做对比)发送的略有差异,将此处进行修改之后,服务器发送的ACK便正常发送至设备端,设备端收到ACK后开始发送RTP包,网页上视频正常显示。
此处暂时采用的修改方式是修改sua_build_contact函数中构成contact的方式;