From 3078162c5879cd3f5d81c40b460f759556061759 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: Fri, 11 Oct 2024 15:24:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=96=87=E6=A1=A3,=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96notify-catalog=E5=A4=A7=E5=B9=B6=E5=8F=91?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/README.md | 102 +++++++------ doc/_content/ability/_media/img_17.png | Bin 57698 -> 98596 bytes doc/_content/ability/_media/img_18.png | Bin 66143 -> 46456 bytes doc/_content/ability/auto_play.md | 1 + doc/_content/ability/cascade.md | 50 +++++-- doc/_content/ability/cascade2.md | 71 +++++++-- doc/_content/ability/channel.md | 20 ++- doc/_content/ability/cloud_record.md | 15 +- doc/_content/ability/continuous_broadcast.md | 32 +++- doc/_content/ability/continuous_recording.md | 6 +- doc/_content/ability/device.md | 44 ++++-- doc/_content/ability/device_use.md | 51 +++++-- doc/_content/ability/gis.md | 18 ++- doc/_content/ability/node_manger.md | 13 +- doc/_content/ability/online_doc.md | 1 + doc/_content/ability/proxy.md | 10 +- doc/_content/ability/push.md | 14 ++ doc/_content/ability/user.md | 1 + doc/_content/about_doc.md | 4 +- doc/_content/broadcast.md | 2 + doc/_content/disclaimers.md | 5 +- doc/_content/introduction/compile.md | 53 +++++-- doc/_content/introduction/config.md | 79 +++++++--- doc/_content/introduction/deployment.md | 38 +++-- doc/_content/qa/bug.md | 6 + doc/_content/qa/development.md | 10 +- doc/_content/qa/play_error.md | 39 +++-- doc/_content/qa/regiser_error.md | 10 +- doc/_content/qa/start_error.md | 8 +- doc/_content/skill/tcpdump.md | 42 +++++- doc/_content/theory/broadcast_cascade.md | 3 +- doc/_content/theory/channel_tree.md | 14 -- doc/_content/theory/code.md | 26 ++-- doc/_content/theory/play.md | 7 +- doc/_content/theory/register.md | 6 +- doc/_coverpage.md | 4 +- doc/_sidebar.md | 46 +++--- doc/index.html | 94 ++++++------ pom.xml | 8 + .../gb28181/bean/NotifyCatalogChannel.java | 38 +++++ .../vmp/gb28181/dao/DeviceChannelMapper.java | 66 ++++++++- .../service/IDeviceChannelService.java | 8 + .../impl/DeviceChannelServiceImpl.java | 20 +++ .../NotifyRequestForCatalogProcessor.java | 137 +++++++----------- .../iot/vmp/vmanager/TestController.java | 12 ++ 45 files changed, 842 insertions(+), 392 deletions(-) delete mode 100644 doc/_content/theory/channel_tree.md create mode 100644 src/main/java/com/genersoft/iot/vmp/gb28181/bean/NotifyCatalogChannel.java diff --git a/doc/README.md b/doc/README.md index cdf3a0810..c5c4006db 100644 --- a/doc/README.md +++ b/doc/README.md @@ -3,11 +3,15 @@ > 开箱即用的28181协议视频平台 # 概述 -- WVP-PRO基于GB/T 28181-2016标准实现的流媒体平台,依托优秀的开源流媒体服务[ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit),提供完善丰富的功能。 + +- WVP-PRO基于GB/T + 28181-2016标准实现的流媒体平台,依托优秀的开源流媒体服务[ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit) + ,提供完善丰富的功能。 - GB/T 28181-2016 中文标准名称是《公共安全视频监控联网系统信息传输、交换、控制技术要求》是监控领域的国家标准。大量应用于政府视频平台。 - 通过28181协议你可以将IPC摄像头接入平台,可以观看也可以使用28181/rtsp/rtmp/flv等协议将视频流分发到其他平台。 # 特性 + - 实现标准的28181信令,兼容常见的品牌设备,比如海康、大华、宇视等品牌的IPC、NVR以及平台。 - 支持将国标设备级联到其他国标平台,也支持将不支持国标的设备的图像或者直播推送到其他国标平台 - 前端完善,自带完整前端页面,无需二次开发可直接部署使用。 @@ -15,92 +19,94 @@ - 支持多流媒体节点负载均衡。 # 付费社群 + [![社群](_media/shequ.png "shequ")](https://t.zsxq.com/0d8VAD3Dm) > 收费是为了提供更好的服务,也是对作者更大的激励。加入星球的用户三天后可以私信我留下微信号,我会拉大家入群。加入三天内不满意可以直接退款,大家不需要有顾虑,来白嫖三天也不是不可以。 # 我们实现了哪些国标功能 + **作为上级平台** + - [X] 注册 - [X] 注销 - [X] 实时视音频点播 - [X] 设备控制 - - [X] 云台控制 - - [X] 远程启动 - - [X] 录像控制 - - [X] 报警布防/撤防 - - [X] 报警复位 - - [X] 强制关键帧 - - [X] 拉框放大 - - [X] 拉框缩小 - - [X] 看守位控制 - - [X] 设备配置 + - [X] 云台控制 + - [X] 远程启动 + - [X] 录像控制 + - [X] 报警布防/撤防 + - [X] 报警复位 + - [X] 强制关键帧 + - [X] 拉框放大 + - [X] 拉框缩小 + - [X] 看守位控制 + - [X] 设备配置 - [X] 报警事件通知和分发 - [X] 设备目录订阅 - [X] 网络设备信息查询 - - [X] 设备目录查询 - - [X] 设备状态查询 - - [X] 设备配置查询 - - [X] 设备预置位查询 + - [X] 设备目录查询 + - [X] 设备状态查询 + - [X] 设备配置查询 + - [X] 设备预置位查询 - [X] 状态信息报送 - [X] 设备视音频文件检索 - [X] 历史视音频的回放 - - [X] 播放 - - [X] 暂停 - - [X] 进/退 - - [X] 停止 + - [X] 播放 + - [X] 暂停 + - [X] 进/退 + - [X] 停止 - [X] 视音频文件下载 - [X] 校时 - [X] 订阅和通知 - - [X] 事件订阅 - - [X] 移动设备位置订阅 - - [X] 报警订阅 - - [X] 目录订阅 + - [X] 事件订阅 + - [X] 移动设备位置订阅 + - [X] 报警订阅 + - [X] 目录订阅 - [X] 语音广播 - [X] 语音喊话 **作为下级平台** + - [X] 注册 - [X] 注销 - [X] 实时视音频点播 - [X] 设备控制 - - [X] 云台控制 - - [ ] 远程启动 - - [X] 录像控制 - - [X] 报警布防/撤防 - - [X] 报警复位 - - [X] 强制关键帧 - - [X] 拉框放大 - - [X] 拉框缩小 - - [X] 看守位控制 - - [ ] 设备配置 + - [X] 云台控制 + - [ ] 远程启动 + - [X] 录像控制 + - [X] 报警布防/撤防 + - [X] 报警复位 + - [X] 强制关键帧 + - [X] 拉框放大 + - [X] 拉框缩小 + - [X] 看守位控制 + - [ ] 设备配置 - [ ] 报警事件通知和分发 - [X] 设备目录订阅 - [X] 网络设备信息查询 - - [X] 设备目录查询 - - [X] 设备状态查询 - - [ ] 设备配置查询 - - [X] 设备预置位查询 + - [X] 设备目录查询 + - [X] 设备状态查询 + - [ ] 设备配置查询 + - [X] 设备预置位查询 - [X] 状态信息报送 - [X] 设备视音频文件检索 - [X] 历史视音频的回放 - - [X] 播放 - - [x] 暂停 - - [x] 进/退 - - [x] 停止 + - [X] 播放 + - [x] 暂停 + - [x] 进/退 + - [x] 停止 - [X] 视音频文件下载 - [ ] ~~校时~~ - [X] 订阅和通知 - - [X] 事件订阅 - - [X] 移动设备位置订阅 - - [ ] 报警订阅 - - [X] 目录订阅 + - [X] 事件订阅 + - [X] 移动设备位置订阅 + - [ ] 报警订阅 + - [X] 目录订阅 - [X] 语音广播 - [X] 语音喊话 - - - # 社区 + 代码目前托管在GitHub和Gitee,Gitee目前作为加速仓库使用,不接受issue。 GitHub: [https://github.com/648540858/wvp-GB28181-pro](https://github.com/648540858/wvp-GB28181-pro) Gitee: [https://gitee.com/pan648540858/wvp-GB28181-pro](https://gitee.com/pan648540858/wvp-GB28181-pro) \ No newline at end of file diff --git a/doc/_content/ability/_media/img_17.png b/doc/_content/ability/_media/img_17.png index 02b303e365aa668c7a1efb698fce62415b5d19e2..483d522a3eb22c7a768ee92633d3599abf9e49f2 100644 GIT binary patch literal 98596 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�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%0DtKenQXtIMtJfcLlzemt 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 I-+B6f0AK!xY5)KL diff --git a/doc/_content/ability/_media/img_18.png b/doc/_content/ability/_media/img_18.png index 5ca4faf9d1e95a1ccf1b463f7d5d5fba97404d92..3b33b2189b82df1a2db708ac51c3f3694cdfd197 100644 GIT binary patch literal 46456 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 z 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 HyMO!_p?U*z literal 66143 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 XLDkO^cC~EY%=t4`Ka`!m`qTdc=5daE diff --git a/doc/_content/ability/auto_play.md b/doc/_content/ability/auto_play.md index 5259e0b52..2ce30120f 100644 --- a/doc/_content/ability/auto_play.md +++ b/doc/_content/ability/auto_play.md @@ -1,2 +1,3 @@ + # 自动点播 diff --git a/doc/_content/ability/cascade.md b/doc/_content/ability/cascade.md index 7942bda4b..0766a7a93 100644 --- a/doc/_content/ability/cascade.md +++ b/doc/_content/ability/cascade.md @@ -1,34 +1,56 @@ + # 国标级联的使用 + 国标28181不同平台之间支持两种连接方式,平级和上下级,WVP目前支持向上级级联。 + ## 1 接入平台 + ### 1.1 wvp-pro + #### 1.1.1 wvp-pro管理页面点击添加 - ![cascade1](_media/cascade1.png) + +![cascade1](_media/cascade1.png) + #### 1.1.2 填入wvp-pro上级平台信息 - ![cascade1](_media/img_4.png) - ![cascade1](_media/img_5.png) + +![cascade1](_media/img_4.png) +![cascade1](_media/img_5.png) + #### 1.1.3 编辑wvp-pro上级设备信息,开启订阅 - ![cascade1](_media/img_6.png) + +![cascade1](_media/img_6.png) + ### 1.2 大华平台 + ### 1.3 海康平台 + ### 1.4 liveGBS -#### 1.4.1. wvp-pro管理页面点击添加 - ![添加](_media/cascade1.png) -#### 1.4.2. 填入liveGBS平台信息 - ![填入liveGBS平台信息1](_media/cascade2.png) - ![填入liveGBS平台信息2](_media/cascade3.png) -#### 1.4.3. 编辑liveGBS设备信息,开启目录订阅 - ![cascade1](_media/cascade4.png) -#### 1.4.4. 编辑liveGBS设备信息,开启GPS订阅 - ![cascade1](_media/img_7.png) + +#### 1.4.1. wvp-pro管理页面点击添加 + +![添加](_media/cascade1.png) + +#### 1.4.2. 填入liveGBS平台信息 + +![填入liveGBS平台信息1](_media/cascade2.png) +![填入liveGBS平台信息2](_media/cascade3.png) + +#### 1.4.3. 编辑liveGBS设备信息,开启目录订阅 + +![cascade1](_media/cascade4.png) + +#### 1.4.4. 编辑liveGBS设备信息,开启GPS订阅 + +![cascade1](_media/img_7.png) ## 2 添加目录与通道 + 1. 级联平台添加目录信息 ![cascade1](_media/img_1.png) 2. 为目录添加通道 ![cascade1](_media/img_2.png) 3. 设置默认流目录 -如果需要后续自动生成的流信息都在某一个节点下,可以在对应节点右键设置为默认 + 如果需要后续自动生成的流信息都在某一个节点下,可以在对应节点右键设置为默认 ![cascade1](_media/img_3.png) diff --git a/doc/_content/ability/cascade2.md b/doc/_content/ability/cascade2.md index 7bd6c7929..00f4fcb59 100644 --- a/doc/_content/ability/cascade2.md +++ b/doc/_content/ability/cascade2.md @@ -1,18 +1,71 @@ + # 国标级联的使用 + 国标28181不同平台之间支持两种连接方式,平级和上下级,WVP目前支持向上级级联。 + ## 添加上级平台 + 在国标级联页面点击“添加”按钮,以推送到上级WVP为例子,参看[接入设备](./_content/ability/device.md) ![cascade17](_media/img_17.png) -点击保存可以在上级的国标通道列表看到新增加的设备; + +1. 名称 + 上级平台看到的下级平台名称; +2. 本地IP + 本地连接上级使用的具体哪个网卡; +3. SIP认证用户名 + 可以设置为与"设备国标编号"一致; +4. 注册周期 + 间隔多久发起一次注册,单位秒; +5. 心跳周期 + 间隔多久发送一次心跳,一般上级平台三次收不到心跳就会认为下级离线了, 所以建议{心跳周期}x3 < 注册周期; +6. SDP发流IP + 调用媒体节点发送视频流给上级时,使用的本地IP; +7. 信令传输 + 信令传输模式,支持udp和TCP,没有特殊需求,默认UDP即可; +8. 目录分组 + 上级发送"CATALOG"消息查询通道信息,每一条消息中携带几条通道信息,默认为1,增大该值,可以加快通道发送速度; +9. 字符集 + 发送给上级"MESSAGE"消息中的消息体使用的编码格式,国标28181-2016默认为GB2312; +10. 行政区划 + 如果勾选"其他选项/推送平台信息"选项,会给上级推送平台信息,这里就是平台的行政区划信息 +11. 平台厂商 + 如果勾选"其他选项/推送平台信息"选项,会给上级推送平台信息,这里就是平台的平台厂商信息 +12. 平台型号 + 如果勾选"其他选项/推送平台信息"选项,会给上级推送平台信息,这里就是平台的平台型号信息 +13. 平台安装地址 + 如果勾选"其他选项/推送平台信息"选项,会给上级推送平台信息,这里就是平台的平台安装地址信息 +14. 其他选项 + - RTCP保活 + 在上级的流传输模式为UDP时,因为UDP的无状态特性,会无法知道上级是否在正常收流,启用RTCP保活时,就可以主动发送RTCP消息确认上级是否在正常收流, + 异常情况下,可以下级主动停止发流; + - 消息通道 + 支持通过报警消息给上级级WVP推送消息,消息内容由redis消息发送给wvp,wvp编辑成报警消息发送给上级; + - 主动推送通道 + WVP模拟一条目录订阅信息,然后在共享通道变化时,发送CATAOLOG事件给上级,通知具体的通道变化, + 目前支持的状态有: 状态改变事件 ON:上线,OFF:离线,VLOST:视频丢失,DEFECT:故障,ADD:增加,DEL:删除,UPDATE:更新; + - 推送平台信息 + 勾选此项,上级收到的通道信息中会多出一个平台信息的通道.内容在平台的编辑中修改; + - 推送分组信息 + 勾选此项,如果你共享的通道分配了具体的业务分组以及虚拟组织,那么上级收到的通道中会包括业务分组以及虚拟组织节点信息; + - 推送行政区划 + 勾选此项,如果你共享的通道分配了具体的行政区划,那么上级收到的通道中会包括行政区划信息; + 国标级联列表出现了级联的这个平台;同时状态显示为在线,如果状态为离线那么可能是你的服务信息配置有误或者网络不通。 订阅信息列有三个图标,表示上级开启订阅,从左到右依次是:报警订阅,目录订阅,移动位置订阅。 -## 推送通道 -点击你要推送的平台的“选择通道”按钮。 + +## 通道共享 + +点击你要推送的平台的“通道共享”按钮。 ![cascade18](_media/img_18.png) -- **页面结构** - - 左侧为目录结构 - 选择未分配,则右侧显示待分配的通道,可以点击“添加按钮”,在弹窗中选择要放置的位置,保存后即可添加通道成功 - 选择其他的目录可以看到已经分配在这个目录下的通道,可以对其进行删除后重新在未分配中去分配。 - - 右侧为数据展示以及操作 - 国标通道栏内为来自其他国标设备/平台的通道;直播流通道为来自推流/拉流代理的通道。 \ No newline at end of file + +1. 添加状态选择"未共享"可以将具体的通道共享给上级; +2. 添加状态选择"已共享"可以看到已经共享的通道,并且支持为这个通道在这个平台设备专门的名称和编号; +3. 点击"按设备添加"可以将某个国标设备下的所有通道共享给上级; +4. 点击"按设备移除"可以将某个国标设备下的所有通道取消共享给上级; +5. 点击"全部添加"可以将所有通道共享给上级; +6. 点击"全部移除"可以将所有通道共享给上级; + +## 推送通道 + +WVP会将所有通道信息按照目录订阅消息通知形式,发送ADD事件给上级. \ No newline at end of file diff --git a/doc/_content/ability/channel.md b/doc/_content/ability/channel.md index 78f5c5d44..adfe0ee76 100644 --- a/doc/_content/ability/channel.md +++ b/doc/_content/ability/channel.md @@ -1,12 +1,22 @@ # 通道管理 + 通道管理为了对已经分配国标编号的通道进行统一的行政区划和业务分组管理,国标中对于组织结构有两种表示方式,一种是按照行政区划,一种是业务分组+虚拟组织的方式. -行政区划结构固定,比如: 北京/市辖区/昌平区, 通道可以挂载道何一级行政区划下. 业务分组比较灵活, 可以按照自己的随意取名, 但是通道只能放在业务分组下的虚拟组织里,不能放在业务分组下. +行政区划结构固定,比如: 北京/市辖区/昌平区, 通道可以挂载道何一级行政区划下. 业务分组比较灵活, 可以按照自己的随意取名, +但是通道只能放在业务分组下的虚拟组织里,不能放在业务分组下. + ## 行政区划 -左侧树结构为行政区划结构, 通过数据鼠标右键可以操作,包括: 刷新节点,新建节点,编辑节点,删除节点,添加设备(可以将某个国标设备下的通道全部添加道某一个节点下),移除设备(可以将某个国标设备下的通道全部从这个节点移除) -右侧伪通道列表, 对于非国标接入的设备只有配置了国标编号后才可以在这里进行操作, 添加状态选择"未添加"可以进行添加操作,选择"已添加"进行移除操作 + +左侧树结构为行政区划结构, 通过数据鼠标右键可以操作,包括: 刷新节点,新建节点,编辑节点,删除节点,添加设备( +可以将某个国标设备下的通道全部添加道某一个节点下),移除设备(可以将某个国标设备下的通道全部从这个节点移除) +右侧伪通道列表, 对于非国标接入的设备只有配置了国标编号后才可以在这里进行操作, 添加状态选择"未添加"可以进行添加操作,选择" +已添加"进行移除操作 ![刷新](_media/img_21.png) + ## 业务分组 -左侧树结构为业务分组结构, 通过数据鼠标右键可以操作,包括: 刷新节点,新建节点,编辑节点,删除节点,添加设备(可以将某个国标设备下的通道全部添加道某一个节点下),移除设备(可以将某个国标设备下的通道全部从这个节点移除) + +左侧树结构为业务分组结构, 通过数据鼠标右键可以操作,包括: 刷新节点,新建节点,编辑节点,删除节点,添加设备( +可以将某个国标设备下的通道全部添加道某一个节点下),移除设备(可以将某个国标设备下的通道全部从这个节点移除) 业务分组下不能挂载设备,所以没有选择该节点的单选框. -右侧伪通道列表, 对于非国标接入的设备只有配置了国标编号后才可以在这里进行操作, 添加状态选择"未添加"可以进行添加操作,选择"已添加"进行移除操作 +右侧伪通道列表, 对于非国标接入的设备只有配置了国标编号后才可以在这里进行操作, 添加状态选择"未添加"可以进行添加操作,选择" +已添加"进行移除操作 ![刷新](_media/img_22.png) \ No newline at end of file diff --git a/doc/_content/ability/cloud_record.md b/doc/_content/ability/cloud_record.md index 0aa55e1e5..716a614fe 100644 --- a/doc/_content/ability/cloud_record.md +++ b/doc/_content/ability/cloud_record.md @@ -1,8 +1,13 @@ + # 云端录像 + +![云端录像](_media/img_23.png) 云端录像是对录制在zlm服务下的录像文件的管理,录像的文件路径默认在ZLM/www/record下。 -如果你需要24小时的录像,目前有一个这种方案,可以参考[7*24不间断录像](./_content/ability/continuous_recording.md)。 -1. 云段录像支持录像文件的查看,播放(可能因为编码的原因导致无法播放); -2. 支持录像的下载; -3. 支持录像的合并下载; -功能没有太多特殊的地方就不一一介绍了,大家自行体验吧。 + +- 国标设备是否录像: 可以再WVP的配置中user-settings.record-sip设置为true那么每次点播以及录像回放都会录像; +- 推流设备是否录像: 可以再WVP的配置中user-settings.record-push-live设置为true; +- 拉流代理的是否录像: 在添加和编辑拉流代理时可以指定, 每次点播都会进行录像 +- 录像文件存储路径配置: 可以修改media.record-path来修改录像路径,但是如果有旧的录像文件,请不要迁移,因为数据库记录了每一个录像的绝对路径,一旦修改会造成找到文件,无法定时移除以及播放 +- 录像保存时间: 可以修改media.record-day来修改录像保存时间,单位是天; + diff --git a/doc/_content/ability/continuous_broadcast.md b/doc/_content/ability/continuous_broadcast.md index 7af3afeb0..06708e779 100644 --- a/doc/_content/ability/continuous_broadcast.md +++ b/doc/_content/ability/continuous_broadcast.md @@ -1,9 +1,13 @@ # 语音对讲 + ## 流程和原理 + 语音对讲在国标28181-2016中分为broadcast(广播)和talk(对讲)两种模式,broadcast模式是从服务端把音频传送到设备端,是单向的, 需要结合点播视频来实现双向对讲,talk模式支持双向,不过wvp只处理了和broadcast一样的把音频传递设备,这样两种模式可以使用一样的逻辑处理即可。 不同的设备对于两种模式的支持不同且通常差异很大,不同的设备对同一个设备的支持也有一些不同,所以语音对讲中的兼容和适配也是问题最多的。talk模式因为在国标28181-2022中已经移除,所以这里不再讨论它了。 + ### 1. broadcast模式流程 + ```plantuml @startuml "WVP-PRO" -> "设备": 语音广播通知 @@ -16,24 +20,33 @@ "ZLMediaKit" -> "设备": 向设备发送语音流 @enduml ``` + 与点播的流程不同的是,这里的invite消息是由设备发送给wvp的,wvp按照invite协商的方式给设备推送语音流,所有对讲的使用那种方式(UDP/TCP被动/TCP主动)传输语音流由设备决定 + ## 使用条件与限制 -因为invite消息是由设备发送给wvp的,这决定了发送语音流的方式,这也就决定了有的设备不能用于公网对讲,比如大部分的海康设备只支持udp方式收流(目前新版的海康设备已经在着手解决这个问题),那么wvp发流时只能按照sdp中指定的ip端口发流,所以如果wvp在公网,设备在内网中,那么wvp无法连接设备提供的IP,发流也就失败了。 + +因为invite消息是由设备发送给wvp的,这决定了发送语音流的方式,这也就决定了有的设备不能用于公网对讲,比如大部分的海康设备只支持udp方式收流( +目前新版的海康设备已经在着手解决这个问题),那么wvp发流时只能按照sdp中指定的ip端口发流,所以如果wvp在公网,设备在内网中,那么wvp无法连接设备提供的IP,发流也就失败了。 与海康不同的,大华以及很多执法记录仪厂商是支持tcp主动方式取流的,这样是可以实现公网对讲的。 - ## 使用ffmpeg快速测试 + 由于浏览器对于音频的采集需要网页支持https才可以,所以如果想要实现网页音频对讲,那么你必须给wvp和zlm配置证书以使用https。 测试阶段如果只是想测试功能可以用ffmpeg来模拟语音流,推送到wvp后可以实现把音频文件推送到摄像头。 测试命令格式如下: + ```shell ffmpeg -re -i {音频文件} -acodec pcm_alaw -ar 8000 -ac 1 -f rtsp 'rtsp://{zlm的IP}:{zlm的RTSP端口}/broadcast/{设备国标编号}_{通道国标编号}?sign={md5(pushKey)}' ``` + 例如 + ```shell ffmpeg -re -i test.mp3 -acodec pcm_alaw -ar 8000 -ac 1 -f rtsp 'rtsp://192.168.1.3:22554/broadcast/34020000001320000001_34020000001320000001?sign=41db35390ddad33f83944f44b8b75ded' ``` + 测试流程如下: + ```plantuml @startuml "FFMPEG" -> "ZLMediaKit": 推流到zlm @@ -44,33 +57,48 @@ ffmpeg -re -i test.mp3 -acodec pcm_alaw -ar 8000 -ac 1 -f rtsp 'rtsp://192.168.1 "ZLMediaKit" -> "设备": 向设备推流 @enduml ``` + 如果听到设备播放你推送的音频,那么意味着调用成功,此过程推流即可需要调用任何接口 + ## 生产环境网页发起语音对讲 + 生产环境下使用语音对讲,如果是自己的客户端设备那么直接上面的ffmpeg测试方式,按照固定格式推流到zlm即可。 对于WEB程序,主要是局域网和公网的区别,两个原因: + 1. 很多设备不支持公网对讲 2. 公网和局域网获取证书实现https支持的方式不同 + ### 公网使用 + 公网你可以直接使用证书厂商或者云服务器厂商提供的证书,这是很方便的。 + ### 局域网使用 + 局域网你需要为wvp和zlm生成自签名证书,这里我推荐一种生成自签名证书相对方便的方式, 此方式为linux下的一种方式。 下载证书生成工具: [https://github.com/FiloSottile/mkcert/releases/tag/v1.4.4](https://github.com/FiloSottile/mkcert/releases/tag/v1.4.4) 安装此工具, 进入解压的工具目录,执行 + ```shell ./mkcert-v1.4.4-linux-amd64 -install ``` + 生成pem证书 + ```shell ./mkcert-v1.4.4-linux-amd64 局域网IP 局域网IP2 局域网IP3 ``` + 你会得到两文件*-key.pem和*.pem, 此文件配置到wvp后既可实现证书的加载 生成zlm使用的证书 + ```shell cat *.pem *-key.pem> ./zlm.pem ``` + 得到的文件就是可以给zlm使用的证书 zlm下使用证书有两种方式: + 1. 替换zlm下的default.pem, 即删除此文件并把zlm.pem重命名为default.pem 2. 在启动zlm的使用添加 `-s zlm.pem` \ No newline at end of file diff --git a/doc/_content/ability/continuous_recording.md b/doc/_content/ability/continuous_recording.md index 516830fde..78c1ae58c 100644 --- a/doc/_content/ability/continuous_recording.md +++ b/doc/_content/ability/continuous_recording.md @@ -1,14 +1,16 @@ + # 7*24不间断录像 -目前如果要实现不间断录像如果只是关闭无人观看停止推流是不够的,设备可能经历断网,重启,都会导致录像的中断,目前给大家提供一种可用的临时方案。 +目前如果要实现不间断录像如果只是关闭无人观看停止推流是不够的,设备可能经历断网,重启,都会导致录像的中断,目前给大家提供一种可用的临时方案。 **原理:** wvp支持使用流地址自动点播,即你拿到一个流地址直接去播放,即使设备处于未点播状态,wvp会自动帮你点播;ZLM 的拉流代理成功后会无限重试,只要流一恢复就可以拉起来,基于这两个原理。 **方案如下:** + 1. wvp的配置中user-settings->auto-apply-play设置为团true,开启自动点播; 2. 点击你要录像的通道,点击播放页面左下角的“更多地址”,点击rtsp,此时复制了rtsp地址到剪贴板; 3. 在拉流代理中添加一路流,地址填写你复制的地址,启用成功即可。 -**前提:** + **前提:** 1. wvp使用多端口收流,不然你无法得到一个固定的流地址,也就无法实现自动点播。 diff --git a/doc/_content/ability/device.md b/doc/_content/ability/device.md index cd47d7934..cc604576f 100644 --- a/doc/_content/ability/device.md +++ b/doc/_content/ability/device.md @@ -1,54 +1,68 @@ + # 接入设备 + ## 国标28181设备 -设备接入主要是需要在设备上配置28181上级也就是WVP-PRO的信息,只有信息一致的情况才可以注册成功。设备注册成功后打开WVP->国标设备,可以看到新增加的设备;[设备使用](./_content/ability/device_use.md), -主要有以下字段需要配置: + +设备接入主要是需要在设备上配置28181上级也就是WVP-PRO的信息,只有信息一致的情况才可以注册成功。设备注册成功后打开WVP-> +国标设备,可以看到新增加的设备;[设备使用](./_content/ability/device_use.md), +主要有以下字段需要配置: - sip->port -28181服务监听的端口 + 28181服务监听的端口 - sip->domain -domain宜采用ID统一编码的前十位编码。 + domain宜采用ID统一编码的前十位编码。 - sip->id -28181服务ID + 28181服务ID - sip->password -28181服务密码 + 28181服务密码 -- 配置信息在如下位置 +- 配置信息在如下位置 ![_media/img_16.png](_media/img_16.png) *** + ### 1. 大华摄像头 + ![_media/img_10.png](_media/img_10.png) + ### 2. 大华NVR + ![_media/img_11.png](_media/img_11.png) + ### 3. 艾科威视摄像头 + ![_media/img_15.png](_media/img_15.png) + ### 4. 水星摄像头 + ![_media/img_12.png](_media/img_12.png) + ### 5. 海康摄像头 + ![_media/img_9.png](_media/img_9.png) ## 直播推流设备 + 这里以obs推流为例,很多无人机也是一样的,设置下推流地址就可以接入了 + 1. 从wvp获取推流地址, 选择节点管理菜单,查看要推流的节点; ![_media/img_19.png](_media/img_19.png) 2. 拼接推流地址 - 得到的rtsp地址就是: rtsp://{流IP}:{RTSP PORT}/{app}/{stream} - 得到的rtmp地址就是: rtsp://{流IP}:{RTMP PORT}/{app}/{stream} - 其中流IP是设备可以连接到zlm的IP,端口是对应协议的端口号, app和stream自己定义就可以. + 得到的rtsp地址就是: rtsp://{流IP}:{RTSP PORT}/{app}/{stream} + 得到的rtmp地址就是: rtsp://{流IP}:{RTMP PORT}/{app}/{stream} + 其中流IP是设备可以连接到zlm的IP,端口是对应协议的端口号, app和stream自己定义就可以. 3. 增加推流鉴权信息 - wvp默认开启推流鉴权,拼接好的地址是不能直接推送的,会被返回鉴权失败,参考[推流规则](_content/ability/push?id=推流规则) + wvp默认开启推流鉴权,拼接好的地址是不能直接推送的,会被返回鉴权失败,参考[推流规则](_content/ability/push?id=推流规则) 4. 推流成功后可以再推流列表中看到推流设备,可以播放 - 此方式只支持设备实时流的播放,无其他功能, 推流信息在推流结束后会自动移除,在列表里就看不到了,如果需要推流信息需要为设备配置国标编号,这样才可以作为wvp的一个永久通道存在. + 此方式只支持设备实时流的播放,无其他功能, 推流信息在推流结束后会自动移除,在列表里就看不到了,如果需要推流信息需要为设备配置国标编号,这样才可以作为wvp的一个永久通道存在. ## 接入非国标IPC设备或者其他流地址形式的设备 + 这类设备的接入主要通过拉流代理的方式接入,原理就是zlm主动像播放器一样拉取这个流缓存在自己服务器供其他人播放.可以解决源设备并发访问能力差的问题. 在拉流代理/添加代理后可以直接播放, 拉流代理也是同样只支持播放当前配置的流. - - - [设备使用](_content/ability/device_use.md) diff --git a/doc/_content/ability/device_use.md b/doc/_content/ability/device_use.md index 30db116ec..6cb54dc10 100644 --- a/doc/_content/ability/device_use.md +++ b/doc/_content/ability/device_use.md @@ -1,11 +1,20 @@ + # 国标设备 -### 更新设备通道 - 点击列表末尾的“刷新”按钮,可以看到一个圆形进度条,等进度结束提示成功后即可更新完成,如果通道数量有变化你可以看点击左上角的![刷新](_media/img_14.png)即可看到通道数量的变化;如果通道数量仍未0,那么可能时对方尚未推送通道给你。 -### 查看设备通道 - 点击列表末尾的“通道”按钮, + +### 更新设备通道 + +点击列表末尾的“刷新”按钮,可以看到一个圆形进度条,等进度结束提示成功后即可更新完成,如果通道数量有变化你可以看点击左上角的![刷新](_media/img_14.png) +即可看到通道数量的变化;如果通道数量仍未0,那么可能时对方尚未推送通道给你。 + +### 查看设备通道 + +点击列表末尾的“通道”按钮, + ### 编辑设备 + 点击列表末尾的“编辑”按钮,即可在打开的弹窗中对设备功能进行修改 + - 设备名称 如何未能从设备里读取到设备名称或者需要自己重命名,那么可以修改此选项。 - 密码 @@ -27,13 +36,27 @@ wvp支持通过报警消息给下级WVP互相推送消息,消息内容由redis消息发送给wvp,wvp编辑成报警消息发送给下级 - 收到ACK后发流 语音对讲策略: 不同的设备对于语音对讲的收流时机要求不一,勾选后会在收到设备发送的ack后再开始发流,不勾选则在回复200OK后开始发流,目前已知大华设备不勾选,海康需要勾选. -### 删除设备 - 可以删除WVP中的设备信息,如果设备28181配置未更改,那么设备在下一次注册后仍然会注册上来。 -### 点播视频 - 进入通道列表后,点击列表末尾的“播放”按钮,稍等即可弹出播放页面 -### 设备录像 - 进入通道列表后,点击列表末尾的“设备录像”按钮,也可以在播放页面点击录像查询进入录像查看页面,选择要查看的日期即可对录像进行播放和下载。 -### 云台控制 - 可以对支持云台功能的设备进行上下左右的转动以及拉近拉远的操作。 -### 获取视频的播放器地址 - 视频点播成功后在实时视频页面,点击“更多地址”可以看到所有的播放地址,地址是否可以播放与你是否完整编译启用zlm功能有关,更与网络有关。 \ No newline at end of file + +### 删除设备 + +可以删除WVP中的设备信息,如果设备28181配置未更改,那么设备在下一次注册后仍然会注册上来。 + +### 点播视频 + +进入通道列表后,点击列表末尾的“播放”按钮,稍等即可弹出播放页面 + +### 设备录像 + +进入通道列表后,点击列表末尾的“设备录像”按钮,也可以在播放页面点击录像查询进入录像查看页面,选择要查看的日期即可对录像进行播放和下载。 + +### 云台控制 + +可以对支持云台功能的设备进行上下左右的转动以及拉近拉远的操作。 + +### 获取视频的播放器地址 + +视频点播成功后在实时视频页面,点击“更多地址”可以看到所有的播放地址,地址是否可以播放与你是否完整编译启用zlm功能有关,更与网络有关。 + +### 语音对讲 + +[语音对讲](_content/ability/continuous_broadcast.md) \ No newline at end of file diff --git a/doc/_content/ability/gis.md b/doc/_content/ability/gis.md index f77a428c0..5932df923 100644 --- a/doc/_content/ability/gis.md +++ b/doc/_content/ability/gis.md @@ -1,20 +1,26 @@ -# 电子地图 -WVP提供了简单的电子地图用于设备的定位以及移动设备的轨迹信息,电子地图基于开源的地图引擎openlayers开发。 -### 查看设备定位 -1. 可以在设备列表点击“定位”按钮,自动跳转到电子地图页面; -2. 在电子地图页面在设备上右键点击“定位”获取设备/平台下的所有通道位置。 -3. 单击通道信息可以定位到具体的通道 +# 电子地图 + +WVP提供了简单的电子地图用于设备的定位以及移动设备的轨迹信息,电子地图基于开源的地图引擎openlayers开发。 + +### 查看设备定位 + +1. 可以在设备列表点击“定位”按钮,自动跳转到电子地图页面; +2. 在电子地图页面在设备上右键点击“定位”获取设备/平台下的所有通道位置。 +3. 单击通道信息可以定位到具体的通道 ### 查询设备轨迹 + 查询轨迹需要提前配置save-position-history选项开启轨迹信息的保存,目前WVP此处未支持分库分表,对于大数据量的轨迹信息无法胜任,有需求请自行二次开发或者定制开发。 在电子地图页面在设备上右键点击“查询轨迹”获取设备轨迹信息。 PS: 目前的底图仅用用作演示和学习,商用情况请自行购买授权使用。 ### 更换底图以及底图配置 + 目前WVP支持使用了更换底图,配置文件在web_src/static/js/config.js,请修改后重新编译前端文件。 + ```javascript window.mapParam = { // 开启/关闭地图功能 diff --git a/doc/_content/ability/node_manger.md b/doc/_content/ability/node_manger.md index 1b4aef324..ec39a6b2e 100644 --- a/doc/_content/ability/node_manger.md +++ b/doc/_content/ability/node_manger.md @@ -1,9 +1,20 @@ + # 节点管理 + +![节点管理](_media/img_23.png) + WVP支持单个WVP多个ZLM的方案来扩展WVP的视频并发能力,并发点播是因为带宽和性能的原因,单个ZLM节点能支持的路数有限,所以WVP增加了ZLM集群来扩展并发并且保证ZLM的高可用。 + ## 默认节点 + WVP中为了保证功能的完整性,ZLM节点至少要有一个默认节点,这个节点不是在管理页面添加的,而是在WVP的配置文件中配置的,这个节点不可在页面删除。每次启动会自动从配置文件中读取配置写入数据库备用。 + ## 新增节点 -启动你要添加的zlm节点,然后点击“添加节点”按钮输入zlm的ip, http端口,SECRET。点击测试测试完成则开始对节点进行详细的设置,如果你的zlm是使用docker启动的,可能存在zlm使用的端口与宿主机端口不一致的情况,需要在这里一一配置。 + +启动你要添加的zlm节点,然后点击“添加节点”按钮输入zlm的ip, +http端口,SECRET。点击测试测试完成则开始对节点进行详细的设置,如果你的zlm是使用docker启动的,可能存在zlm使用的端口与宿主机端口不一致的情况,需要在这里一一配置。 + ## wvp使用多个节点的原理 + wvp会把连接的节点统一记录在redis中,并记录zlm的负载情况,当新的请求到来时,会取出负载最低的那个zlm进行使用。以此保证节点负载均衡。 diff --git a/doc/_content/ability/online_doc.md b/doc/_content/ability/online_doc.md index 55ecb2680..50d5070e9 100644 --- a/doc/_content/ability/online_doc.md +++ b/doc/_content/ability/online_doc.md @@ -1,2 +1,3 @@ + # 在线文档 diff --git a/doc/_content/ability/proxy.md b/doc/_content/ability/proxy.md index 39cff2955..7080442f4 100644 --- a/doc/_content/ability/proxy.md +++ b/doc/_content/ability/proxy.md @@ -1,12 +1,17 @@ + # 拉流代理 + 不是所有的摄像机都支持国标或者推流的,但是这些设备可以得到一个视频播放地址,通常为rtsp协议, 以大华为例: + ```text rtsp://{user}:{passwd}@{ipc_ip}:{rtsp_port}/cam/realmonitor?channel=1&subtype=0 ``` + 可以得到这样一个流地址,可以直接用vlc进行播放,此时我们可以通过拉流代理功能将这个设备推送给其他国标平台了。 流程如下: + ```plantuml @startuml "摄像机" <- "ZLMediaKit": 1. 流去流信息到ZLM @@ -15,10 +20,13 @@ rtsp://{user}:{passwd}@{ipc_ip}:{rtsp_port}/cam/realmonitor?channel=1&subtype=0 "WVP-PRO" -> "ZLMediaKit": 4. 通知推流到上级国标平台 @enduml ``` + ## 添加代理 + 拉流代理支持两种方式: + 1. ZLM中直接代理流,支持RTSP/RTMP,不支持转码; 2. 借助ffmpeg完成拉转,可以通过修改ffmpeg拉转参数完成转码。 -点击页面的“添加代理”,添加信息后保存即可,如果你需要共享推流信息到其他国标平台,那么你需要编辑/国标通道配置,配置国标编码. + 点击页面的“添加代理”,添加信息后保存即可,如果你需要共享推流信息到其他国标平台,那么你需要编辑/国标通道配置,配置国标编码. `PS: ffmpeg默认模板不需修改,需要修改`参数自行去ZLM配置文件中添加一个即可。 diff --git a/doc/_content/ability/push.md b/doc/_content/ability/push.md index 1470509cb..cc568b3c8 100644 --- a/doc/_content/ability/push.md +++ b/doc/_content/ability/push.md @@ -1,8 +1,11 @@ + # 推流列表 + ## 功能说明 WVP支持三种图像输入方式,直播,[拉流代理](_content/ability/proxy.md),[国标](_content/ability/device.md),直播设备接入流程如下 + ```plantuml @startuml "直播设备" -> "ZLMediaKit": 1. 发起推流 @@ -11,30 +14,41 @@ WVP支持三种图像输入方式,直播,[拉流代理](_content/ability/pro "WVP-PRO" -> "ZLMediaKit": 4. 通知推流到上级国标平台 @enduml ``` + 1. 默认情况下WVP收到推流信息后,列表中出现这条推流信息,如果你需要共享推流信息到其他国标平台,那么你需要编辑/国标通道配置,配置国标编码. 2. WVP也支持推流前导入大量通道直接推送给上级,点击“下载模板”按钮,根据示例修改模板后,点击“通道导入”按钮导入通道数据. ## 推拉流鉴权规则 + 为了保护服务器的WVP默认开启推流鉴权(目前不支持关闭此功能) ### 推流规则 + 推流时需要携带推流鉴权的签名sign,sign=md5(pushKey),pushKey来自用户表,每个用户会有一个不同的pushKey. 例如app=test,stream=live,pushKey=1000,ip=192.168.1.4, port=10554 那么推流地址为: + ``` rtsp://192.168.1.4:10554/test/live?sign=a9b7ba70783b617e9998dc4dd82eb3c5 ``` + 支持推流时自定义播放鉴权Id,参数名为callId,此时sign=md5(callId_pushKey) 例如app=test,stream=live,pushKey=1000,callId=12345678, ip=192.168.1.4, port=10554 那么推流地址为: + ``` rtsp://192.168.1.4:10554/test/live?callId=12345678&sign=c8e6e01dde2d60c66dcea8d2498ffef1 ``` + ### 播放规则 + 默认情况播放不需要鉴权,但是如果推流时携带了callId,那么播放时必须携带callId 例如app=test,stream=live,无callId, ip=192.168.1.4, port=10554 那么播放地址为: + ``` rtsp://192.168.1.4:10554/test/live ``` + 例如app=test,stream=live,callId=12345678, ip=192.168.1.4, port=10554 那么播放地址为: + ``` rtsp://192.168.1.4:10554/test/live?callId=12345678 ``` diff --git a/doc/_content/ability/user.md b/doc/_content/ability/user.md index 0c472386a..776fe6b64 100644 --- a/doc/_content/ability/user.md +++ b/doc/_content/ability/user.md @@ -1,2 +1,3 @@ + # 用户管理 diff --git a/doc/_content/about_doc.md b/doc/_content/about_doc.md index f727264e9..02e36137f 100644 --- a/doc/_content/about_doc.md +++ b/doc/_content/about_doc.md @@ -1,5 +1,7 @@ # 关于本文档 -本文档开源在gitee上,[https://gitee.com/pan648540858/wvp-pro-doc.git](https://gitee.com/pan648540858/wvp-pro-doc.git),如果文档出现任何错误或者不易理解的语句,请大家提ISSUE帮助我及时更正。欢迎大家提交PR一起维护这份文档,让更多的人可以使用到这个开源的视频平台。 + +本文档开源在gitee上,[https://gitee.com/pan648540858/wvp-pro-doc.git](https://gitee.com/pan648540858/wvp-pro-doc.git) +,如果文档出现任何错误或者不易理解的语句,请大家提ISSUE帮助我及时更正。欢迎大家提交PR一起维护这份文档,让更多的人可以使用到这个开源的视频平台。 diff --git a/doc/_content/broadcast.md b/doc/_content/broadcast.md index 3a6b20d70..355e76172 100644 --- a/doc/_content/broadcast.md +++ b/doc/_content/broadcast.md @@ -1,6 +1,7 @@ # 原理图 ## 使用ffmpeg测试语音对讲原理 + ```plantuml @startuml "FFMPEG" -> "ZLMediaKit": 推流到zlm @@ -13,6 +14,7 @@ ``` ## 使用网页测试语音对讲原理 + ```plantuml @startuml "前端页面" -> "WVP-PRO": 请求推流地址 diff --git a/doc/_content/disclaimers.md b/doc/_content/disclaimers.md index 94412ecdc..b0b2e64a5 100644 --- a/doc/_content/disclaimers.md +++ b/doc/_content/disclaimers.md @@ -1,2 +1,5 @@ # 免责声明 -WVP-PRO自有代码使用宽松的MIT协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议 \ No newline at end of file + +WVP-PRO自有代码使用宽松的MIT协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 +但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 +在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议 \ No newline at end of file diff --git a/doc/_content/introduction/compile.md b/doc/_content/introduction/compile.md index 15f2a9e68..b61d6453b 100644 --- a/doc/_content/introduction/compile.md +++ b/doc/_content/introduction/compile.md @@ -1,46 +1,63 @@ + # 编译 + WVP-PRO不只是实现了国标28181的协议,本身也是一个完整的视频平台。所以对于新手来说,你可能需要一些耐心来完成。遇到问题不要焦躁,你可以 + 1. 百度 2. 加入星球体提问;[知识星球](https://t.zsxq.com/0d8VAD3Dm) 3. 向作者发送邮件648540858@qq.com,寻求技术支持(有偿); WVP-PRO使用Spring boot开发,maven管理依赖。对于熟悉spring开发的朋友是很容易进行编译部署以及运行的。 下面将提供一种通用方法方便大家运行项目。 + ## 1 服务介绍 -| 服务 | 作用 | 是否必须 | -|----------------|------------------------------------------|-------------------------| -| WVP-PRO | 实现国标28181的信令以及视频平台相关的功能 | 是 | -| ZLMediaKit | 为WVP-PRO提供国标28181的媒体部分的实现,以及各种视频流格式的分发支持 | 是 | + +| 服务 | 作用 | 是否必须 | +|------------|------------------------------------------|------| +| WVP-PRO | 实现国标28181的信令以及视频平台相关的功能 | 是 | +| ZLMediaKit | 为WVP-PRO提供国标28181的媒体部分的实现,以及各种视频流格式的分发支持 | 是 | ## 2 安装依赖 -| 依赖 | 版本 | 用途 | 开发环境需要 | 生产环境需要 | -|--------|------------|-------------|--------|--------| -| jdk | >=1.8 | 运行与编译java代码 | 是 | 是 | -| maven | >=3.3 | 管理java代码依赖 | 否 | 否 | -| git || 下载/更新/提交代码 | 否 | 否 | -| nodejs || 编译于运行前端文件 | 否 | 否 | -| npm || 管理前端文件依赖 | 否 | 否 | + +| 依赖 | 版本 | 用途 | 开发环境需要 | 生产环境需要 | +|--------|-------|-------------|--------|--------| +| jdk | >=1.8 | 运行与编译java代码 | 是 | 是 | +| maven | >=3.3 | 管理java代码依赖 | 否 | 否 | +| git | | 下载/更新/提交代码 | 否 | 否 | +| nodejs | | 编译于运行前端文件 | 否 | 否 | +| npm | | 管理前端文件依赖 | 否 | 否 | 如果你是一个新手,建议你使用linux或者macOS平台。windows不推荐。 ubuntu环境,以ubuntu 18为例: + ``` bash apt-get install -y openjdk-11-jre git maven nodejs npm ``` + centos环境,以centos 8为例: + ```bash yum install -y java-1.8.0-openjdk.x86_64 git maven nodejs npm ``` + window环境,以windows10为例: + ```bash 这里不细说了,百度或者谷歌一搜一大把,基本都是下一步下一步,然后配置环境变量。 ``` + ## 3 安装mysql以及redis + 这里依然是参考网上教程,自行安装吧。 ## 4 编译ZLMediaKit -参考ZLMediaKit[WIKI](https://github.com/ZLMediaKit/ZLMediaKit/wiki),如果需要使用语音对讲功能,请参考[zlm启用webrtc编译指南](https://github.com/ZLMediaKit/ZLMediaKit/wiki/zlm%E5%90%AF%E7%94%A8webrtc%E7%BC%96%E8%AF%91%E6%8C%87%E5%8D%97),开启zlm的webrtc功能。截取一下关键步骤: + +参考ZLMediaKit[WIKI](https://github.com/ZLMediaKit/ZLMediaKit/wiki) +,如果需要使用语音对讲功能,请参考[zlm启用webrtc编译指南](https://github.com/ZLMediaKit/ZLMediaKit/wiki/zlm%E5%90%AF%E7%94%A8webrtc%E7%BC%96%E8%AF%91%E6%8C%87%E5%8D%97) +,开启zlm的webrtc功能。截取一下关键步骤: + ```bash # 国内用户推荐从同步镜像网站gitee下载 git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit @@ -48,40 +65,52 @@ cd ZLMediaKit # 千万不要忘记执行这句命令 git submodule update --init ``` + ## 5 编译WVP-PRO + ### 5.1 可以通过git克隆,也可以在项目下载点击下载 + ![点击下载](_media/img_1.png) ![点击下载](_media/img_2.png) 从gitee克隆 + ```bash git clone https://gitee.com/pan648540858/wvp-GB28181-pro.git ``` + 从github克隆 + ```bash git clone https://github.com/648540858/wvp-GB28181-pro.git ``` ### 5.2 编译前端页面 + ```shell script cd wvp-GB28181-pro/web_src/ npm --registry=https://registry.npmmirror.com install npm run build ``` + 编译如果报错, 一般都是网络问题, 导致的依赖包下载失败 编译完成后在src/main/resources下出现static目录 **编译完成一般是这个样子,中间没有报红的错误信息** ![编译成功](_media/img.png) ### 5.3 生成可执行jar + ```bash cd wvp-GB28181-pro mvn package ``` + ### 5.4 生成war + ```bash cd wvp-GB28181-pro mvn package -P war ``` + 编译如果报错, 一般都是网络问题, 导致的依赖包下载失败 编译完成后在target目录下出现wvp-pro-***.jar/wvp-pro-***.war。 接下来[配置服务](./_content/introduction/config.md) diff --git a/doc/_content/introduction/config.md b/doc/_content/introduction/config.md index 6e89fe06b..c73bc6252 100644 --- a/doc/_content/introduction/config.md +++ b/doc/_content/introduction/config.md @@ -1,5 +1,7 @@ + # 配置 + 对于首次测试或者新手同学,我建议在局域网测试,并且关闭服务器与客户机的防火墙测试。建议部署在linux进行测试。 ```plantuml @@ -8,24 +10,38 @@ "WVP-PRO" <-- "ZLMediaKit": Web Hook 接口 @enduml ``` + WVP-PRO通过调用ZLMediaKit的RESTful接口实现对ZLMediaKit行为的控制; ZLMediaKit通过Web Hook 接口把消息通知WVP-PRO。通过这种方式,实现了两者的互通。 对于最简单的配置,你不需要修改ZLMediaKit的任何默认配置。你只需要在WVP-PRO中配置的ZLMediaKit信息即可 + ## 1 WVP配置文件位置 + 基于spring boot的开发方式,配置文件的加载是很灵活的。默认在src/main/resources/application.yml,部分配置项是可选,你不需要全部配置在配置文件中, 完全的配置说明可以参看all-application.yml。 + ### 1.1 默认加载配置文件方式 + 使用maven打包后的target里,已经存在了配置文件,默认加载配置文件为application.yml,查看内容发现其中spring.profiles.active配置的内容,将入配置的值为dev,那么具体加载的配置文件就是application-dev.yml,如果配置的值找不到对应的配置文件,修改值为dev。 + ```shell cd wvp-GB28181-pro/target java -jar wvp-pro-*.jar ``` + ## 2 配置WVP-PRO + wvp支持多种数据库,包括Mysql,Postgresql,金仓等,配置任选一种即可。 + ### 2.1 数据库配置 -#### 2.1.1 初始化数据库 + +#### 2.1.1 初始化数据库 + 首先使用创建数据库,然后使用sql/初始化.sql初始化数据库,如果是从旧版升级上来的,使用升级sql更新。 -#### 2.1.2 Mysql数据库配置 + +#### 2.1.2 Mysql数据库配置 + 数据库名称以wvp为例 + ```yaml spring: dynamic: @@ -38,24 +54,30 @@ spring: username: root password: root123 ``` -#### 2.1.3 Postgresql数据库配置 + +#### 2.1.3 Postgresql数据库配置 + 数据库名称以wvp为例 + ```yaml spring: dynamic: - primary: master - datasource: - type: com.zaxxer.hikari.HikariDataSource - driver-class-name: org.postgresql.Driver - url: jdbc:postgresql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true - username: root - password: 12345678 + primary: master + datasource: + type: com.zaxxer.hikari.HikariDataSource + driver-class-name: org.postgresql.Driver + url: jdbc:postgresql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true + username: root + password: 12345678 pagehelper: helper-dialect: postgresql ``` -#### 2.1.4 金仓数据库配置 + +#### 2.1.4 金仓数据库配置 + 数据库名称以wvp为例 + ```yaml spring: dynamic: @@ -70,31 +92,39 @@ spring: pagehelper: helper-dialect: postgresql ``` + ### 2.2 Redis数据库配置 + 配置wvp中的redis连接信息,建议wvp自己单独使用一个db。 + ### 2.3 配置服务启动端口(可直接使用默认配置) + ```yaml # [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口 server: - port: 18080 + port: 18080 ``` + ### 2.4 配置28181相关信息(可直接使用默认配置) + ```yaml # 作为28181服务器的配置 sip: - # [可选] 28181服务监听的端口 - port: 5060 - # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007) - # 后两位为行业编码,定义参照附录D.3 - # 3701020049标识山东济南历下区 信息行业接入 - # [可选] - domain: 3402000000 - # [可选] - id: 34020000002000000001 - # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验 - password: 12345678 + # [可选] 28181服务监听的端口 + port: 5060 + # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007) + # 后两位为行业编码,定义参照附录D.3 + # 3701020049标识山东济南历下区 信息行业接入 + # [可选] + domain: 3402000000 + # [可选] + id: 34020000002000000001 + # [可选] 默认设备认证密码,后续扩展使用设备单独密码, 移除密码将不进行校验 + password: 12345678 ``` + ### 2.5 配置ZLMediaKit连接信息 + ```yaml #zlm 默认服务器配置 media: @@ -118,7 +148,9 @@ media: # [可选] 国标级联在此范围内选择端口发送媒体流, send-port-range: 40000,40300 # 端口范围 ``` + ### 2.4 策略配置 + ```yaml # [根据业务需求配置] user-settings: @@ -133,6 +165,7 @@ user-settings: # 国标点播 按需拉流, true:有人观看拉流,无人观看释放, false:拉起后不自动释放 stream-on-demand: true ``` + 更多完整的配置信息参考all-application.yml文件,需要那个配置项,复制到正在使用的配置文件中对应的文件即可。 如果配置信息无误,你可以启动zlm,再启动wvp来测试了,启动成功的话,你可以在wvp的日志下看到zlm已连接的提示。 diff --git a/doc/_content/introduction/deployment.md b/doc/_content/introduction/deployment.md index 822bb1105..755c4297a 100644 --- a/doc/_content/introduction/deployment.md +++ b/doc/_content/introduction/deployment.md @@ -1,50 +1,62 @@ # 部署 + **请仔细阅读以下内容** + 1. WVP-PRO与ZLM支持分开部署; 2. 需要开放的端口 -| 服务 | 端口 | 类型 | 必选 | -|-----|:-------------------------|-------------|-------| -| wvp | server.port | tcp | 是 | -| wvp | sip.port | udp and tcp | 是 | -| zlm | http.port | tcp | 是 | -| zlm | http.sslport | tcp | 否 | -| zlm | rtmp.port | tcp | 否 | -| zlm | rtmp.sslport | tcp | 否 | -| zlm | rtsp.port | udp and tcp | 否 | -| zlm | rtsp.sslport | udp and tcp | 否 | -| zlm | rtp_proxy.port | udp and tcp | 单端口开放 | -| zlm | rtp.port-range(在wvp中配置) | udp and tcp | 多端口开放 | + | 服务 | 端口 | 类型 | 必选 | + |-----|:-------------------------|-------------|-------| + | wvp | server.port | tcp | 是 | + | wvp | sip.port | udp and tcp | 是 | + | zlm | http.port | tcp | 是 | + | zlm | http.sslport | tcp | 否 | + | zlm | rtmp.port | tcp | 否 | + | zlm | rtmp.sslport | tcp | 否 | + | zlm | rtsp.port | udp and tcp | 否 | + | zlm | rtsp.sslport | udp and tcp | 否 | + | zlm | rtp_proxy.port | udp and tcp | 单端口开放 | + | zlm | rtp.port-range(在wvp中配置) | udp and tcp | 多端口开放 | 3. 测试环境部署建议所有服务部署在一台主机,关闭防火墙,减少因网络出现问题的可能; 4. 生产环境按需开放端口,但是建议修改默认端口,尤其是5060端口,易受到攻击; 5. zlm使用docker部署的情况,请使用host模式,或者端口映射一致,比如映射5060,应将外部端口也映射为5060端口; 6. zlm与wvp会保持高频率的通信,所以不要去将wvp与zlm分属在两个网络,比如wvp在内网,zlm却在公网的情况。 7. 启动服务,以linux为例 -**启动WVP-PRO** + **启动WVP-PRO** + ```shell nohup java -jar wvp-pro-*.jar & ``` + **war包:** 下载Tomcat后将war包放入webapps中,启动Tomcat以解压war包,停止Tomcat后,删除ROOT目录以及war包,将解压后的war包目录重命名为ROOT,将配置文件中的Server.port配置为与Tomcat端口一致 然后启动Tomcat。 **启动ZLM** + ```shell nohup ./MediaServer -d -m 3 & ``` + ### 前后端分离部署 + 前后端部署目前在最新的版本已经支持,请使用3月15日之后的版本部署 前端编译后的文件在`src/main/resources/static`中,将此目录下的文件部署。 WVP默认开启全部接口支持跨域。部署前端文件到WEB容器,并将访问的地址设置为WVP的地址即可。 **配置前端服务器** + 1. 在`src/main/resources/static/static/js/config.js`下配置服务器的地址,也就是wvp服务的地址 + ```javascript window.baseUrl = "http://xxx.com:18080" ``` + `这里的地址是需要客户电脑能访问到的,因为请求是客户端电脑发起,与代理不同` [接入设备](./_content/ability/device.md) + ### 默认账号和密码 + 部署完毕后,可以通过访问 ip加端口的方式访问 WVP ,WVP的默认登录账号和密码均为 admin。 diff --git a/doc/_content/qa/bug.md b/doc/_content/qa/bug.md index 81267ffe2..55e4cafa0 100644 --- a/doc/_content/qa/bug.md +++ b/doc/_content/qa/bug.md @@ -1,12 +1,18 @@ + # 反馈bug + 代码是在不断的完善的,不断修改会修复旧的问题也有可能引入新的问题,所以遇到BUG是很正常的一件事。所以遇到问题不要烦燥,咱们就事论事就好了。 + ## 如何反馈 + 1. 在知识星球提问。 2. 更新代码,很可能你遇到问题别人已经更早的遇到了,或者是作者自己发现了,已经解决了,所以你可以更新代码再次进行测试; 3. 可以在github提ISSUE,我几乎每天都会去看issue,你的问题我会尽快给予答复; + > 有偿支持可以给我发邮件, 648540858@qq.com ## 社群 + [![社群](../../_media/shequ.png "shequ")](https://t.zsxq.com/0d8VAD3Dm) > 收费是为了提供更好的服务,也是对作者更大的激励。加入星球的用户三天后可以私信我留下微信号,我会拉大家入群。加入三天内不满意可以直接退款,大家不需要有顾虑,来白嫖三天也不是不可以。 \ No newline at end of file diff --git a/doc/_content/qa/development.md b/doc/_content/qa/development.md index fec7b70cf..ec9df9e36 100644 --- a/doc/_content/qa/development.md +++ b/doc/_content/qa/development.md @@ -1,7 +1,11 @@ + # 参与到开发中来 + 非常欢迎有兴趣的小伙伴一起来维护这个项目 + ## 与开发有关的信息 + - 开发语言:后端java + 前端vue; - jdk版本: 1.8; - 作者自用开发ide: jetbrains intellij idea; @@ -9,7 +13,9 @@ - 后端使用Spring boot框架开发; - 项目大量使用了异步操作; - 跟代码学流程需要参考28181文档,只看代码你会很懵的; -- 必须学会[抓包](_content/skill/tcpdump.md),这是必须的 +- 必须学会[抓包](_content/skill/tcpdump.md),这是必须的 ## 提交代码 -大家可以通过fork项目的方式提交自己的代码,然后提交PR,我来合并到主线。提交代码的过程中我们需要遵循“**阿里编码规约**”,现有代码也有很多代码没有做到,但是我们在朝这个方向努力。 \ No newline at end of file + +大家可以通过fork项目的方式提交自己的代码,然后提交PR,我来合并到主线。提交代码的过程中我们需要遵循“**阿里编码规约** +”,现有代码也有很多代码没有做到,但是我们在朝这个方向努力。 \ No newline at end of file diff --git a/doc/_content/qa/play_error.md b/doc/_content/qa/play_error.md index c8e9c02bb..a474399da 100644 --- a/doc/_content/qa/play_error.md +++ b/doc/_content/qa/play_error.md @@ -1,6 +1,9 @@ + # 点播错误 + 排查点播错误你首先要清楚[点播的基本流程](_content/theory/play.md),一般的流程如下: + ```plantuml @startuml "WEB用户" -> "WVP-PRO": 1. 发起点播请求 @@ -15,11 +18,16 @@ "设备" --> "WVP-PRO": 10 200OK @enduml ``` + 针对几种常见的错误,我们来分析一下,也方便大家对号入座解决常见的问题 + ## 点播收到错误码 + 这个错误一般表现为点击"播放"按钮后很快得到一个错误。 + 1. **400错误码** -出现400错误玛时一般是这样的流程是这样的 + 出现400错误玛时一般是这样的流程是这样的 + ```plantuml @startuml "WEB用户" -> "WVP-PRO": 1. 发起点播请求 @@ -27,30 +35,39 @@ "设备" --> "WVP-PRO": 3. 400错误 @enduml ``` -此时通常是设备认为WVP发送了错误的消息给它,它认为消息不全或者错误所以直接返回400错误,此时我们需要[抓包](_content/skill/tcpdump.md)来分析是否缺失了内容,也可以直接联系对方询问为什么返回了400。 -WVP不能保证兼容所有的设备,有些实现不规范的设备可能在对接时就会出现上述问题,你可以联系作者帮忙对接。 -2. **500错误码** -500或者大于500小于600的错误码一般多是设备内部出了问题,解决方式有两个,第一种直接联系设备/平台客服寻求解决;第二种,如果你有确定可以对接这个设备的平台那么可以把对接这个平台的抓包和对接wvp的抓包同时发送给我,我来尝试解决。 +此时通常是设备认为WVP发送了错误的消息给它,它认为消息不全或者错误所以直接返回400错误,此时我们需要[抓包](_content/skill/tcpdump.md) +来分析是否缺失了内容,也可以直接联系对方询问为什么返回了400。 +WVP不能保证兼容所有的设备,有些实现不规范的设备可能在对接时就会出现上述问题,你可以联系作者帮忙对接。 + +2. **500错误码** + 500或者大于500小于600的错误码一般多是设备内部出了问题,解决方式有两个,第一种直接联系设备/平台客服寻求解决;第二种,如果你有确定可以对接这个设备的平台那么可以把对接这个平台的抓包和对接wvp的抓包同时发送给我,我来尝试解决。 ## 点播超时 + 点播超时的情况大致分为两种:点播超时和收流超时 + 1. **点播超时** -点播超时错误一般为信令的超时,比如长时间为收到对方的回复,可能出现在流程中 “3. 200OK(携带SDP消息体)”这个位置,即我们发送点播消息,但是设备没有回复,可能的原因: + 点播超时错误一般为信令的超时,比如长时间为收到对方的回复,可能出现在流程中 “3. 200OK(携带SDP消息体) + ”这个位置,即我们发送点播消息,但是设备没有回复,可能的原因: + > 1. 设备内部错误,未能回复消息 -> 2. 网络原因消息未到到达设备 +> 2. 网络原因消息未到到达设备 大部分时候是原因2,所以遇到这个错误我们首先要排查我们我的网路,如果你是公网部署,那么也可能时心跳周期太长,导致的路由NAT失效,WVP的消息无法通道原来的IP端口号发送给设备。 2. **收流超时** -收流超时可能发生在流程中的5和6,可能的原因有: -> 1. 设备发送了流但是发送到了错误的ip和端口上,而这个信息是在invite消息的sdp中指定的,就是流程2Invite(携带SDP消息体)中,而这个错误很可能来自你的配置错误,比如你设置了127.0.0.1导致设备网127.0.0.1上发流,或者是你WVP在公网,但是你给设备了一个内网ip,导致设备无法把流发送过来; + 收流超时可能发生在流程中的5和6,可能的原因有: + +> 1. 设备发送了流但是发送到了错误的ip和端口上,而这个信息是在invite消息的sdp中指定的,就是流程2Invite(携带SDP消息体) + 中,而这个错误很可能来自你的配置错误,比如你设置了127.0.0.1导致设备网127.0.0.1上发流,或者是你WVP在公网,但是你给设备了一个内网ip,导致设备无法把流发送过来; > 2. 设备内部错误未发送流; > 2. 设备发送了流,但是流无法识别,可能存在于流不规范和网络很差的情况下; > 3. 设备发送了流,zlm也收到了,但是zlm无法通过hook通知到wvp,此时原因是你可以检查zlm的配置文件中的hook配置,看看是否无法从zlm连接到wvp; > 4. 设备发送了流,但是开启SSRC校验,设备的流不够规范采用错误的ssrc,导致zlm选择丢弃; - -针对这些可能的错误原因我建议的排查顺序: + +针对这些可能的错误原因我建议的排查顺序: + - 关闭ssrc校验; - 查看zlm配置的hook是否可以连接到zlm; - 查看zlm日志是否有流注册; diff --git a/doc/_content/qa/regiser_error.md b/doc/_content/qa/regiser_error.md index d18459c54..7d4e96c17 100644 --- a/doc/_content/qa/regiser_error.md +++ b/doc/_content/qa/regiser_error.md @@ -1,8 +1,10 @@ -# 设备注册不上来的解决办法 -一般的原因有两个 -1. 信息填写错误,比如密码错误; -2. 网络不通导致注册消息无法发送到WVP; +# 设备注册不上来的解决办法 + +一般的原因有两个 + +1. 信息填写错误,比如密码错误; +2. 网络不通导致注册消息无法发送到WVP; 遇到问题首先仔细校验填写信息,例如海康可能需要勾选鉴权才可以输入密码。网络问题请自行测试。 \ No newline at end of file diff --git a/doc/_content/qa/start_error.md b/doc/_content/qa/start_error.md index 1dd533f2c..3e5749dad 100644 --- a/doc/_content/qa/start_error.md +++ b/doc/_content/qa/start_error.md @@ -1,17 +1,19 @@ + # 启动时报错 + 启动时的报错大部分时候是因为你的配置有问题,比如mysql没连接上,redis没连接上,18080/15060端口占用了,这些都会导致启动是报错,修改配置配置之后都可以解决; 下面我整理的一些常见的错误,大家可以先对号入座的简单排查下。 -> **常见错误** +> **常见错误** ![_media/img.png](_media/img.png) -**错误原因:** redis配置错误,可能原因: redis未启动/ip错误/端口错误/网络不通 +**错误原因:** redis配置错误,可能原因: redis未启动/ip错误/端口错误/网络不通 --- ![_media/img_1.png](_media/img_1.png) **错误原因:** redis配置错误,可能原因: 密码错误 --- ![_media/img_2.png](_media/img_2.png) -**错误原因:** mysql配置错误,可能原因: mysql未启动/ip错误/端口错误/网络不通 +**错误原因:** mysql配置错误,可能原因: mysql未启动/ip错误/端口错误/网络不通 --- ![_media/img_3.png](_media/img_3.png) **错误原因:** mysql配置错误,可能原因: 用户名/密码错误 diff --git a/doc/_content/skill/tcpdump.md b/doc/_content/skill/tcpdump.md index 7dd270de8..fa0ee88a0 100644 --- a/doc/_content/skill/tcpdump.md +++ b/doc/_content/skill/tcpdump.md @@ -1,15 +1,25 @@ + # 抓包 -如果说对于网络编程,有什么工具是必会的,我觉得抓包肯定是其中之一了。作为GB/T 28181调试过程中最重要的手段,我觉得如果你真对他有兴趣,或者系统遇到问题可以最快的得到解决,那么抓包你就一定要学会了。 + +如果说对于网络编程,有什么工具是必会的,我觉得抓包肯定是其中之一了。作为GB/T +28181调试过程中最重要的手段,我觉得如果你真对他有兴趣,或者系统遇到问题可以最快的得到解决,那么抓包你就一定要学会了。 ## 抓包工具的选择 + ### 1. Wireshark + 在具备图形界面的系统上,比如windows,linux发行版ubuntu,opensuse等,我一般直接使用Wireshark直接进行抓包,也方便进行内容的查看。 + ### 2. Tcpdump + 在使用命令行的系统,比如linux服务器,我一般使用Tcpdump进行抓包,无需额外安装,系统一般自带,抓包的到的文件,可以使用Wireshark打开,在图形界面下方便查看内容。 ## 工具安装 -Wireshark的安装很简单,根据提示一步步点击就好了,在linux需要解决权限的问题,如果和我一样使用图形界面的linux发行版的话,可以参看如下步骤; windows的小伙伴直接略过即可 + +Wireshark的安装很简单,根据提示一步步点击就好了,在linux需要解决权限的问题,如果和我一样使用图形界面的linux发行版的话,可以参看如下步骤; +windows的小伙伴直接略过即可 + ```shell # 1. 添加wireshark用户组 sudo groupadd wireshark @@ -20,43 +30,65 @@ sudo chmod 4755 /usr/bin/dumpcap # 4. 将需要使用的用户名加入wireshark用户组 sudo gpasswd -a $USER wireshark ``` + tcpdump一般linux都是自带,无需安装,可以这样验证;显示版本信息即是已安装 + ```shell tcpdump --version ``` + ## 开始抓包 + ### 使用Wireshark -在28181中我一般只关注sip包和rtp包,所以我一般是直接过滤sip和rtp,可以输入框输入 `sip or rtp`这样即可,如果设备来源比较多还可以加上ip和端口号的过滤`(sip or rtp )and ip.addr==192.168.1.3 and udp.port==5060` + +在28181中我一般只关注sip包和rtp包,所以我一般是直接过滤sip和rtp,可以输入框输入 `sip or rtp`这样即可,如果设备来源比较多还可以加上ip和端口号的过滤 +`(sip or rtp )and ip.addr==192.168.1.3 and udp.port==5060` 详细的过滤规则可以自行百度,我可以提供一些常用的给大家参考 ![img.png](_media/img.png) **只过滤SIP:** + ```shell sip ``` + **只获取rtp数据:** + ```shell rtp ``` + **默认方式:** + ```shell sip or rtp ``` + **过滤IP:** + ```shell sip and ip.addr==192.168.1.3 ``` + **过滤端口:** + ```shell sip and udp.port==5060 ``` -输入命令开启抓包后,此时可以进行操作,比如点播,录像回访等,操作完成回到Wireshark点击红色的停止即可,需要保存文件可以点击`文件->导出特定分组`导出过滤后的数据,也可以直接`文件->另存为`保存未过滤的数据。 + +输入命令开启抓包后,此时可以进行操作,比如点播,录像回访等,操作完成回到Wireshark点击红色的停止即可,需要保存文件可以点击 +`文件->导出特定分组`导出过滤后的数据,也可以直接`文件->另存为`保存未过滤的数据。 + ### 使用tcpdump + 对于服务器抓包,为了得到足够完整的数据,我一般会要求直接抓取网卡数据而不过滤,如下: 抓取网卡首先需要获取网卡名,在linux我一般使用`ip addr`获取网卡信息,如下所示: ![img_1.png](_media/img_1.png) + ```shell sudo tcpdump -i wlp3s0 -w demo.pcap ``` + ![img_2.png](_media/img_2.png) -命令行会停留在这个位置,此时可以进行操作,比如点播,录像回放等,操作完成回到命令行使用`Ctrl+C`结束命令行,在当前目录下得到demo.pcap,将这个文件下载到图形界面操作系统里,即可使用Wireshark查看了 +命令行会停留在这个位置,此时可以进行操作,比如点播,录像回放等,操作完成回到命令行使用`Ctrl+C` +结束命令行,在当前目录下得到demo.pcap,将这个文件下载到图形界面操作系统里,即可使用Wireshark查看了 更多的操作可以参考: [https://www.cnblogs.com/jiujuan/p/9017495.html](https://www.cnblogs.com/jiujuan/p/9017495.html) diff --git a/doc/_content/theory/broadcast_cascade.md b/doc/_content/theory/broadcast_cascade.md index e59b8c251..1770b117d 100644 --- a/doc/_content/theory/broadcast_cascade.md +++ b/doc/_content/theory/broadcast_cascade.md @@ -1,6 +1,7 @@ # 点播流程 + > 以下为WVP-PRO级联语音喊话流程。 ```plantuml @@ -31,8 +32,8 @@ @enduml ``` +## 注册流程描述如下: -## 注册流程描述如下: 1. 用户从网页或调用接口发起点播请求; 2. WVP-PRO向摄像机发送Invite消息,消息头域中携带 Subject字段,表明点播的视频源ID、发送方媒体流序列号、ZLMediaKit接收流使用的IP、端口号、 接收端媒体流序列号等参数,SDP消息体中 s字段为“Play”代表实时点播,y字段描述SSRC值,f字段描述媒体参数。 diff --git a/doc/_content/theory/channel_tree.md b/doc/_content/theory/channel_tree.md deleted file mode 100644 index c4c1b09ee..000000000 --- a/doc/_content/theory/channel_tree.md +++ /dev/null @@ -1,14 +0,0 @@ - - -# 通道的树形结构 - -国标28181规定了两种组织设备树的方式 -1. **行政区划** - 行政区划模式下主要是以行政区划作为目录节点例如:河北省->邯郸市->广平县 - ![_media/img_8.png](_media/img_8.png) -2. **业务分组** - 业务分组主要自定义的目录树的一种组织形式,但是对定义的目录的国标编号有一定的要求。 - 第一级别需要是业务分组类型,即国标编码中的11、12、13是215,例如:65010200002150000001; - 业务分组下是虚拟组织,即国标编码中的11、12、13是216,例如:65010200002160000002。 - 虚拟组织下不可是业务分组,虚拟组织下可以继续添加虚拟组织。 - ![_media/img_9.png](_media/img_9.png) diff --git a/doc/_content/theory/code.md b/doc/_content/theory/code.md index d5a892e2a..2d9a9be87 100644 --- a/doc/_content/theory/code.md +++ b/doc/_content/theory/code.md @@ -1,25 +1,29 @@ # 统一编码规则 + ## D.1 编码规则 A ->  编码规则 A 由中心编码(8位)、行业编码(2位)、类型编码(3位)和序号(7位)四个码段共20位十 ->进制数字字符构成,即系统编码 =中心编码 + 行业编码 + 类型编码 + 序号。 ->  编码规则 A 的详细说明见表 D.1。其中,中心编码指用户或设备所归属的监控中心的编码,按照监控中心所在地的行政区划代码确定, -> 当不是基层单位时空余位为0。行政区划代码采用 GB/T2260— 2007规定的行政区划代码表示。行业编码是指用户或设备所归属的行业,行业编码对照表见 D.3。 -> 类型编码指定了设备或用户的具体类型,其中的前端设备包含公安系统和非公安系统的前端设备,终端用 户包含公安系统和非公安系统的终端用户。 + +>   编码规则 A 由中心编码(8位)、行业编码(2位)、类型编码(3位)和序号(7位)四个码段共20位十 +> 进制数字字符构成,即系统编码 =中心编码 + 行业编码 + 类型编码 + 序号。 +>   编码规则 A 的详细说明见表 D.1。其中,中心编码指用户或设备所归属的监控中心的编码,按照监控中心所在地的行政区划代码确定, +> 当不是基层单位时空余位为0。行政区划代码采用 GB/T2260— 2007规定的行政区划代码表示。行业编码是指用户或设备所归属的行业,行业编码对照表见 +> D.3。 +> 类型编码指定了设备或用户的具体类型,其中的前端设备包含公安系统和非公安系统的前端设备,终端用 +> 户包含公安系统和非公安系统的终端用户。 ![img_7.png](_media/img_7.png) ![img_1.png](_media/img_1.png) -![img_2.png](_media/img_2.png) - +![img_2.png](_media/img_2.png) ## D.2 编码规则 B ->  编码规则 B由中心编码(8位)、行业编码(2位)、序号(4位)和类型编码(2位)四个码段构成,即系 ->统编码 =中心编码 + 行业编码 +序号+类型编码。编码规则 B的详细说明见表 D.2。 + +>   编码规则 B由中心编码(8位)、行业编码(2位)、序号(4位)和类型编码(2位)四个码段构成,即系 +> 统编码 =中心编码 + 行业编码 +序号+类型编码。编码规则 B的详细说明见表 D.2。 ![img_3.png](_media/img_3.png) ![img_4.png](_media/img_4.png) - ## D.3 行业编码对照表 ->  行业编码对照表见表 D.3。 + +>   行业编码对照表见表 D.3。 ![img_5.png](_media/img_5.png) ![img_6.png](_media/img_6.png) \ No newline at end of file diff --git a/doc/_content/theory/play.md b/doc/_content/theory/play.md index fbfdcc661..5fb75c0c7 100644 --- a/doc/_content/theory/play.md +++ b/doc/_content/theory/play.md @@ -1,6 +1,7 @@ # 点播流程 + > 以下为WVP-PRO点播流程。点播成功前的任何一个环节出现问题都可能出现点播超时,这也是排查点播超时的依据。 ```plantuml @@ -18,11 +19,11 @@ @enduml ``` +## 注册流程描述如下: -## 注册流程描述如下: -1. 用户从网页或调用接口发起点播请求; +1. 用户从网页或调用接口发起点播请求; 2. WVP-PRO向摄像机发送Invite消息,消息头域中携带 Subject字段,表明点播的视频源ID、发送方媒体流序列号、ZLMediaKit接收流使用的IP、端口号、 - 接收端媒体流序列号等参数,SDP消息体中 s字段为“Play”代表实时点播,y字段描述SSRC值,f字段描述媒体参数。 + 接收端媒体流序列号等参数,SDP消息体中 s字段为“Play”代表实时点播,y字段描述SSRC值,f字段描述媒体参数。 3. 摄像机向WVP-PRO回复200OK,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等内容。 4. WVP-PRO向设备回复Ack, 会话建立成功。 5. 设备向ZLMediaKit发送实时流。 diff --git a/doc/_content/theory/register.md b/doc/_content/theory/register.md index fad9589fe..2bc839a32 100644 --- a/doc/_content/theory/register.md +++ b/doc/_content/theory/register.md @@ -1,6 +1,7 @@ # 注册流程 + WVP-PRO目前仅支持国标中描述的基本注册流程,也是最常用的, > 基本注册即采用IETFRFC3261规定的基于数字摘要的挑战应答式安全技术进行注册. @@ -13,9 +14,8 @@ WVP-PRO目前仅支持国标中描述的基本注册流程,也是最常用的 @enduml ``` - -> 注册流程描述如下: -> 1. 摄像机向WVP-PRO服务器发送 Register请求; +> 注册流程描述如下: +> 1. 摄像机向WVP-PRO服务器发送 Register请求; > 2. WVP-PRO向摄像机发送响应401,并在响应的消息头 WWW_Authenticate字段中给出适合摄像机的认证体制和参数; > 3. 摄像机重新向WVP-PRO发送 Register请求,在请求的 Authorization字段给出信任书, 包含认证信息; > 4. WVP-PRO对请求进行验证,如果检查出 摄像机身份合法,向摄像机发送成功响应 200OK,如果身份不合法则发送拒绝服务应答。 diff --git a/doc/_coverpage.md b/doc/_coverpage.md index eb3524f9a..4f7695885 100644 --- a/doc/_coverpage.md +++ b/doc/_coverpage.md @@ -5,8 +5,8 @@ > 开箱即用的28181协议视频平台。 -- 基于GB/T28181-2016标准信令实现,兼容GB/T28181-2011。 -- 自带完整前端页面,开箱即用。 +- 基于GB/T28181-2016标准信令实现,兼容GB/T28181-2011。 +- 自带完整前端页面,开箱即用。 - 完全开源,且使用MIT许可协议。可以在保留版权信息的基础上商用。 [GitHub](https://github.com/648540858/wvp-GB28181-pro) diff --git a/doc/_sidebar.md b/doc/_sidebar.md index 77b38d36e..d1f500c4b 100644 --- a/doc/_sidebar.md +++ b/doc/_sidebar.md @@ -1,34 +1,32 @@ * **编译与部署** - * [编译](_content/introduction/compile.md) - * [配置](_content/introduction/config.md) - * [部署](_content/introduction/deployment.md) + * [编译](_content/introduction/compile.md) + * [配置](_content/introduction/config.md) + * [部署](_content/introduction/deployment.md) * **功能与使用** - * [接入设备](_content/ability/device.md) - * [国标设备](_content/ability/device_use.md) - * [推流列表](_content/ability/push.md) - * [拉流代理](_content/ability/proxy.md) - * [通道管理](_content/ability/channel.md) - * [国标级联](_content/ability/cascade2.md) - * [节点管理](_content/ability/node_manger.md) - * [云端录像](_content/ability/cloud_record.md) - * [不间断录像](_content/ability/continuous_recording.md) - * [语音对讲](_content/ability/continuous_broadcast.md) + * [接入设备](_content/ability/device.md) + * [国标设备](_content/ability/device_use.md) + * [推流列表](_content/ability/push.md) + * [拉流代理](_content/ability/proxy.md) + * [云端录像](_content/ability/cloud_record.md) + * [节点管理](_content/ability/node_manger.md) + * [通道管理](_content/ability/channel.md) + * [国标级联](_content/ability/cascade2.md) * **流程与原理** - * [统一编码规则](_content/theory/code.md) - * [树形结构](_content/theory/channel_tree.md) - * [注册流程](_content/theory/register.md) - * [点播流程](_content/theory/play.md) - * [级联语音喊话流程](_content/theory/broadcast_cascade.md) + * [统一编码规则](_content/theory/code.md) + * [注册流程](_content/theory/register.md) + * [点播流程](_content/theory/play.md) + * [级联语音喊话流程](_content/theory/broadcast_cascade.md) + * [语音对讲](_content/ability/continuous_broadcast.md) * **必备技巧** - * [抓包](_content/skill/tcpdump.md) + * [抓包](_content/skill/tcpdump.md) * **常见问答** - - [如何反馈BUG](_content/qa/bug.md) - - [如何参与开发](_content/qa/development.md) - - [启动报错的解决办法](_content/qa/start_error.md) - - [设备注册不上来的解决办法](_content/qa/regiser_error.md) - - [点播超时/报错的解决办法](_content/qa/play_error.md) + - [如何反馈BUG](_content/qa/bug.md) + - [如何参与开发](_content/qa/development.md) + - [启动报错的解决办法](_content/qa/start_error.md) + - [设备注册不上来的解决办法](_content/qa/regiser_error.md) + - [点播超时/报错的解决办法](_content/qa/play_error.md) * [**免责声明**](_content/disclaimers.md) * [**关于本文档**](_content/about_doc.md) diff --git a/doc/index.html b/doc/index.html index 580603da4..a8c1d7dfd 100644 --- a/doc/index.html +++ b/doc/index.html @@ -1,59 +1,59 @@ - - WVP-PRO文档 - - - - - - - + + WVP-PRO文档 + + + + + + + -
加载中
- - - - - - - + + + + + + + - + diff --git a/pom.xml b/pom.xml index 0613a9e8d..7d4b23a38 100644 --- a/pom.xml +++ b/pom.xml @@ -133,6 +133,14 @@ spring-boot-starter-jdbc + + + com.alibaba + druid-spring-boot-starter + 1.2.23 + + + com.mysql diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/NotifyCatalogChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/NotifyCatalogChannel.java new file mode 100644 index 000000000..8961677d9 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/NotifyCatalogChannel.java @@ -0,0 +1,38 @@ +package com.genersoft.iot.vmp.gb28181.bean; + + +public class NotifyCatalogChannel { + + private Type type; + + private DeviceChannel channel; + + + public enum Type { + ADD, DELETE, UPDATE, STATUS_CHANGED + } + + + public static NotifyCatalogChannel getInstance(Type type, DeviceChannel channel) { + NotifyCatalogChannel notifyCatalogChannel = new NotifyCatalogChannel(); + notifyCatalogChannel.setType(type); + notifyCatalogChannel.setChannel(channel); + return notifyCatalogChannel; + } + + public Type getType() { + return type; + } + + public void setType(Type type) { + this.type = type; + } + + public DeviceChannel getChannel() { + return channel; + } + + public void setChannel(DeviceChannel channel) { + this.channel = channel; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java index 5237a0296..e5c65c416 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/dao/DeviceChannelMapper.java @@ -18,16 +18,21 @@ import java.util.List; @Repository public interface DeviceChannelMapper { - @Insert("INSERT INTO wvp_device_channel (device_id, device_db_id, name, manufacturer, model, owner, civil_code, block, " + + + @Insert("") @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id") int add(DeviceChannel channel); @@ -543,4 +548,57 @@ public interface DeviceChannelMapper { " " + "") void updateStreamGPS(List gpsMsgInfoList); + + @Update("UPDATE wvp_device_channel SET status=#{status} WHERE device_id=#{deviceId} AND channel_id=#{channelId}") + void updateStatus(DeviceChannel channel); + + + @Update({""}) + void updateChannelForNotify(DeviceChannel channel); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java index 8a4b7d899..8b5a8abbd 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IDeviceChannelService.java @@ -111,4 +111,12 @@ public interface IDeviceChannelService { DeviceChannel getBroadcastChannel(int deviceDbId); void changeAudio(Integer channelId, Boolean audio); + + void updateChannelStatus(DeviceChannel channel); + + void addChannel(DeviceChannel channel); + + void updateChannelForNotify(DeviceChannel channel); + + DeviceChannel getOneForSource(int deviceDbId, String channelId); } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceChannelServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceChannelServiceImpl.java index f63e43225..b1b861ac0 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceChannelServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/DeviceChannelServiceImpl.java @@ -267,6 +267,11 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService { return channelMapper.getOneByDeviceIdForSource(device.getId(), channelId); } + @Override + public DeviceChannel getOneForSource(int deviceDbId, String channelId) { + return channelMapper.getOneByDeviceIdForSource(deviceDbId, channelId); + } + @Override @Transactional public synchronized void batchUpdateChannelForNotify(List channels) { @@ -654,4 +659,19 @@ public class DeviceChannelServiceImpl implements IDeviceChannelService { public void changeAudio(Integer channelId, Boolean audio) { channelMapper.changeAudio(channelId, audio); } + + @Override + public void updateChannelStatus(DeviceChannel channel) { + channelMapper.updateStatus(channel); + } + + @Override + public void addChannel(DeviceChannel channel) { + channelMapper.add(channel); + } + + @Override + public void updateChannelForNotify(DeviceChannel channel) { + channelMapper.updateChannelForNotify(channel); + } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestForCatalogProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestForCatalogProcessor.java index 9e9cc35ee..00f7fd25d 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestForCatalogProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestForCatalogProcessor.java @@ -1,15 +1,12 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl; import com.genersoft.iot.vmp.conf.UserSetting; -import com.genersoft.iot.vmp.gb28181.bean.CatalogChannelEvent; -import com.genersoft.iot.vmp.gb28181.bean.Device; -import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; -import com.genersoft.iot.vmp.gb28181.bean.HandlerCatchData; +import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.event.EventPublisher; import com.genersoft.iot.vmp.gb28181.event.subscribe.catalog.CatalogEvent; +import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.utils.SipUtils; -import com.genersoft.iot.vmp.gb28181.service.IDeviceChannelService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.utils.DateUtil; import lombok.extern.slf4j.Slf4j; @@ -27,10 +24,7 @@ import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Iterator; import java.util.List; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.CopyOnWriteArrayList; /** * SIP命令类型: NOTIFY请求中的目录请求处理 @@ -39,11 +33,7 @@ import java.util.concurrent.CopyOnWriteArrayList; @Component public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent { - private final List updateChannelForStatusChange = new CopyOnWriteArrayList<>(); - private final Map updateChannelMap = new ConcurrentHashMap<>(); - - private final Map addChannelMap = new ConcurrentHashMap<>(); - private final List deleteChannelList = new CopyOnWriteArrayList<>(); + private final ConcurrentLinkedQueue channelList = new ConcurrentLinkedQueue<>(); private ConcurrentLinkedQueue taskQueue = new ConcurrentLinkedQueue<>(); @@ -64,7 +54,6 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent // log.warn("[notify-目录订阅] 待处理消息数量: {}", taskQueue.size() ); // } - @Transactional public void process(RequestEvent evt) { if (taskQueue.size() >= userSetting.getMaxNotifyCountQueue()) { log.error("[notify-目录订阅] 待处理消息队列已满 {},返回486 BUSY_HERE,消息不做处理", userSetting.getMaxNotifyCountQueue()); @@ -79,8 +68,12 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent return; } List handlerCatchDataList = new ArrayList<>(); - while (!taskQueue.isEmpty()) { - handlerCatchDataList.add(taskQueue.poll()); + int size = taskQueue.size(); + for (int i = 0; i < size; i++) { + HandlerCatchData poll = taskQueue.poll(); + if (poll != null) { + handlerCatchDataList.add(poll); + } } if (handlerCatchDataList.isEmpty()) { return; @@ -91,23 +84,23 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent } RequestEvent evt = take.getEvt(); try { - long start = System.currentTimeMillis(); FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); String deviceId = SipUtils.getUserIdFromFromHeader(fromHeader); Device device = redisCatchStorage.getDevice(deviceId); if (device == null || !device.isOnLine()) { log.warn("[收到目录订阅]:{}, 但是设备已经离线", (device != null ? device.getDeviceId() : "")); - return; + continue; } Element rootElement = getRootElement(evt, device.getCharset()); if (rootElement == null) { log.warn("[ 收到目录订阅 ] content cannot be null, {}", evt.getRequest()); - return; + continue; } Element deviceListElement = rootElement.element("DeviceList"); if (deviceListElement == null) { - return; + log.warn("[ 收到目录订阅 ] content cannot be null, {}", evt.getRequest()); + continue; } Iterator deviceListIterator = deviceListElement.elementIterator(); if (deviceListIterator != null) { @@ -139,7 +132,7 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent // 上线 log.info("[收到通道上线通知] 来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); channel.setStatus("ON"); - updateChannelForStatusChange.add(channel); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.STATUS_CHANGED, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendDeviceOrChannelStatus(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), true); @@ -152,7 +145,7 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent log.info("[收到通道离线通知] 但是平台已配置拒绝此消息,来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); } else { channel.setStatus("OFF"); - updateChannelForStatusChange.add(channel); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.STATUS_CHANGED, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendDeviceOrChannelStatus(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), false); @@ -166,7 +159,7 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent log.info("[收到通道视频丢失通知] 但是平台已配置拒绝此消息,来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); } else { channel.setStatus("OFF"); - updateChannelForStatusChange.add(channel); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.STATUS_CHANGED, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendDeviceOrChannelStatus(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), false); @@ -180,7 +173,7 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent log.info("[收到通道视频故障通知] 但是平台已配置拒绝此消息,来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); } else { channel.setStatus("OFF"); - updateChannelForStatusChange.add(channel); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.STATUS_CHANGED, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendDeviceOrChannelStatus(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), false); @@ -191,18 +184,17 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent // 增加 log.info("[收到增加通道通知] 来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); // 判断此通道是否存在 - DeviceChannel deviceChannel = deviceChannelService.getOne(deviceId, catalogChannelEvent.getChannel().getDeviceId()); + DeviceChannel deviceChannel = deviceChannelService.getOneForSource(device.getId(), catalogChannelEvent.getChannel().getDeviceId()); if (deviceChannel != null) { log.info("[增加通道] 已存在,不发送通知只更新,设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); channel.setId(deviceChannel.getId()); channel.setHasAudio(deviceChannel.isHasAudio()); channel.setUpdateTime(DateUtil.getNow()); - updateChannelMap.put(catalogChannelEvent.getChannel().getDeviceId(), channel); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.UPDATE, channel)); } else { catalogChannelEvent.getChannel().setUpdateTime(DateUtil.getNow()); catalogChannelEvent.getChannel().setCreateTime(DateUtil.getNow()); - - addChannelMap.put(catalogChannelEvent.getChannel().getDeviceId(), catalogChannelEvent.getChannel()); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.ADD, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendChannelAddOrDelete(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), true); @@ -213,7 +205,7 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent case CatalogEvent.DEL: // 删除 log.info("[收到删除通道通知] 来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); - deleteChannelList.add(catalogChannelEvent.getChannel()); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.DELETE, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendChannelAddOrDelete(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), false); @@ -223,17 +215,17 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent // 更新 log.info("[收到更新通道通知] 来自设备: {}, 通道 {}", device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId()); // 判断此通道是否存在 - DeviceChannel deviceChannelForUpdate = deviceChannelService.getOne(deviceId, catalogChannelEvent.getChannel().getDeviceId()); + DeviceChannel deviceChannelForUpdate = deviceChannelService.getOneForSource(device.getId(), catalogChannelEvent.getChannel().getDeviceId()); if (deviceChannelForUpdate != null) { channel.setId(deviceChannelForUpdate.getId()); channel.setHasAudio(deviceChannelForUpdate.isHasAudio()); channel.setUpdateTime(DateUtil.getNow()); channel.setUpdateTime(DateUtil.getNow()); - updateChannelMap.put(catalogChannelEvent.getChannel().getDeviceId(), channel); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.UPDATE, channel)); } else { catalogChannelEvent.getChannel().setCreateTime(DateUtil.getNow()); catalogChannelEvent.getChannel().setUpdateTime(DateUtil.getNow()); - addChannelMap.put(catalogChannelEvent.getChannel().getDeviceId(), catalogChannelEvent.getChannel()); + channelList.add(NotifyCatalogChannel.getInstance(NotifyCatalogChannel.Type.ADD, channel)); if (userSetting.getDeviceStatusNotify()) { // 发送redis消息 redisCatchStorage.sendChannelAddOrDelete(device.getDeviceId(), catalogChannelEvent.getChannel().getDeviceId(), true); @@ -253,66 +245,39 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent log.error("未处理的异常 ", e); } } - taskQueue.clear(); - if (!updateChannelMap.keySet().isEmpty() - || !addChannelMap.keySet().isEmpty() - || !updateChannelForStatusChange.isEmpty() - || !deleteChannelList.isEmpty()) { + if (!channelList.isEmpty()) { executeSave(); } } - public void executeSave(){ - try { - executeSaveForAdd(); - } catch (Exception e) { - log.error("[存储收到的增加通道] 异常: ", e ); + @Transactional + public void executeSave() { + int size = channelList.size(); + List channelListForSave = new ArrayList<>(); + for (int i = 0; i < size; i++) { + channelListForSave.add(channelList.poll()); } - try { - executeSaveForStatus(); - } catch (Exception e) { - log.error("[存储收到的通道状态变化] 异常: ", e ); - } - try { - executeSaveForUpdate(); - } catch (Exception e) { - log.error("[存储收到的更新通道] 异常: ", e ); - } - try { - executeSaveForDelete(); - } catch (Exception e) { - log.error("[存储收到的删除通道] 异常: ", e ); - } - } - private void executeSaveForUpdate(){ - if (!updateChannelMap.values().isEmpty()) { - log.info("[存储收到的更新通道], 数量: {}", updateChannelMap.size()); - ArrayList deviceChannels = new ArrayList<>(updateChannelMap.values()); - deviceChannelService.batchUpdateChannelForNotify(deviceChannels); - updateChannelMap.clear(); - } - } - - private void executeSaveForAdd(){ - if (!addChannelMap.values().isEmpty()) { - ArrayList deviceChannels = new ArrayList<>(addChannelMap.values()); - addChannelMap.clear(); - deviceChannelService.batchAddChannel(deviceChannels); - } - } - - private void executeSaveForDelete(){ - if (!deleteChannelList.isEmpty()) { - deviceChannelService.deleteChannelsForNotify(deleteChannelList); - deleteChannelList.clear(); - } - } - - private void executeSaveForStatus(){ - if (!updateChannelForStatusChange.isEmpty()) { - deviceChannelService.updateChannelsStatus(updateChannelForStatusChange); - updateChannelForStatusChange.clear(); + for (NotifyCatalogChannel notifyCatalogChannel : channelListForSave) { + try { + switch (notifyCatalogChannel.getType()) { + case STATUS_CHANGED: + deviceChannelService.updateChannelStatus(notifyCatalogChannel.getChannel()); + break; + case ADD: + deviceChannelService.addChannel(notifyCatalogChannel.getChannel()); + break; + case UPDATE: + deviceChannelService.updateChannelForNotify(notifyCatalogChannel.getChannel()); + break; + case DELETE: + deviceChannelService.delete(notifyCatalogChannel.getChannel()); + break; + } + }catch (Exception e) { + log.error("[存储收到的通道]类型:{},编号:{}", notifyCatalogChannel.getType(), + notifyCatalogChannel.getChannel().getDeviceId(), e); + } } } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/TestController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/TestController.java index bfac5c731..ec4f126b3 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/TestController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/TestController.java @@ -25,4 +25,16 @@ public class TestController { public List all(){ return subscribe.getAll(); } + +// @Bean +// public ServletRegistrationBean druidStatViewServlet() { +// ServletRegistrationBean registrationBean = new ServletRegistrationBean<>(new StatViewServlet(), "/druid/*"); +// registrationBean.addInitParameter("allow", "127.0.0.1");// IP白名单 (没有配置或者为空,则允许所有访问) +// registrationBean.addInitParameter("deny", "");// IP黑名单 (存在共同时,deny优先于allow) +// registrationBean.addInitParameter("loginUsername", "admin"); +// registrationBean.addInitParameter("loginPassword", "admin"); +// registrationBean.addInitParameter("resetEnable", "false"); +// return registrationBean; +// } + }