wvp-GB28181-pro 源码分析-查询设备信息和通道流程(二)


2024年6月20日下载的wvp-GB28181-pro,版本号为2.7.2,使用ZLMediakit主干版本。

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

一、SIP通信方法介绍

sip通信主要有6个核心方法和8个扩展方法。

1.1 核心方法(Core Methods)

SIP请求消息(方法Method) SIP操作
INVITE 会话邀请
ACK 确认会话邀请
CANCEL 取消会话邀请
BYE 结束会话
REGISTER 注册
OPTIONS 查询服务器能力

1.2 扩展方法(Extension Methods)

SIP请求消息(方法Method) SIP操作
Subscribe 与所使用的用户代理商建立订阅,获取有关特定事件的通知
NOTIFY NOTIFY是用来由用户代理传达特定事件的发生
PUBLISH PUBLISH用于由用户代理发送的事件的状态信息
REFER REFER用于由一个用户代理来指另一个用户代理访问URI的对话框
INFO INFO所使用的用户代理发送呼叫信令信息,与它建立了一个媒体会话其他用户代理
UPDATE UPDATE用于修改会话的状态不改变对话的状态
PRACK PRACK用于确认收到临时响应(1XX)可靠传输
MESSAGE 用来发送即时消息

二、源码分析

2.1 SIP协议处理过程

wvp针对这14个方法(注意wvp并没有全部实现14个方法),相应写了处理对象,如下图
在这里插入图片描述
将这些处理器RegisterRequestProcessor、MessageRequestProcessor等等Processor加入到SIPProcessorObserver观察者的容器中。
每一个processor中都有这个方法,用来添加消息处理的订阅。processor方法实现了InitializingBean类(不懂的可以去查),通过afterPropertiesSet()方法完成了消息的订阅。

@Override
public void afterPropertiesSet() throws Exception {
   
    // 添加消息处理的订阅
    sipProcessorObserver.addRequestProcessor(method, this);
}

当有相应方法的sip消息到来时,根据是Request还是Response,观察者将调用相应的Processor进行处理。
观察者SIPProcessorObserver类,在如下的包路径下

com.genersoft.iot.vmp.gb28181.transmit

观察者中的处理Request源码如下

    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);

    }

处理Response的源码如下

    @Override
    @Async("taskExecutor")
    public void processResponse(ResponseEvent responseEvent) {
   
        Response response = responseEvent.getResponse();
        int status = response.getStatusCode();

        // Success
        if (((status >= Response.OK) && (status < Response.MULTIPLE_CHOICES)) || status == Response.UNAUTHORIZED) {
   
            CSeqHeader cseqHeader = (CSeqHeader) responseEvent.getResponse().getHeader(CSeqHeader.NAME);
            String method = cseqHeader.getMethod();
            ISIPResponseProcessor sipRequestProcessor = responseProcessorMap.get(method);
            if (sipRequestProcessor != null) {
   
                sipRequestProcessor.process(responseEvent);
            }
            if (status != Response.UNAUTHORIZED && responseEvent.getResponse() != null && sipSubscribe.getOkSubscribesSize() > 0 ) {
   
                CallIdHeader callIdHeader = (CallIdHeader)responseEvent.getResponse().getHeader(CallIdHeader.NAME);
                if (callIdHeader != null) {
   
                    SipSubscribe.Event subscribe = sipSubscribe.getOkSubscribe(callIdHeader.getCallId());
                    if (subscribe != null) {
   
                        SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(responseEvent);
                        sipSubscribe.removeOkSubscribe(callIdHeader.getCallId());
                        subscribe.response(eventResult);
                    }
                }
            }
        } else if ((status >= Response.TRYING) && (status < Response.OK)) {
   
            // 增加其它无需回复的响应,如101、180等
        } else {
   
            logger.warn("接收到失败的response响应!status:" + status + ",message:" + response.getReasonPhrase());
            if (responseEvent.getResponse() != null && sipSubscribe.getErrorSubscribesSize() > 0 
  • 24
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
部署wvp-gb28181-pro需要以下步骤: 1. 安装CentOS:首先需要安装CentOS操作系统,可以选择最新版本的CentOS 7或8。 2. 安装依赖库:在CentOS上安装wvp-gb28181-pro所需的依赖库,包括FFmpeg、OpenSSL、libxml2、libcurl、libevent、zlib、pcre等。可以使用以下命令安装: ```shell yum install -y epel-release yum install -y openssl-devel libxml2-devel libcurl-devel libevent-devel zlib-devel pcre-devel ``` 3. 下载wvp-gb28181-pro:从wvp-gb28181-pro的官方网站下载wvp-gb28181-pro源码,解压缩到指定目录。 4. 编译wvp-gb28181-pro:在wvp-gb28181-pro源码目录下执行以下命令编译: ```shell ./configure make make install ``` 这将会编译并安装wvp-gb28181-pro到系统中。 5. 配置wvp-gb28181-prowvp-gb28181-pro的配置文件位于/etc/wvp-gb28181-pro下,可以根据需要编辑配置文件。 6. 启动wvp-gb28181-pro:可以使用以下命令启动wvp-gb28181-pro: ```shell systemctl start wvp-gb28181-pro ``` 启动后可以使用以下命令查看wvp-gb28181-pro的状态: ```shell systemctl status wvp-gb28181-pro ``` 7. 配置防火墙:如果系统开启了防火墙,需要打开wvp-gb28181-pro所需的端口。可以使用以下命令开启端口: ```shell firewall-cmd --zone=public --add-port=5060/udp --permanent firewall-cmd --reload ``` 这将会开启5060端口,如果需要开启其他端口,请根据需要修改以上命令。 以上就是在CentOS上部署wvp-gb28181-pro的完整步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值