常见问题 --- 语音视频呼叫系统调用嗨糠道闸一体机设备查看视频闪退问题排查
调试设备是一个非常耗时的工作,主要是理解架构和分析流量上花去了很多时间,我这里大致说一下排查的流程
问题描述
在道闸一体机设备上点击呼叫按钮,呼叫后台,后台视频呼叫窗口没有响应或者出现一次后就立即消失。我们必须知道的常识,嗨糠openapi,嗨糠官方对他们自家的设备开放了第三方调用方法,这里使用的后台系统是非官方的,用来查看每个车场视频并接听呼叫,使用的是私有sdk和私有流量。布防等级,一级布防最大连接数为1个,二级最大连接数为3个,三级最大连接数为5个,设备支持一级、二级、三级布防同时进行,一级布防优先上传信息
技术原理
点击呼叫,设备会发送一个告警事件给后台,有台使用SDK接收到事件后,再次调用sdk打开视频,当用户点击接听后,打开音频
解决办法
1.日志法
在设备和呼叫系统同时抓取日志,校对为标准的北京时间带有毫秒,对比日志发现错误,难点是日志不一定你可以理解
2.流量法
使用抓包软件抓取流量分析,校对时间,难点是加密流量或私有流量无法分析
3.调试法
使用调试工具在线调试发现调用问题,难点是需要源码而且需要熟练使用工具
这我简单的采用了日志法和流量法,在设备和后台系统同时开启日志功能,同时抓取流量,在正常的设备和不正常设备都进行一遍,使用公安断案常用的侧写法来解决,这里所谓的侧写就是在不知道内部的运行原理的情况下,通过作案时间,监控视频等辅助断案,重绘出一个合理的犯罪现场。也可以理解为黑盒测试法。
通过在不正常和正常设备的触发事件,日志、流量、时间进行了抓取和大量的分析比对工作后,发现设备日志和系统日志没有报错,同时都有记录按钮被按下,但是视频流打开后立即关闭,此时我通过抓包追踪视频流发现视频流,这里有个技巧,因为有多个视频流存在,我们需要使用过滤器过滤无关流量,我的抓包过滤器过滤语法是host 你的ip ,显示过滤器的语法是 tcp.flags == syn ,这样抓包软件只会抓取我要的流量,我发现在开启一个视频流时使用的端口是554,在它之前有个syn流,之后也有一个syn流,我们右键追踪该视频流后,发现使用的是rtsp,在发送paly后收到了响应但是没有视频数据只有tcp头部,因此结论就是,道闸一体机存在软件设计缺陷,在获取rtsp流量会失败,为什么失败可能是因为我按了按钮产生的事件的原因,因为我主动发起一个rtsp流没有任何问题,这个问题我没有确定,之后过了一段时间自己恢复了,视频流又可以取出来了,但是还是闪退,在使用手册找到调用关闭视频流的接口,用反射找出调用挂断视频的方法,最终找到了一个方法,每秒检测呼叫是否60s超时,我注释掉了他的挂断方法,问题解决了,但是我不知道为什么就只有这一台设备会提前超时挂断其他设备就是好的
关于解决无响应的设备,在抓包后虽然流量是 私有的我们无法分析,但是我们可以猛点按钮,对比流量大小就可以发现猫腻,在我对正常设备按下按钮后,设备会主动发起一个大包给系统,这个大包就是按钮触发事件,没有响应的设备无法抓取到这个大包,我是用官方sdk的demo进行布防监听按钮事件就可以抓取到大包,因此我推断,一定是后台系统在调用SDK上使用了旧版本接口或错误参数导致的,比对了官方和后台代码后发现区别是参数不同,官方的参数是1,非官方的是2,在参考后手册得知1表示二级布防,2表示三级布防,我不知道为什么三级布防无法收到报警,我改为1就解决了