wvp-gb28181-pro和ZLMediakit开发入门笔记——查询设备信息和通道流程(二)

本节阐述sip通信步骤对应到wvp-gb28181-Pro中的代码。

sip通信流程

sip通信主要有6个核心方法和8个扩展方法。
在这里插入图片描述
wvp针对这14个方法(注意wvp并没有全部实现14个方法),相应写了处理对象,如下图
在这里插入图片描述
将这些处理器RegisterRequestProcessor、MessageRequestProcessor等等Processor加入到SIPProcessorObserver观察者的容器中。当有相应方法的sip消息到来时,根据是Request还是Response,观察者将调用相应的Processor进行处理。观察者中的处理Request源码如下(处理response的没有贴出来):

public void processRequest(RequestEvent requestEvent) {
   
        String method = requestEvent.getRequest().getMethod();
        ISIPRequestProcessor sipRequestProcessor = requestProcessorMap.get(method);
        if (sipRequestProcessor == null) {
   
            logger.warn("不支持方法{}的request", method);
            // TODO 回复错误玛
            return;
        }
        requestProcessorMap.get(method).process(requestEvent);

    }

由于MessageRequestProcessor类型的消息较多,wvp将Message再分为多个handler,根据cmdType调用对应的handler。如cmdType = “Catalog”、cmdType = “DeviceInfo”。
在这里插入图片描述

查询设备信息的sip过程

gb28181文档上的消息规范,从J.10.1到J.10.8:
在这里插入图片描述

摄像机注册成功后,wvp会发命令查询设备信息。过程如下:
1、RegisterRequestProcessor.java 第195行deviceService.online(device, sipTransactionInfo);
2、DeviceServiceImpl.java 第127行commander.deviceInfoQuery(device);
3、SIPCommander.java 第45行发出一个message请求,代码如下

public void deviceInfoQuery(Device device) throws InvalidArgumentException, SipException, ParseException {
   
        StringBuffer catalogXml = new StringBuffer(200);
        String charset = device.getCharset();
        catalogXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
        catalogXml.append("<Query>\r\n");
        catalogXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
        catalogXml.append("<SN>" + (
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值