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

本文详细介绍了SIP通信流程,重点讲解了wvp-gb28181-Pro中查询设备信息和通道信息的过程。在sip通信中,wvp实现了核心和扩展方法的处理器,并通过SIPProcessorObserver进行消息处理。设备信息查询涉及RegisterRequestProcessor、DeviceServiceImpl和SIPCommander,而目录信息查询则涉及CatalogResponseMessageHandler。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本节阐述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>" + (int) 
<think>我们正在处理一个关于在Windows平台编译安装WVP-GB28181-ProZLMediaKit以搭建国标流媒体服务器的问题。根据用户的问题,我们需要提供详细的步骤指导。同时,我们参考了站内提供的两篇文档,但要注意这些文档可能不是完全匹配,因此需要结合通用知识参考文档中的关键信息。 目标:在Windows平台搭建国标流媒体服务器,包括两个主要组件:ZLMediaKit(流媒体服务)wvp-GB28181-pro(国标信令服务)。 步骤概述: 1. 准备环境(安装必要的软件依赖) 2. 编译ZLMediaKit 3. 编译wvp-GB28181-pro 4. 配置两个组件 5. 运行并测试 下面将详细说明每个步骤。 ### 步骤1:准备环境 在Windows上编译这两个项目,需要安装以下软件: - Git:用于克隆代码仓库 - Java JDK(建议JDK 8或11):wvp-GB28181-pro是Java项目 - Maven:用于构建wvp-GB28181-pro - Visual Studio(建议2017或更高版本):用于编译ZLMediaKit(C++项目) - CMake:用于生成ZLMediaKit的Visual Studio工程 - MySQL:wvp-GB28181-pro需要数据库 此外,根据参考文档[^2],编译ZLMediaKit还需要编译libsrtp(用于WebRTC支持)。 具体操作: 1. 安装Git、Java JDK、Maven、Visual Studio(安装时选择C++桌面开发)、CMake,并配置环境变量。 2. 安装MySQL数据库,创建数据库并导入wvp-GB28181-pro的SQL脚本。 ### 步骤2:编译ZLMediaKit 参考引用[^1][^2]中关于ZLMediaKit编译的部分。 步骤: 1. 克隆ZLMediaKit代码: ```bash git clone --depth 1 https://github.com/ZLMediaKit/ZLMediaKit.git cd ZLMediaKit git submodule update --init ``` 2. 编译libsrtp(参考引用[^1]): 由于libsrtp是ZLMediaKit的依赖(用于WebRTC),需要先编译。 在ZLMediaKit的目录下,进入`third_party/libSDPRTP`,使用Visual Studio打开解决方案并编译,或者按照README中的说明编译。 但是,根据参考引用[^2],在Windows下编译ZLMediaKit的步骤中提到了编译libsrtp,我们可以这样操作: - 下载libsrtp源码:https://github.com/cisco/libsrtp - 使用CMake生成Visual Studio工程,然后编译。 或者,如果不需要WebRTC功能,可以在编译ZLMediaKit时通过CMake选项关闭(-DENABLE_WEBRTC=OFF),但国标服务器可能需要WebRTC,所以建议编译。 3. 使用CMake生成Visual Studio工程: 打开CMake GUI,设置源码路径为ZLMediaKit的路径,构建路径为ZLMediaKit下的build目录(或新建)。 点击Configure,选择Visual Studio版本平台(x64),然后点击Generate。 注意:如果需要libsrtp,确保在CMake配置时指定libsrtp的路径。 4. 用Visual Studio打开生成的工程文件(ZLMediaKit.sln),选择Release或Debug配置,然后生成解决方案。 5. 编译完成后,在输出目录(如`ZLMediaKit/release/windows/Debug`)会生成MediaServer.exe等文件。 ### 步骤3:编译wvp-GB28181-pro wvp-GB28181-pro是一个Java项目,使用Maven构建。 步骤: 1. 克隆代码: ```bash git clone https://github.com/648540858/wvp-GB28181-pro.git cd wvp-GB28181-pro ``` 2. 使用Maven构建: ```bash mvn clean package ``` 构建完成后,在`target`目录下会生成wvp-pro-*.jar文件。 ### 步骤4:配置 1. ZLMediaKit配置: 在ZLMediaKit的release目录下,有config.ini配置文件。根据国标流媒体服务器的需求进行配置,特别是端口、流媒体存储路径等。同时,需要开启国标需要的端口(如5060用于SIP,10000-20000用于媒体流)。 2. wvp-GB28181-pro配置: 在wvp-GB28181-pro的`src/main/resources/application.yml`中配置数据库连接、SIP配置(服务器ID、IP、端口等)以及媒体流配置(指向ZLMediaKit的IP端口)。 注意:需要先创建MySQL数据库,并执行wvp-GB28181-pro项目中的SQL脚本(在`doc`目录下)来初始化表结构。 ### 步骤5:运行 1. 启动ZLMediaKit: 在命令行中进入ZLMediaKit的release目录,运行: ```bash MediaServer.exe -c config.ini ``` 2. 启动wvp-GB28181-pro: 在wvp-GB28181-pro项目目录下,运行: ```bash java -jar target/wvp-pro-*.jar ``` 3. 访问wvp的Web界面(默认端口18080)进行设备添加管理。 ### 注意事项 - 确保防火墙开放相关端口(SIP端口5060,媒体端口范围,Web端口等)。 - 如果运行在公网,需要配置公网IP并设置正确的SIP域网络配置。 - 参考文档中提到的libsrtp编译问题,如果遇到困难,可以考虑暂时关闭WebRTC功能(在ZLMediaKit的CMake配置中设置)。 以上步骤是搭建国标流媒体服务器的基本流程。由于环境差异,可能会遇到各种问题,需要根据具体情况进行调整。 §§相关问题§§ 1. 如何解决ZLMediaKit编译过程中遇到的依赖问题? 2. 如何配置wvp-GB28181-pro以支持国标设备的注册? 3. 在Windows平台部署GB28181服务器有哪些性能优化建议?</think>### Windows平台编译安装WVP-GB28181-ProZLMediaKit搭建国标流媒体服务器指南 #### 一、环境准备 1. **系统要求**:Windows 10/11 64位系统 2. **必要工具**: - Git:[下载地址](https://git-scm.com/) - JDK 11+:[下载地址](https://adoptium.net/) - Maven 3.6+:[下载地址](https://maven.apache.org/) - Visual Studio 2019+(安装"C++桌面开发"组件) - MySQL 5.7+:[下载地址](https://dev.mysql.com/) - FFmpeg(用于流媒体处理):[下载地址](https://ffmpeg.org/) #### 、编译ZLMediaKit 1. **获取源码**: ```bash git clone --depth 1 https://github.com/ZLMediaKit/ZLMediaKit.git cd ZLMediaKit git submodule update --init --recursive ``` 2. **编译依赖库**: - 编译libsrtp(WebRTC必需): ```bash cd third_party/libSRTP mkdir build && cd build cmake .. -G "Visual Studio 16 2019" -A x64 cmake --build . --config Release ``` 3. **编译主程序**: ```bash cd ZLMediaKit mkdir build && cd build cmake .. -G "Visual Studio 16 2019" -A x64 -DENABLE_WEBRTC=ON cmake --build . --config Release --target MediaServer ``` 编译成功后,在`ZLMediaKit\release\windows\Release`生成`MediaServer.exe`[^2] #### 三、编译WVP-GB28181-Pro 1. **获取源码**: ```bash git clone https://github.com/648540858/wvp-GB28181-pro.git cd wvp-GB28181-pro ``` 2. **数据库初始化**: - 创建MySQL数据库`wvp_db` - 执行`doc/数据库.sql`初始化表结构 3. **Maven编译**: ```bash mvn clean package -DskipTests ``` 生成`target/wvp-pro-*.jar` #### 四、配置与运行 1. **ZLMediaKit配置**: 修改`config.ini`: ```ini [sip] enabled=1 port=5060 [rtp] port_range=10000-20000 ``` 2. **WVP-PRO配置**: 修改`application.yml`: ```yaml server: port: 18080 sip: ip: 本机IP port: 5060 media: id: 34020000002000000001 ip: 本机IP stream: port: 30000-30500 zlm: ip: 127.0.0.1 port: 1945 ``` 3. **启动服务**: - 启动ZLMediaKit: ```bash .\MediaServer.exe -c .\config.ini ``` - 启动WVP-PRO: ```bash java -jar wvp-pro-*.jar ``` #### 五、设备接入 1. 访问`http://localhost:18080` 2. 在"国标设备管理"中添加摄像头: - 设备ID:摄像头厂商提供的20位ID - 通道ID:34020000002000000001 - SIP地址:摄像头IP - 端口:5060 #### 六、验证服务 1. **ZLMediaKit状态**: ```bash curl http://127.0.0.1:1945/index/api/getServerConfig ``` 2. **WVP-PRO接口**: ```bash curl http://localhost:18080/api/v1/devices ``` > **注意**:若需公网访问,需在防火墙开放端口:5060(SIP)、18080(Web)、1945(API)、10000-20000(RTP媒体流)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值