HOME\tianlin01 hace 11 meses
padre
commit
323e7642ab
Se han modificado 100 ficheros con 1418 adiciones y 0 borrados
  1. 21 0
      elevator-media-gb/LICENSE
  2. 139 0
      elevator-media-gb/README.md
  3. 91 0
      elevator-media-gb/bootstrap.sh
  4. 106 0
      elevator-media-gb/doc/README.md
  5. BIN
      elevator-media-gb/doc/_content/ability/_media/cascade1.png
  6. BIN
      elevator-media-gb/doc/_content/ability/_media/cascade2.png
  7. BIN
      elevator-media-gb/doc/_content/ability/_media/cascade3.png
  8. BIN
      elevator-media-gb/doc/_content/ability/_media/cascade4.png
  9. BIN
      elevator-media-gb/doc/_content/ability/_media/img.png
  10. BIN
      elevator-media-gb/doc/_content/ability/_media/img_1.png
  11. BIN
      elevator-media-gb/doc/_content/ability/_media/img_10.png
  12. BIN
      elevator-media-gb/doc/_content/ability/_media/img_11.png
  13. BIN
      elevator-media-gb/doc/_content/ability/_media/img_12.png
  14. BIN
      elevator-media-gb/doc/_content/ability/_media/img_13.png
  15. BIN
      elevator-media-gb/doc/_content/ability/_media/img_14.png
  16. BIN
      elevator-media-gb/doc/_content/ability/_media/img_15.png
  17. BIN
      elevator-media-gb/doc/_content/ability/_media/img_16.png
  18. BIN
      elevator-media-gb/doc/_content/ability/_media/img_17.png
  19. BIN
      elevator-media-gb/doc/_content/ability/_media/img_18.png
  20. BIN
      elevator-media-gb/doc/_content/ability/_media/img_2.png
  21. BIN
      elevator-media-gb/doc/_content/ability/_media/img_3.png
  22. BIN
      elevator-media-gb/doc/_content/ability/_media/img_4.png
  23. BIN
      elevator-media-gb/doc/_content/ability/_media/img_5.png
  24. BIN
      elevator-media-gb/doc/_content/ability/_media/img_6.png
  25. BIN
      elevator-media-gb/doc/_content/ability/_media/img_7.png
  26. BIN
      elevator-media-gb/doc/_content/ability/_media/img_8.png
  27. BIN
      elevator-media-gb/doc/_content/ability/_media/img_9.png
  28. 2 0
      elevator-media-gb/doc/_content/ability/auto_play.md
  29. 34 0
      elevator-media-gb/doc/_content/ability/cascade.md
  30. 18 0
      elevator-media-gb/doc/_content/ability/cascade2.md
  31. 8 0
      elevator-media-gb/doc/_content/ability/cloud_record.md
  32. 76 0
      elevator-media-gb/doc/_content/ability/continuous_broadcast.md
  33. 14 0
      elevator-media-gb/doc/_content/ability/continuous_recording.md
  34. 36 0
      elevator-media-gb/doc/_content/ability/device.md
  35. 35 0
      elevator-media-gb/doc/_content/ability/device_use.md
  36. 37 0
      elevator-media-gb/doc/_content/ability/gis.md
  37. 9 0
      elevator-media-gb/doc/_content/ability/node_manger.md
  38. 2 0
      elevator-media-gb/doc/_content/ability/online_doc.md
  39. 24 0
      elevator-media-gb/doc/_content/ability/proxy.md
  40. 41 0
      elevator-media-gb/doc/_content/ability/push.md
  41. 2 0
      elevator-media-gb/doc/_content/ability/user.md
  42. 5 0
      elevator-media-gb/doc/_content/about_doc.md
  43. 27 0
      elevator-media-gb/doc/_content/broadcast.md
  44. 2 0
      elevator-media-gb/doc/_content/disclaimers.md
  45. BIN
      elevator-media-gb/doc/_content/introduction/_media/img.png
  46. BIN
      elevator-media-gb/doc/_content/introduction/_media/img_1.png
  47. BIN
      elevator-media-gb/doc/_content/introduction/_media/img_2.png
  48. 99 0
      elevator-media-gb/doc/_content/introduction/compile.md
  49. 163 0
      elevator-media-gb/doc/_content/introduction/config.md
  50. 57 0
      elevator-media-gb/doc/_content/introduction/deployment.md
  51. BIN
      elevator-media-gb/doc/_content/qa/_media/img.png
  52. BIN
      elevator-media-gb/doc/_content/qa/_media/img_1.png
  53. BIN
      elevator-media-gb/doc/_content/qa/_media/img_2.png
  54. BIN
      elevator-media-gb/doc/_content/qa/_media/img_3.png
  55. BIN
      elevator-media-gb/doc/_content/qa/_media/img_4.png
  56. BIN
      elevator-media-gb/doc/_content/qa/_media/img_5.png
  57. 12 0
      elevator-media-gb/doc/_content/qa/bug.md
  58. 15 0
      elevator-media-gb/doc/_content/qa/development.md
  59. BIN
      elevator-media-gb/doc/_content/qa/img.png
  60. 57 0
      elevator-media-gb/doc/_content/qa/play_error.md
  61. 8 0
      elevator-media-gb/doc/_content/qa/regiser_error.md
  62. 24 0
      elevator-media-gb/doc/_content/qa/start_error.md
  63. BIN
      elevator-media-gb/doc/_content/skill/_media/img.png
  64. BIN
      elevator-media-gb/doc/_content/skill/_media/img_1.png
  65. BIN
      elevator-media-gb/doc/_content/skill/_media/img_2.png
  66. 62 0
      elevator-media-gb/doc/_content/skill/tcpdump.md
  67. BIN
      elevator-media-gb/doc/_content/theory/_media/img.png
  68. BIN
      elevator-media-gb/doc/_content/theory/_media/img_1.png
  69. BIN
      elevator-media-gb/doc/_content/theory/_media/img_2.png
  70. BIN
      elevator-media-gb/doc/_content/theory/_media/img_3.png
  71. BIN
      elevator-media-gb/doc/_content/theory/_media/img_4.png
  72. BIN
      elevator-media-gb/doc/_content/theory/_media/img_5.png
  73. BIN
      elevator-media-gb/doc/_content/theory/_media/img_6.png
  74. BIN
      elevator-media-gb/doc/_content/theory/_media/img_7.png
  75. BIN
      elevator-media-gb/doc/_content/theory/_media/img_8.png
  76. BIN
      elevator-media-gb/doc/_content/theory/_media/img_9.png
  77. 46 0
      elevator-media-gb/doc/_content/theory/broadcast_cascade.md
  78. 14 0
      elevator-media-gb/doc/_content/theory/channel_tree.md
  79. 25 0
      elevator-media-gb/doc/_content/theory/code.md
  80. BIN
      elevator-media-gb/doc/_content/theory/img.png
  81. 33 0
      elevator-media-gb/doc/_content/theory/play.md
  82. 21 0
      elevator-media-gb/doc/_content/theory/register.md
  83. 17 0
      elevator-media-gb/doc/_coverpage.md
  84. BIN
      elevator-media-gb/doc/_media/1372762149.jpg
  85. BIN
      elevator-media-gb/doc/_media/2.png
  86. BIN
      elevator-media-gb/doc/_media/3-1.png
  87. BIN
      elevator-media-gb/doc/_media/3-2.png
  88. BIN
      elevator-media-gb/doc/_media/3-3.png
  89. BIN
      elevator-media-gb/doc/_media/3.png
  90. BIN
      elevator-media-gb/doc/_media/903207146.jpg
  91. BIN
      elevator-media-gb/doc/_media/favicon.ico
  92. BIN
      elevator-media-gb/doc/_media/index.png
  93. BIN
      elevator-media-gb/doc/_media/logo-mini.png
  94. BIN
      elevator-media-gb/doc/_media/logo.jpg
  95. BIN
      elevator-media-gb/doc/_media/logo.png
  96. BIN
      elevator-media-gb/doc/_media/shequ.png
  97. BIN
      elevator-media-gb/doc/_media/weixin.jpg
  98. BIN
      elevator-media-gb/doc/_media/zhifubao.jpg
  99. 1 0
      elevator-media-gb/doc/_navbar.md
  100. 35 0
      elevator-media-gb/doc/_sidebar.md

+ 21 - 0
elevator-media-gb/LICENSE

@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 swwhaha
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.

+ 139 - 0
elevator-media-gb/README.md

@@ -0,0 +1,139 @@
+![logo](doc/_media/logo.png)
+# 开箱即用的28181协议视频
+[![Build Status](https://travis-ci.org/xia-chu/ZLMediaKit.svg?branch=master)](https://travis-ci.org/xia-chu/ZLMediaKit)
+[![license](http://img.shields.io/badge/license-MIT-green.svg)](https://github.com/xia-chu/ZLMediaKit/blob/master/LICENSE)
+[![JAVA](https://img.shields.io/badge/language-java-red.svg)](https://en.cppreference.com/)
+[![platform](https://img.shields.io/badge/platform-linux%20|%20macos%20|%20windows-blue.svg)](https://github.com/xia-chu/ZLMediaKit)
+[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-yellow.svg)](https://github.com/xia-chu/ZLMediaKit/pulls)
+
+
+WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的开箱即用的网络视频平台,负责实现核心信令与设备管理后台部分,支持NAT穿透,支持海康、大华、宇视等品牌的IPC、NVR接入。支持国标级联,支持将不带国标功能的摄像机/直播流/直播推流转发到其他国标平台。   
+
+流媒体服务基于@夏楚 ZLMediaKit [https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)   
+播放器使用@dexter jessibuca [https://github.com/langhuihui/jessibuca/tree/v3](https://github.com/langhuihui/jessibuca/tree/v3)  
+前端页面基于@Kyle MediaServerUI [https://gitee.com/kkkkk5G/MediaServerUI](https://gitee.com/kkkkk5G/MediaServerUI) 进行修改.  
+
+# 应用场景:
+支持浏览器无插件播放摄像头视频。
+支持国标设备(摄像机、平台、NVR等)设备接入
+支持非国标(onvif, rtsp, rtmp,直播设备等等)设备接入,充分利旧。 
+支持国标级联。多平台级联。跨网视频预览。
+支持跨网网闸平台互联。
+
+
+# 文档
+wvp使用文档 [https://doc.wvp-pro.cn](https://doc.wvp-pro.cn)  
+ZLM使用文档 [https://github.com/ZLMediaKit/ZLMediaKit](https://github.com/ZLMediaKit/ZLMediaKit)
+
+# 付费社群
+[![社群](doc/_media/shequ.png "shequ")](https://t.zsxq.com/0d8VAD3Dm)
+> 收费是为了提供更好的服务,也是对作者更大的激励。加入星球的用户三天后可以私信我留下微信号,我会拉大家入群。加入三天内不满意可以直接退款,大家不需要有顾虑,来白嫖三天也不是不可以。
+
+# gitee同步仓库
+https://gitee.com/pan648540858/wvp-GB28181-pro.git
+
+# 截图
+![index](doc/_media/index.png "index.png")
+![2](doc/_media/2.png "2.png")
+![3](doc/_media/3.png "3.png")
+![3-1](doc/_media/3-1.png "3-1.png")
+![3-2](doc/_media/3-2.png "3-2.png")
+![3-3](doc/_media/3-3.png "3-3.png")
+![build_1](https://images.gitee.com/uploads/images/2022/0304/101919_ee5b8c79_1018729.png "2022-03-04_10-13.png")
+
+# 功能特性 
+- [X] 集成web界面
+- [X] 兼容性良好
+- [X] 支持电子地图,支持接入WGS84和GCJ02两种坐标系,并且自动转化为合适的坐标系进行展示和分发
+- [X] 接入设备
+  - [X] 视频预览
+  - [X] 支持主码流子码流切换
+  - [X] 无限制接入路数,能接入多少设备只取决于你的服务器性能
+  - [X] 云台控制,控制设备转向,拉近,拉远
+  - [X] 预置位查询,使用与设置
+  - [X] 查询NVR/IPC上的录像与播放,支持指定时间播放与下载
+  - [X] 无人观看自动断流,节省流量
+  - [X] 视频设备信息同步
+  - [X] 离在线监控
+  - [X] 支持直接输出RTSP、RTMP、HTTP-FLV、Websocket-FLV、HLS多种协议流地址
+  - [X] 支持通过一个流地址直接观看摄像头,无需登录以及调用任何接口
+  - [X] 支持UDP和TCP两种国标信令传输模式
+  - [X] 支持UDP和TCP两种国标流传输模式
+  - [X] 支持检索,通道筛选
+  - [X] 支持通道子目录查询
+  - [X] 支持过滤音频,防止杂音影响观看
+  - [X] 支持国标网络校时
+  - [X] 支持播放H264和H265
+  - [X] 报警信息处理,支持向前端推送报警信息
+  - [X] 语音对讲
+  - [X] 支持订阅与通知方法
+    - [X] 移动位置订阅
+    - [X] 移动位置通知处理
+    - [X] 报警事件订阅
+    - [X] 报警事件通知处理
+    - [X] 设备目录订阅
+    - [X] 设备目录通知处理
+  -  [X] 移动位置查询和显示
+  - [X] 支持手动添加设备和给设备设置单独的密码
+-  [X] 支持平台对接接入
+-  [X] 支持国标级联
+  - [X] 国标通道向上级联
+    - [X] WEB添加上级平台
+    - [X] 注册
+    - [X] 心跳保活
+    - [X] 通道选择
+    - [X] 通道推送
+    - [X] 点播
+    - [X] 云台控制
+    - [X] 平台状态查询
+    - [X] 平台信息查询
+    - [X] 平台远程启动
+    - [X] 每个级联平台可自定义的虚拟目录
+    - [X] 目录订阅与通知
+    - [X] 录像查看与播放
+    - [X] GPS订阅与通知(直播推流)
+    - [X] 语音对讲
+- [X] 支持自动配置ZLM媒体服务, 减少因配置问题所出现的问题;  
+- [X] 多流媒体节点,自动选择负载最低的节点使用。
+- [X] 支持启用udp多端口模式, 提高udp模式下媒体传输性能;
+- [X] 支持公网部署; 
+- [X] 支持wvp与zlm分开部署,提升平台并发能力
+- [X] 支持拉流RTSP/RTMP,分发为各种流格式,或者推送到其他国标平台
+- [X] 支持推流RTSP/RTMP,分发为各种流格式,或者推送到其他国标平台
+- [X] 支持推流鉴权
+- [X] 支持接口鉴权
+- [X] 云端录像,推流/代理/国标视频均可以录制在云端服务器,支持预览和下载
+- [X] 支持打包可执行jar和war
+- [X] 支持跨域请求,支持前后端分离部署
+- [X] 支持Mysql,Postgresql,金仓等数据库
+- [X] 支持Onvif(目前在onvif分支,需要安装onvif服务,服务请在知识星球获取)
+
+# 非开源的内容
+- [X] ONVIF设备的接入,支持点播,云台控制,国标级联点播,自动点播。在[知识星球](https://t.zsxq.com/10WAnH2MP)放了试用安装包以及使用教程,没有使用时间限制,需要源码可以星球私信我或者邮箱联系。
+- [X] 支持国标28181-2022协议,支持巡航轨迹查询,PTZ精准控制,存储卡格式化,设备软件升级,OSD配置,h265+aac,支持辅码流,录像倒放等。具体的功能列表可在[知识星球](https://t.zsxq.com/18GXkpkqs)查看,需要源码和测试可以在星球私信联系或者发邮件给我
+
+
+# 授权协议
+本项目自有代码使用宽松的MIT协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议
+
+# 技术支持  
+
+[知识星球](https://t.zsxq.com/0d8VAD3Dm)专栏列表:,
+- [使用入门系列一:WVP-PRO能做什么](https://t.zsxq.com/0dLguVoSp)
+
+有偿技术支持,请发送邮件到648540858@qq.com
+
+# 致谢
+感谢作者[夏楚](https://github.com/xia-chu) 提供这么棒的开源流媒体服务框架,并在开发过程中给予支持与帮助。     
+感谢作者[dexter langhuihui](https://github.com/langhuihui) 开源这么好用的WEB播放器。     
+感谢作者[Kyle](https://gitee.com/kkkkk5G) 开源了好用的前端页面     
+感谢各位大佬的赞助以及对项目的指正与帮助。包括但不限于代码贡献、问题反馈、资金捐赠等各种方式的支持!以下排名不分先后:  
+[lawrencehj](https://github.com/lawrencehj) [Smallwhitepig](https://github.com/Smallwhitepig) [swwhaha](https://github.com/swwheihei) 
+[hotcoffie](https://github.com/hotcoffie) [xiaomu](https://github.com/nikmu) [TristingChen](https://github.com/TristingChen)
+[chenparty](https://github.com/chenparty) [Hotleave](https://github.com/hotleave) [ydwxb](https://github.com/ydwxb)
+[ydpd](https://github.com/ydpd) [szy833](https://github.com/szy833) [ydwxb](https://github.com/ydwxb) [Albertzhu666](https://github.com/Albertzhu666)
+[mk1990](https://github.com/mk1990) [SaltFish001](https://github.com/SaltFish001)
+
+同时感谢JetBrains对开源项目的支持,本项目使用IntelliJ IDEA开发与调试:
+
+![JetBrains](https://resources.jetbrains.com/storage/products/company/brand/logos/IntelliJ_IDEA_icon.svg?_ga=2.143694769.529214288.1712023294-439039083.1711422571&_gl=1*102dv9n*_ga*NDM5MDM5MDgzLjE3MTE0MjI1NzE.*_ga_9J976DJZ68*MTcxMjEyNjg4NC45LjEuMTcxMjEyNzc2My4zMy4wLjA.)

+ 91 - 0
elevator-media-gb/bootstrap.sh

@@ -0,0 +1,91 @@
+#!/bin/bash
+
+######################################################
+# Copyright 2019 Pham Ngoc Hoai
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+# Repo: https://github.com/tyrion9/spring-boot-startup-script
+#
+######### PARAM ######################################
+
+JAVA_OPT=-Xmx1024m
+JARFILE=`ls -1r *.jar 2>/dev/null | head -n 1`
+PID_FILE=pid.file
+RUNNING=N
+PWD=`pwd`
+
+######### DO NOT MODIFY ########
+
+if [ -f $PID_FILE ]; then
+        PID=`cat $PID_FILE`
+        if [ ! -z "$PID" ] && kill -0 $PID 2>/dev/null; then
+                RUNNING=Y
+        fi
+fi
+
+start()
+{
+        if [ $RUNNING == "Y" ]; then
+                echo "Application already started"
+        else
+                if [ -z "$JARFILE" ]
+                then
+                        echo "ERROR: jar file not found"
+                else
+                        nohup java  $JAVA_OPT -Djava.security.egd=file:/dev/./urandom -jar $PWD/$JARFILE > nohup.out 2>&1  &
+                        echo $! > $PID_FILE
+                        echo "Application $JARFILE starting..."
+                        tail -f nohup.out
+                fi
+        fi
+}
+
+stop()
+{
+        if [ $RUNNING == "Y" ]; then
+                kill -9 $PID
+                rm -f $PID_FILE
+                echo "Application stopped"
+        else
+                echo "Application not running"
+        fi
+}
+
+restart()
+{
+        stop
+        start
+}
+
+case "$1" in
+
+        'start')
+                start
+                ;;
+
+        'stop')
+                stop
+                ;;
+
+        'restart')
+                restart
+                ;;
+
+        *)
+                echo "Usage: $0 {  start | stop | restart  }"
+                exit 1
+                ;;
+esac
+exit 0
+

+ 106 - 0
elevator-media-gb/doc/README.md

@@ -0,0 +1,106 @@
+# 介绍
+
+> 开箱即用的28181协议视频平台
+
+# 概述
+- 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以及平台。
+- 支持将国标设备级联到其他国标平台,也支持将不支持国标的设备的图像或者直播推送到其他国标平台
+- 前端完善,自带完整前端页面,无需二次开发可直接部署使用。
+- 完全开源,且使用MIT许可协议。保留版权的情况下可以用于商业项目。
+- 支持多流媒体节点负载均衡。
+
+# 付费社群
+[![社群](_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] 语音喊话
+
+   
+
+
+# 社区
+代码目前托管在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)

BIN
elevator-media-gb/doc/_content/ability/_media/cascade1.png


BIN
elevator-media-gb/doc/_content/ability/_media/cascade2.png


BIN
elevator-media-gb/doc/_content/ability/_media/cascade3.png


BIN
elevator-media-gb/doc/_content/ability/_media/cascade4.png


BIN
elevator-media-gb/doc/_content/ability/_media/img.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_1.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_10.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_11.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_12.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_13.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_14.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_15.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_16.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_17.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_18.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_2.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_3.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_4.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_5.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_6.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_7.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_8.png


BIN
elevator-media-gb/doc/_content/ability/_media/img_9.png


+ 2 - 0
elevator-media-gb/doc/_content/ability/auto_play.md

@@ -0,0 +1,2 @@
+<!-- 自动点播 -->
+# 自动点播

+ 34 - 0
elevator-media-gb/doc/_content/ability/cascade.md

@@ -0,0 +1,34 @@
+<!-- 国标级联的使用 -->
+# 国标级联的使用
+国标28181不同平台之间支持两种连接方式,平级和上下级,WVP目前支持向上级级联。
+## 1 接入平台
+### 1.1 wvp-pro
+#### 1.1.1 wvp-pro管理页面点击添加
+   ![cascade1](_media/cascade1.png)
+#### 1.1.2 填入wvp-pro上级平台信息
+   ![cascade1](_media/img_4.png)
+   ![cascade1](_media/img_5.png)
+#### 1.1.3 编辑wvp-pro上级设备信息,开启订阅
+   ![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)
+
+## 2 添加目录与通道
+1. 级联平台添加目录信息  
+   ![cascade1](_media/img_1.png)
+2. 为目录添加通道  
+   ![cascade1](_media/img_2.png)
+3. 设置默认流目录   
+如果需要后续自动生成的流信息都在某一个节点下,可以在对应节点右键设置为默认  
+   ![cascade1](_media/img_3.png)
+

+ 18 - 0
elevator-media-gb/doc/_content/ability/cascade2.md

@@ -0,0 +1,18 @@
+<!-- 国标级联的使用 -->
+# 国标级联的使用
+国标28181不同平台之间支持两种连接方式,平级和上下级,WVP目前支持向上级级联。
+## 添加上级平台
+在国标级联页面点击“添加”按钮,以推送到上级WVP为例子,参看[接入设备](./_content/ability/device.md)
+![cascade17](_media/img_17.png)
+点击保存可以在上级的国标通道列表看到新增加的设备;
+国标级联列表出现了级联的这个平台;同时状态显示为在线,如果状态为离线那么可能是你的服务信息配置有误或者网络不通。
+订阅信息列有三个图标,表示上级开启订阅,从左到右依次是:报警订阅,目录订阅,移动位置订阅。
+## 推送通道
+点击你要推送的平台的“选择通道”按钮。
+![cascade18](_media/img_18.png)
+- **页面结构**
+  - 左侧为目录结构  
+  选择未分配,则右侧显示待分配的通道,可以点击“添加按钮”,在弹窗中选择要放置的位置,保存后即可添加通道成功
+  选择其他的目录可以看到已经分配在这个目录下的通道,可以对其进行删除后重新在未分配中去分配。
+  - 右侧为数据展示以及操作  
+  国标通道栏内为来自其他国标设备/平台的通道;直播流通道为来自推流/拉流代理的通道。

+ 8 - 0
elevator-media-gb/doc/_content/ability/cloud_record.md

@@ -0,0 +1,8 @@
+<!-- 云端录像 -->
+# 云端录像
+云端录像是对录制在zlm服务下的录像文件的管理,录像的文件路径默认在ZLM/www/record下。
+如果你需要24小时的录像,目前有一个这种方案,可以参考[7*24不间断录像](./_content/ability/continuous_recording.md)。
+1. 云段录像支持录像文件的查看,播放(可能因为编码的原因导致无法播放);
+2. 支持录像的下载;
+3. 支持录像的合并下载;
+功能没有太多特殊的地方就不一一介绍了,大家自行体验吧。

+ 76 - 0
elevator-media-gb/doc/_content/ability/continuous_broadcast.md

@@ -0,0 +1,76 @@
+# 语音对讲
+## 流程和原理
+语音对讲在国标28181-2016中分为broadcast(广播)和talk(对讲)两种模式,broadcast模式是从服务端把音频传送到设备端,是单向的,
+需要结合点播视频来实现双向对讲,talk模式支持双向,不过wvp只处理了和broadcast一样的把音频传递设备,这样两种模式可以使用一样的逻辑处理即可。
+不同的设备对于两种模式的支持不同且通常差异很大,不同的设备对同一个设备的支持也有一些不同,所以语音对讲中的兼容和适配也是问题最多的。talk模式因为在国标28181-2022中已经移除,所以这里不再讨论它了。
+### 1. broadcast模式流程
+```plantuml
+@startuml
+"WVP-PRO" -> "设备": 语音广播通知
+"WVP-PRO" <-- "设备": 200OK
+"WVP-PRO" <- "设备": 语音广播应答
+"WVP-PRO" --> "设备": 200OK
+"WVP-PRO" <- "设备": Invite
+"WVP-PRO" --> "设备": 200OK(携带SDP消息体)
+"WVP-PRO" <-- "设备": ACK
+"ZLMediaKit" -> "设备": 向设备发送语音流
+@enduml
+```
+与点播的流程不同的是,这里的invite消息是由设备发送给wvp的,wvp按照invite协商的方式给设备推送语音流,所有对讲的使用那种方式(UDP/TCP被动/TCP主动)传输语音流由设备决定
+## 使用条件与限制
+因为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
+"WVP-PRO" <- "ZLMediaKit": 通知收到语音对讲推流,携带设备和通道信息
+"WVP-PRO" -> "设备": 开始语音对讲
+"WVP-PRO" <-- "设备": 语音对讲建立成功,携带收流端口
+"WVP-PRO" -> "ZLMediaKit": 通知zlm将流推送到设备收流端口
+"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`

+ 14 - 0
elevator-media-gb/doc/_content/ability/continuous_recording.md

@@ -0,0 +1,14 @@
+<!-- 7*24不间断录像 -->
+# 7*24不间断录像
+
+目前如果要实现不间断录像如果只是关闭无人观看停止推流是不够的,设备可能经历断网,重启,都会导致录像的中断,目前给大家提供一种可用的临时方案。   
+
+**原理:** wvp支持使用流地址自动点播,即你拿到一个流地址直接去播放,即使设备处于未点播状态,wvp会自动帮你点播;ZLM
+的拉流代理成功后会无限重试,只要流一恢复就可以拉起来,基于这两个原理。  
+**方案如下:**
+1. wvp的配置中user-settings->auto-apply-play设置为团true,开启自动点播;
+2. 点击你要录像的通道,点击播放页面左下角的“更多地址”,点击rtsp,此时复制了rtsp地址到剪贴板;
+3. 在拉流代理中添加一路流,地址填写你复制的地址,启用成功即可。  
+**前提:** 
+1. wvp使用多端口收流,不然你无法得到一个固定的流地址,也就无法实现自动点播。
+

+ 36 - 0
elevator-media-gb/doc/_content/ability/device.md

@@ -0,0 +1,36 @@
+<!-- 接入设备 -->
+# 接入设备
+设备接入主要是需要在设备上配置28181上级也就是WVP-PRO的信息,只有信息一致的情况才可以注册成功。设备注册成功后打开WVP->国标设备,可以看到新增加的设备;[设备使用](./_content/ability/device_use.md),  
+主要有以下字段需要配置:  
+
+- sip->ip  
+本机IP,不要使用127.0.0.1/0.0.0.0, 除非你对项目及其熟悉    
+
+- sip->port  
+28181服务监听的端口  
+
+- sip->domain  
+domain宜采用ID统一编码的前十位编码。  
+
+- sip->id  
+28181服务ID
+
+- sip->password  
+28181服务密码    
+
+- 配置信息在如下位置  
+
+![_media/img_16.png](_media/img_16.png)
+***
+## 大华摄像头
+![_media/img_10.png](_media/img_10.png)
+## 大华NVR
+![_media/img_11.png](_media/img_11.png)
+## 艾科威视摄像头
+![_media/img_15.png](_media/img_15.png)
+## 水星摄像头
+![_media/img_12.png](_media/img_12.png)
+## 海康摄像头
+![_media/img_9.png](_media/img_9.png)
+
+[设备使用](_content/ability/device_use.md)

+ 35 - 0
elevator-media-gb/doc/_content/ability/device_use.md

@@ -0,0 +1,35 @@
+<!-- 设备使用 -->
+# 设备使用  
+### 更新设备通道  
+  点击列表末尾的“刷新”按钮,可以看到一个圆形进度条,等进度结束提示成功后即可更新完成,如果通道数量有变化你可以看点击左上角的![刷新](_media/img_14.png)即可看到通道数量的变化;如果通道数量仍未0,那么可能时对方尚未推送通道给你。
+### 查看设备通道  
+  点击列表末尾的“通道”按钮,
+### 查看设备定位  
+  点击列表末尾的“定位”按钮,即可跳转到地图页面看到设备的位置
+### 编辑设备在WVP中一些功能
+点击列表末尾的“编辑”按钮,即可在打开的弹窗中对设备功能进行修改
+- 设备名称  
+  如何未能从设备里读取到设备名称或者需要自己重命名,那么可以修改此选项。
+- 字符集  
+  修改读取设备数据时使用的字符集,默认为GB2312,但是GB2312收录的汉字不全,所以有时候回遇到乱码,可以修改为UTF-8来解决。
+- 地理坐标系  
+  展示此设备定位信息时使用的设用什么坐标系来解析经纬度,一般不用修改,如果遇到定位不准,可以修改尝试修改此选项解决。 
+- 目录结构  
+  展示设备的通道信息时,使用设备作为树形结构的依据,国标28181定义了两种树形结构,详情查看[国标28181的树形结构](./_content/theory/channel_tree.md);
+- 目录订阅  
+  填写订阅周期即可对设备开启目录订阅,设备如果支持目录订阅那么设备在通道信息发生变化时就会通知WVP哪些通道发生了那些变化,包括通道增加/删除/更新/上线/下线/视频丢失/故障。0为取消订阅。
+  一般NVR和平台对接可以开启此选项,直接接摄像机开启此选项意义不大。
+- 移动位置订阅  
+  对设备开启移动位置订阅,设备如果支持目录订阅那么设备位置发生变化时会通知到WVP,一般执法记录仪可以开启此选项,对固定位置的设备意义不大。
+- SSRC校验  
+  为了解决部分设备出现的串流问题,可以打开此选项。ZLM会严格按照给定的ssrc处理视频流。部分设备流信息不标准,开启可能导致无法点播。
+### 删除设备  
+  可以删除WVP中的设备信息,如果设备28181配置未更改,那么设备在下一次注册后仍然会注册上来。
+### 点播视频  
+  进入通道列表后,点击列表末尾的“播放”按钮,稍等即可弹出播放页面
+### 设备录像  
+  进入通道列表后,点击列表末尾的“设备录像”按钮,也可以在播放页面点击录像查询进入录像查看页面,选择要查看的日期即可对录像进行播放和下载。
+### 云台控制  
+  可以对支持云台功能的设备进行上下左右的转动以及拉近拉远的操作。
+### 获取视频的播放器地址  
+  视频点播成功后在实时视频页面,点击“更多地址”可以看到所有的播放地址,地址是否可以播放与你是否完整编译启用zlm功能有关,更与网络有关。

+ 37 - 0
elevator-media-gb/doc/_content/ability/gis.md

@@ -0,0 +1,37 @@
+<!-- 电子地图 -->
+# 电子地图
+WVP提供了简单的电子地图用于设备的定位以及移动设备的轨迹信息,电子地图基于开源的地图引擎openlayers开发。
+### 查看设备定位
+1. 可以在设备列表点击“定位”按钮,自动跳转到电子地图页面; 
+2. 在电子地图页面在设备上右键点击“定位”获取设备/平台下的所有通道位置。
+3. 单击通道信息可以定位到具体的通道 
+
+
+### 查询设备轨迹
+查询轨迹需要提前配置save-position-history选项开启轨迹信息的保存,目前WVP此处未支持分库分表,对于大数据量的轨迹信息无法胜任,有需求请自行二次开发或者定制开发。
+在电子地图页面在设备上右键点击“查询轨迹”获取设备轨迹信息。
+
+PS: 目前的底图仅用用作演示和学习,商用情况请自行购买授权使用。
+
+### 更换底图以及底图配置
+目前WVP支持使用了更换底图,配置文件在web_src/static/js/config.js,请修改后重新编译前端文件。
+```javascript
+window.mapParam = {
+  // 开启/关闭地图功能
+  enable: true,
+  // 坐标系 GCJ-02 WGS-84,
+  coordinateSystem: "GCJ-02",
+  // 地图瓦片地址
+  tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
+  // 瓦片大小
+  tileSize: 256,
+  // 默认层级
+  zoom:10,
+  // 默认地图中心点
+  center:[116.41020, 39.915119],
+  // 地图最大层级
+  maxZoom:18,
+  // 地图最小层级
+  minZoom: 3
+}
+```

+ 9 - 0
elevator-media-gb/doc/_content/ability/node_manger.md

@@ -0,0 +1,9 @@
+<!-- 节点管理 -->
+# 节点管理
+WVP支持单个WVP多个ZLM的方案来扩展WVP的视频并发能力,并发点播是因为带宽和性能的原因,单个ZLM节点能支持的路数有限,所以WVP增加了ZLM集群来扩展并发并且保证ZLM的高可用。
+## 默认节点
+WVP中为了保证功能的完整性,ZLM节点至少要有一个默认节点,这个节点不是在管理页面添加的,而是在WVP的配置文件中配置的,这个节点不可在页面删除。每次启动会自动从配置文件中读取配置写入数据库备用。
+## 新增节点
+启动你要添加的zlm节点,然后点击“添加节点”按钮输入zlm的ip, http端口,SECRET。点击测试测试完成则开始对节点进行详细的设置,如果你的zlm是使用docker启动的,可能存在zlm使用的端口与宿主机端口不一致的情况,需要在这里一一配置。
+## wvp使用多个节点的原理
+wvp会把连接的节点统一记录在redis中,并记录zlm的负载情况,当新的请求到来时,会取出负载最低的那个zlm进行使用。以此保证节点负载均衡。

+ 2 - 0
elevator-media-gb/doc/_content/ability/online_doc.md

@@ -0,0 +1,2 @@
+<!-- 在线文档 -->
+# 在线文档

+ 24 - 0
elevator-media-gb/doc/_content/ability/proxy.md

@@ -0,0 +1,24 @@
+<!-- 拉流代理 -->
+# 拉流代理
+不是所有的摄像机都支持国标或者推流的,但是这些设备可以得到一个视频播放地址,通常为rtsp协议,
+以大华为例:
+```text
+rtsp://{user}:{passwd}@{ipc_ip}:{rtsp_port}/cam/realmonitor?channel=1&subtype=0
+```
+可以得到这样一个流地址,可以直接用vlc进行播放,此时我们可以通过拉流代理功能将这个设备推送给其他国标平台了。
+流程如下:
+```plantuml
+@startuml
+"摄像机"  <- "ZLMediaKit": 1. 流去流信息到ZLM
+"ZLMediaKit"  -> "WVP-PRO": 2. 收到hook通知得到流信息
+"上级国标平台"  -> "WVP-PRO": 3. 点播这路视频
+"WVP-PRO" -> "ZLMediaKit": 4. 通知推流到上级国标平台
+@enduml
+```
+## 添加代理
+拉流代理支持两种方式:
+1. ZLM中直接代理流,支持RTSP/RTMP,不支持转码;
+2. 借助ffmpeg完成拉转,可以通过修改ffmpeg拉转参数完成转码。  
+点击页面的“添加代理”,安装提示操作即可,保存并启用成功后,可以在国标级联中[添加通道推送给上级平台](./_content/ability/cascade?id=_2-%e6%b7%bb%e5%8a%a0%e7%9b%ae%e5%bd%95%e4%b8%8e%e9%80%9a%e9%81%93)
+
+PS: ffmpeg默认模板不需修改,需要修改参数自行去ZLM配置文件中添加一个即可。

+ 41 - 0
elevator-media-gb/doc/_content/ability/push.md

@@ -0,0 +1,41 @@
+<!-- 推流列表 -->
+# 推流列表
+## 功能说明
+
+WVP支持三种图像输入方式,直播,[拉流代理](_content/ability/proxy.md),[国标](_content/ability/device.md),直播设备接入流程如下
+```plantuml
+@startuml
+"直播设备"  -> "ZLMediaKit": 1. 发起推流
+"ZLMediaKit"  -> "WVP-PRO": 2. 收到hook通知得到流信息
+"上级国标平台"  -> "WVP-PRO": 3. 点播这路视频
+"WVP-PRO" -> "ZLMediaKit": 4. 通知推流到上级国标平台
+@enduml
+```
+1. 默认情况下WVP收到推流信息后,列表中出现这条推流信息,此时你可以点击“加入国标”按钮为此路推流配置名称以及国标编号,只有有国标编号的推流才可以添加到级联平台,保存成功后可以在国标级联中[添加通道推送给上级平台](_content/ability/cascade?id=_2-%e6%b7%bb%e5%8a%a0%e7%9b%ae%e5%bd%95%e4%b8%8e%e9%80%9a%e9%81%93)
+2. WVP也支持推流前导入大量通道直接推送给上级,点击“下载模板”按钮,根据示例修改模板后,点击“通道导入”按钮导入通道数据,保存成功后可以在国标级联中[添加通道推送给上级平台](_content/ability/cascade?id=_2-%e6%b7%bb%e5%8a%a0%e7%9b%ae%e5%bd%95%e4%b8%8e%e9%80%9a%e9%81%93)
+
+## 推拉流鉴权规则
+为了保护服务器的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
+```
+

+ 2 - 0
elevator-media-gb/doc/_content/ability/user.md

@@ -0,0 +1,2 @@
+<!-- 用户管理 -->
+# 用户管理

+ 5 - 0
elevator-media-gb/doc/_content/about_doc.md

@@ -0,0 +1,5 @@
+<!-- 关于本文档 -->
+
+# 关于本文档
+本文档开源在gitee上,[https://gitee.com/pan648540858/wvp-pro-doc.git](https://gitee.com/pan648540858/wvp-pro-doc.git),如果文档出现任何错误或者不易理解的语句,请大家提ISSUE帮助我及时更正。欢迎大家提交PR一起维护这份文档,让更多的人可以使用到这个开源的视频平台。
+

+ 27 - 0
elevator-media-gb/doc/_content/broadcast.md

@@ -0,0 +1,27 @@
+# 原理图
+
+## 使用ffmpeg测试语音对讲原理
+```plantuml
+@startuml
+"FFMPEG" -> "ZLMediaKit": 推流到zlm
+"WVP-PRO" <- "ZLMediaKit": 通知收到语音对讲推流,携带设备和通道信息
+"WVP-PRO" -> "设备": 开始语音对讲
+"WVP-PRO" <-- "设备": 语音对讲建立成功,携带收流端口
+"WVP-PRO" -> "ZLMediaKit": 通知zlm将流推送到设备收流端口
+"ZLMediaKit" -> "设备": 向设备推流
+@enduml
+```
+
+## 使用网页测试语音对讲原理
+```plantuml
+@startuml
+"前端页面" -> "WVP-PRO": 请求推流地址
+"前端页面" <-- "WVP-PRO": 返回推流地址
+"前端页面" -> "ZLMediaKit": 使用webrtc推流到zlm,以下过程相同
+"WVP-PRO" <- "ZLMediaKit": 通知收到语音对讲推流,携带设备和通道信息
+"WVP-PRO" -> "设备": 开始语音对讲
+"WVP-PRO" <-- "设备": 语音对讲建立成功,携带收流端口
+"WVP-PRO" -> "ZLMediaKit": 通知zlm将流推送到设备收流端口
+"ZLMediaKit" -> "设备": 向设备推流
+@enduml
+```

+ 2 - 0
elevator-media-gb/doc/_content/disclaimers.md

@@ -0,0 +1,2 @@
+# 免责声明
+WVP-PRO自有代码使用宽松的MIT协议,在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议

BIN
elevator-media-gb/doc/_content/introduction/_media/img.png


BIN
elevator-media-gb/doc/_content/introduction/_media/img_1.png


BIN
elevator-media-gb/doc/_content/introduction/_media/img_2.png


+ 99 - 0
elevator-media-gb/doc/_content/introduction/compile.md

@@ -0,0 +1,99 @@
+<!-- 编译 -->
+# 编译
+WVP-PRO不只是实现了国标28181的协议,本身也是一个完整的视频平台。所以对于新手来说,你可能需要一些耐心来完成。遇到问题不要焦躁,你可以
+1. 百度
+2. 如果身边有熟悉java的朋友,可以咨询下朋友;
+3. 来群里(901799015)咨询群友;
+4. 向作者发送邮件648540858@qq.com;
+5. 作者远程支持(有偿)。   
+   如果这些仍不能解决你的问题,那么你可能需要与作者我一起合作完成这个项目,解决你遇到的问题。
+
+
+WVP-PRO使用Spring boot开发,maven管理依赖。对于熟悉spring开发的朋友是很容易进行编译部署以及运行的。  
+下面将提供一种通用方法方便大家运行项目。
+## 1 服务介绍
+| 服务             | 作用                                       | 是否必须                    |
+|----------------|------------------------------------------|-------------------------|
+| WVP-PRO        | 实现国标28181的信令以及视频平台相关的功能                  | 是                       |
+| ZLMediaKit     | 为WVP-PRO提供国标28181的媒体部分的实现,以及各种视频流格式的分发支持 | 是                       |
+
+## 2 安装依赖
+| 依赖     | 版本         | 用途          | 开发环境需要 | 生产环境需要 |
+|--------|------------|-------------|--------|--------|
+| 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),截取一下关键步骤:
+```bash
+# 国内用户推荐从同步镜像网站gitee下载 
+git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
+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)
+
+  
+
+
+
+
+
+

+ 163 - 0
elevator-media-gb/doc/_content/introduction/config.md

@@ -0,0 +1,163 @@
+<!-- 配置 -->
+# 配置
+对于首次测试或者新手同学,我建议在局域网测试,并且关闭服务器与客户机的防火墙测试。建议部署在linux进行测试。
+
+```plantuml
+@startuml
+"WVP-PRO" -> "ZLMediaKit": RESTful 接口
+"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打包后的jar包里,已经存在了配置文件,但是每次打开jar包修改配置文件或者修改后再打包都是比较麻烦的,所以大家可通过指定配置文件路径来加载指定位置的配置文件。
+```shell
+cd wvp-GB28181-pro/target
+java -jar wvp-pro-*.jar --spring.config.location=../src/main/resources/application.yml
+```
+### 1.2 迁移配置文件以方便启动
+由于配置文件的命令比较长,所以为了启动方便通常我会把配置文件放到jar包的同级目录,类似这样,
+移除jar包内/BOOT-INF/classes/下所有以application开头的文件,使用解压缩工具打开jar即可,不需要解压出来。
+```shell
+cd wvp-GB28181-pro/target
+mv ../src/main/resources/application-dev.yml application.yml 
+java -jar wvp-pro-*.jar 
+```
+这也是我自己最常用的方式。
+## 2 配置WVP-PRO
+wvp支持多种数据库,包括Mysql,Postgresql,金仓等,配置任选一种即可。
+### 2.1 数据库配置
+####  2.1.1 初始化数据库
+首先使用创建数据库,然后使用sql/初始化.sql初始化数据库,如果是从旧版升级上来的,使用升级sql更新。
+####  2.1.2 Mysql数据库配置
+数据库名称以wvp为例
+```yaml
+spring:
+  datasource:
+    type: com.zaxxer.hikari.HikariDataSource
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true&allowPublicKeyRetrieval=true
+    username: root
+    password: 12345678
+
+mybatis:
+  configuration:
+    map-underscore-to-camel-case: true
+```
+####  2.1.3 Postgresql数据库配置
+数据库名称以wvp为例
+```yaml
+spring:
+  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 金仓数据库配置
+数据库名称以wvp为例
+```yaml
+spring:
+  datasource:
+    type: com.zaxxer.hikari.HikariDataSource
+    driver-class-name: com.kingbase8.Driver
+    url: jdbc:kingbase8://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=utf8
+    username: root
+    password: 12345678
+
+pagehelper:
+  helper-dialect: postgresql
+```
+### 2.2 Redis数据库配置
+配置wvp中的redis连接信息,建议wvp自己单独使用一个db。
+### 2.3 配置服务启动端口(可直接使用默认配置)
+```yaml
+# [可选] WVP监听的HTTP端口, 网页和接口调用都是这个端口
+server:
+    port: 18080
+```
+### 2.4 配置28181相关信息(可直接使用默认配置)
+```yaml
+# 作为28181服务器的配置
+sip:
+    # [必须修改] 本机的IP
+    ip: 192.168.1.3
+    # [可选] 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:
+    # ZLMediaKit的服务ID,必须配置
+    id: FQ3TF8yT83wh5Wvz
+    # [必须修改] zlm服务器的内网IP,sdp-ip与stream-ip使用默认值的情况下,这里不要使用127.0.0.1/0.0.0.0
+    ip: 192.168.1.3
+    # [必须修改] zlm服务器的http.port
+    http-port: 6080
+    # [可选] zlm服务器的hook.admin_params=secret
+    secret: 035c73f7-bb6b-4889-a715-d9eb2d1925cc
+    # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分, 点播超时建议使用多端口测试
+    rtp:
+        # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
+        enable: true
+        # [可选] 在此范围内选择端口用于媒体流传输,
+        port-range: 30000,30500 # 端口范围
+        # [可选] 国标级联在此范围内选择端口发送媒体流,
+        send-port-range: 30000,30500 # 端口范围
+    # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
+    record-assist-port: 18081
+```
+### 2.4 个性化定制信息配置
+```yaml
+# [根据业务需求配置]
+user-settings:
+    # [可选] 服务ID,不写则为000000
+    server-id:
+    # [可选] 自动点播, 使用固定流地址进行播放时,如果未点播则自动进行点播, 需要rtp.enable=true
+    auto-apply-play: false
+    # [可选] 部分设备需要扩展SDP,需要打开此设置
+    senior-sdp: false
+    # 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认)
+    save-position-history: false
+    # 点播等待超时时间,单位:毫秒
+    play-timeout: 3000
+    # 等待音视频编码信息再返回, true: 可以根据编码选择合适的播放器,false: 可以更快点播
+    wait-track: false
+    # 是否开启接口鉴权
+    interface-authentication: true
+    # 自动配置redis 可以过期事件
+    redis-config: true
+    # 接口鉴权例外的接口, 即不进行接口鉴权的接口,尽量详细书写,尽量不用/**,至少两级目录
+    interface-authentication-excludes:
+        - /api/v1/**
+    # 推流直播是否录制
+    record-push-live: true
+    # 国标是否录制
+    record-sip: true
+    # 是否将日志存储进数据库
+    logInDatabase: true
+    # 第三方匹配,用于从stream钟获取有效信息
+    thirdPartyGBIdReg: [\s\S]*
+```
+
+
+如果配置信息无误,你可以启动zlm,再启动wvp来测试了,启动成功的话,你可以在wvp的日志下看到zlm已连接的提示。
+接下来[部署到服务器](./_content/introduction/deployment.md), 如果你只是本地运行直接在本地运行即可。

+ 57 - 0
elevator-media-gb/doc/_content/introduction/deployment.md

@@ -0,0 +1,57 @@
+<!-- 部署 -->
+
+# 部署
+**请仔细阅读以下内容**
+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 | 多端口开放 |
+
+3. 测试环境部署建议所有服务部署在一台主机,关闭防火墙,减少因网络出现问题的可能;
+4. 生产环境按需开放端口,但是建议修改默认端口,尤其是5060端口,易受到攻击;
+5. zlm使用docker部署的情况,要求端口映射一致,比如映射5060,应将外部端口也映射为5060端口;
+6. zlm与wvp会保持高频率的通信,所以不要去将wvp与zlm分属在两个网络,比如wvp在内网,zlm却在公网的情况。
+7. 启动服务,以linux为例
+**启动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`中,将此目录下的文件部署。
+前后端分离部署最大的问题是跨域的解决,之前版本使用cookie完成登录流程,而cookie是不可以在复杂跨域中使用的。所以当前版本使用JWT生成的TOKEN作为认证凭据,
+部署前端后需要在wvp中配置前端访问的地址以完成跨域流程。   
+**配置前端服务器**
+1. 假如你的服务有公网域名为xxx.com,公网IP为11.11.11.11, 那么你可以在wvp中这样配置:
+```yaml
+user-settings:
+  # 跨域配置,配置你访问前端页面的地址即可, 可以配置多个
+  allowed-origins:
+    - http://xxx.com:8008
+    - http://11.11.11.11:8008
+```
+配置不是必须的,你使用哪个ip/域名访问就配置哪个即可。修改配置后重启wvp以使配置生效。
+2. 在`src/main/resources/static/static/js/config.js`下配置服务器的地址,也就是wvp服务的地址
+```javascript
+window.baseUrl = "http://xxx.com:18080"
+```
+`这里的地址是需要客户电脑能访问到的,因为请求是客户端电脑发起,与代理不同`  
+[接入设备](./_content/ability/device.md)
+

BIN
elevator-media-gb/doc/_content/qa/_media/img.png


BIN
elevator-media-gb/doc/_content/qa/_media/img_1.png


BIN
elevator-media-gb/doc/_content/qa/_media/img_2.png


BIN
elevator-media-gb/doc/_content/qa/_media/img_3.png


BIN
elevator-media-gb/doc/_content/qa/_media/img_4.png


BIN
elevator-media-gb/doc/_content/qa/_media/img_5.png


+ 12 - 0
elevator-media-gb/doc/_content/qa/bug.md

@@ -0,0 +1,12 @@
+<!-- 反馈bug -->
+# 反馈bug
+代码是在不断的完善的,不断修改会修复旧的问题也有可能引入新的问题,所以遇到BUG是很正常的一件事。所以遇到问题不要烦燥,咱们就事论事就好了。
+## 如何反馈
+1. 在知识星球提问。
+2. 更新代码,很可能你遇到问题别人已经更早的遇到了,或者是作者自己发现了,已经解决了,所以你可以更新代码再次进行测试;
+3. 可以在github提ISSUE,我几乎每天都会去看issue,你的问题我会尽快给予答复;
+> 有偿支持可以给我发邮件, 648540858@qq.com
+
+## 社群
+[![社群](../../_media/shequ.png "shequ")](https://t.zsxq.com/0d8VAD3Dm)
+> 收费是为了提供更好的服务,也是对作者更大的激励。加入星球的用户三天后可以私信我留下微信号,我会拉大家入群。加入三天内不满意可以直接退款,大家不需要有顾虑,来白嫖三天也不是不可以。

+ 15 - 0
elevator-media-gb/doc/_content/qa/development.md

@@ -0,0 +1,15 @@
+<!-- 参与开发 -->
+# 参与到开发中来
+非常欢迎有兴趣的小伙伴一起来维护这个项目
+## 与开发有关的信息
+- 开发语言:后端java + 前端vue;
+- jdk版本: 1.8;
+- 作者自用开发ide: jetbrains intellij idea;
+- nodejs/npm版本:v10.19.0/6.14.4;
+- 后端使用Spring boot框架开发;
+- 项目大量使用了异步操作;
+- 跟代码学流程需要参考28181文档,只看代码你会很懵的;
+- 必须学会[抓包](_content/skill/tcpdump.md),这是必须的  
+
+## 提交代码
+大家可以通过fork项目的方式提交自己的代码,然后提交PR,我来合并到主线。提交代码的过程中我们需要遵循“**阿里编码规约**”,现有代码也有很多代码没有做到,但是我们在朝这个方向努力。

BIN
elevator-media-gb/doc/_content/qa/img.png


+ 57 - 0
elevator-media-gb/doc/_content/qa/play_error.md

@@ -0,0 +1,57 @@
+<!-- 点播错误 -->
+# 点播错误
+排查点播错误你首先要清楚[点播的基本流程](_content/theory/play.md),一般的流程如下:
+```plantuml
+@startuml
+"WEB用户"  -> "WVP-PRO": 1. 发起点播请求
+"设备" <-  "WVP-PRO": 2. Invite(携带SDP消息体)
+"设备" --> "WVP-PRO": 3. 200OK(携带SDP消息体)
+"设备" <-- "WVP-PRO": 4. Ack
+"设备" -> "ZLMediaKit": 5. 发送实时流
+"WVP-PRO" <- "ZLMediaKit": 6. 流改变事件
+"WEB用户"  <-- "WVP-PRO": 7. 回复流播放地址(携带流地址)
+"WVP-PRO" <- "ZLMediaKit": 8. 无人观看事件
+"设备" <-  "WVP-PRO": 9 Bye消息
+"设备" -->  "WVP-PRO": 10 200OK
+@enduml
+```
+针对几种常见的错误,我们来分析一下,也方便大家对号入座解决常见的问题
+## 点播收到错误码
+这个错误一般表现为点击"播放"按钮后很快得到一个错误。
+1. **400错误码**  
+出现400错误玛时一般是这样的流程是这样的
+```plantuml
+@startuml
+"WEB用户"  -> "WVP-PRO": 1. 发起点播请求
+"设备" <-  "WVP-PRO": 2. Invite(携带SDP消息体)
+"设备" --> "WVP-PRO": 3. 400错误
+@enduml
+```
+此时通常是设备认为WVP发送了错误的消息给它,它认为消息不全或者错误所以直接返回400错误,此时我们需要[抓包](_content/skill/tcpdump.md)来分析是否缺失了内容,也可以直接联系对方询问为什么返回了400。
+WVP不能保证兼容所有的设备,有些实现不规范的设备可能在对接时就会出现上述问题,你可以联系作者帮忙对接。
+2. **500错误码**  
+500或者大于500小于600的错误码一般多是设备内部出了问题,解决方式有两个,第一种直接联系设备/平台客服寻求解决;第二种,如果你有确定可以对接这个设备的平台那么可以把对接这个平台的抓包和对接wvp的抓包同时发送给我,我来尝试解决。
+
+
+## 点播超时
+点播超时的情况大致分为两种:点播超时和收流超时
+1. **点播超时**  
+点播超时错误一般为信令的超时,比如长时间为收到对方的回复,可能出现在流程中 “3. 200OK(携带SDP消息体)”这个位置,即我们发送点播消息,但是设备没有回复,可能的原因:
+> 1. 设备内部错误,未能回复消息
+> 2. 网络原因消息未到到达设备  
+
+大部分时候是原因2,所以遇到这个错误我们首先要排查我们我的网路,如果你是公网部署,那么也可能时心跳周期太长,导致的路由NAT失效,WVP的消息无法通道原来的IP端口号发送给设备。
+
+2. **收流超时**  
+收流超时可能发生在流程中的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日志是否有流注册;
+- 抓包查看流的信息,看看流是否正常发送,甚至可以导出发送原始流,用vlc播放,看看是否可以播放。

+ 8 - 0
elevator-media-gb/doc/_content/qa/regiser_error.md

@@ -0,0 +1,8 @@
+<!-- 设备注册不上来的解决办法 -->
+# 设备注册不上来的解决办法
+一般的原因有两个
+1. 信息填写错误,比如密码错误; 
+2. 网络不通导致注册消息无法发送到WVP; 
+
+
+遇到问题首先仔细校验填写信息,例如海康可能需要勾选鉴权才可以输入密码。网络问题请自行测试。

+ 24 - 0
elevator-media-gb/doc/_content/qa/start_error.md

@@ -0,0 +1,24 @@
+<!-- 启动时报错 -->
+# 启动时报错
+启动时的报错大部分时候是因为你的配置有问题,比如mysql没连接上,redis没连接上,18080/15060端口占用了,这些都会导致启动是报错,修改配置配置之后都可以解决;
+下面我整理的一些常见的错误,大家可以先对号入座的简单排查下。
+> **常见错误**  
+
+![_media/img.png](_media/img.png)
+**错误原因:** redis配置错误,可能原因: redis未启动/ip错误/端口错误/网络不通  
+---
+![_media/img_1.png](_media/img_1.png)
+**错误原因:** redis配置错误,可能原因: 密码错误
+---
+![_media/img_2.png](_media/img_2.png)
+**错误原因:** mysql配置错误,可能原因: mysql未启动/ip错误/端口错误/网络不通  
+---
+![_media/img_3.png](_media/img_3.png)
+**错误原因:** mysql配置错误,可能原因: 用户名/密码错误
+---
+![_media/img_4.png](_media/img_4.png)
+**错误原因:** SIP配置错误,可能原因: SIP端口被占用
+---
+![_media/img_5.png](_media/img_5.png)
+**错误原因:** WVP Tomcat端口配置错误,可能原因: server.port端口被占用
+---

BIN
elevator-media-gb/doc/_content/skill/_media/img.png


BIN
elevator-media-gb/doc/_content/skill/_media/img_1.png


BIN
elevator-media-gb/doc/_content/skill/_media/img_2.png


+ 62 - 0
elevator-media-gb/doc/_content/skill/tcpdump.md

@@ -0,0 +1,62 @@
+<!-- 抓包 -->
+# 抓包
+如果说对于网络编程,有什么工具是必会的,我觉得抓包肯定是其中之一了。作为GB/T 28181调试过程中最重要的手段,我觉得如果你真对他有兴趣,或者系统遇到问题可以最快的得到解决,那么抓包你就一定要学会了。
+
+## 抓包工具的选择
+### 1. Wireshark
+在具备图形界面的系统上,比如windows,linux发行版ubuntu,opensuse等,我一般直接使用Wireshark直接进行抓包,也方便进行内容的查看。
+### 2. Tcpdump
+在使用命令行的系统,比如linux服务器,我一般使用Tcpdump进行抓包,无需额外安装,系统一般自带,抓包的到的文件,可以使用Wireshark打开,在图形界面下方便查看内容。
+
+## 工具安装
+Wireshark的安装很简单,根据提示一步步点击就好了,在linux需要解决权限的问题,如果和我一样使用图形界面的linux发行版的话,可以参看如下步骤; windows的小伙伴直接略过即可
+```shell
+# 1. 添加wireshark用户组
+sudo groupadd wireshark
+# 2. 将dumpcap更改为wireshark用户组
+sudo chgrp wireshark /usr/bin/dumpcap
+# 3. 让wireshark用户组有root权限使用dumpcap
+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`
+详细的过滤规则可以自行百度,我可以提供一些常用的给大家参考
+![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点击红色的停止即可,需要保存文件可以点击`文件->导出特定分组`导出过滤后的数据,也可以直接`文件->另存为`保存未过滤的数据。
+### 使用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查看了
+更多的操作可以参考: [https://www.cnblogs.com/jiujuan/p/9017495.html](https://www.cnblogs.com/jiujuan/p/9017495.html)

BIN
elevator-media-gb/doc/_content/theory/_media/img.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_1.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_2.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_3.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_4.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_5.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_6.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_7.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_8.png


BIN
elevator-media-gb/doc/_content/theory/_media/img_9.png


+ 46 - 0
elevator-media-gb/doc/_content/theory/broadcast_cascade.md

@@ -0,0 +1,46 @@
+<!-- 点播流程 -->
+
+# 点播流程
+> 以下为WVP-PRO级联语音喊话流程。
+
+```plantuml
+@startuml
+"上级平台"  -> "下级平台": 1. 发起语音喊话请求
+"上级平台" <--  "下级平台": 2. 200OK
+"上级平台" <- "下级平台": 3. 回复Result OK
+"上级平台" -->  "下级平台": 4. 200OK
+
+"下级平台"  -> "设备": 5. 发起语音喊话请求
+"下级平台" <--  "设备": 6. 200OK
+"下级平台" <- "设备": 7. 回复Result OK
+"下级平台" -->  "设备": 8. 200OK
+
+"下级平台"  <- "设备": 9. invite(broadcast)
+"下级平台"  --> "设备": 10. 100 trying
+"下级平台"  --> "设备": 11. 200OK SDP
+"下级平台"  <-- "设备": 12. ack
+
+"上级平台"  <- "下级平台": 13. invite(broadcast)
+"上级平台"  --> "下级平台": 14. 100 trying
+"上级平台"  --> "下级平台": 15. 200OK SDP
+"上级平台"  <-- "下级平台": 16. ack
+
+"上级平台"  -> "下级平台": 17. 推送RTP
+"下级平台"  -> "设备": 18. 推送RTP
+
+@enduml
+```
+
+
+##  注册流程描述如下:
+1. 用户从网页或调用接口发起点播请求;
+2. WVP-PRO向摄像机发送Invite消息,消息头域中携带 Subject字段,表明点播的视频源ID、发送方媒体流序列号、ZLMediaKit接收流使用的IP、端口号、
+   接收端媒体流序列号等参数,SDP消息体中 s字段为“Play”代表实时点播,y字段描述SSRC值,f字段描述媒体参数。
+3. 摄像机向WVP-PRO回复200OK,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等内容。
+4. WVP-PRO向设备回复Ack, 会话建立成功。
+5. 设备向ZLMediaKit发送实时流。
+6. ZLMediaKit向WVP-PRO发送流改变事件。
+7. WVP-PRO向WEB用户回复播放地址。
+8. ZLMediaKit向WVP发送流无人观看事件。
+9. WVP-PRO向设备回复Bye, 结束会话。
+10. 设备回复200OK,会话结束成功。

+ 14 - 0
elevator-media-gb/doc/_content/theory/channel_tree.md

@@ -0,0 +1,14 @@
+<!-- 通道的树形结构 -->
+
+# 通道的树形结构
+
+国标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)

+ 25 - 0
elevator-media-gb/doc/_content/theory/code.md

@@ -0,0 +1,25 @@
+<!-- 统一编码规则 -->
+
+# 统一编码规则
+## D.1 编码规则 A
+>&emsp;&emsp;编码规则 A 由中心编码(8位)、行业编码(2位)、类型编码(3位)和序号(7位)四个码段共20位十
+>进制数字字符构成,即系统编码 =中心编码 + 行业编码 + 类型编码 + 序号。  
+>&emsp;&emsp;编码规则 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)  
+
+
+## D.2 编码规则 B
+>&emsp;&emsp;编码规则 B由中心编码(8位)、行业编码(2位)、序号(4位)和类型编码(2位)四个码段构成,即系
+>统编码 =中心编码 + 行业编码 +序号+类型编码。编码规则 B的详细说明见表 D.2。
+![img_3.png](_media/img_3.png)
+![img_4.png](_media/img_4.png)
+
+
+## D.3 行业编码对照表
+>&emsp;&emsp;行业编码对照表见表 D.3。  
+![img_5.png](_media/img_5.png)
+![img_6.png](_media/img_6.png)

BIN
elevator-media-gb/doc/_content/theory/img.png


+ 33 - 0
elevator-media-gb/doc/_content/theory/play.md

@@ -0,0 +1,33 @@
+<!-- 点播流程 -->
+
+# 点播流程
+> 以下为WVP-PRO点播流程。点播成功前的任何一个环节出现问题都可能出现点播超时,这也是排查点播超时的依据。
+
+```plantuml
+@startuml
+"WEB用户"  -> "WVP-PRO": 1. 发起点播请求
+"设备" <-  "WVP-PRO": 2. Invite(携带SDP消息体)
+"设备" --> "WVP-PRO": 3. 200OK(携带SDP消息体)
+"设备" <-- "WVP-PRO": 4. Ack
+"设备" -> "ZLMediaKit": 5. 发送实时流
+"WVP-PRO" <- "ZLMediaKit": 6. 流改变事件
+"WEB用户"  <-- "WVP-PRO": 7. 回复流播放地址(携带流地址)
+"WVP-PRO" <- "ZLMediaKit": 8. 无人观看事件
+"设备" <-  "WVP-PRO": 9 Bye消息
+"设备" -->  "WVP-PRO": 10 200OK
+@enduml
+```
+
+
+##  注册流程描述如下:  
+1. 用户从网页或调用接口发起点播请求;  
+2. WVP-PRO向摄像机发送Invite消息,消息头域中携带 Subject字段,表明点播的视频源ID、发送方媒体流序列号、ZLMediaKit接收流使用的IP、端口号、
+ 接收端媒体流序列号等参数,SDP消息体中 s字段为“Play”代表实时点播,y字段描述SSRC值,f字段描述媒体参数。
+3. 摄像机向WVP-PRO回复200OK,消息体中描述了媒体流发送者发送媒体流的IP、端口、媒体格式、SSRC字段等内容。
+4. WVP-PRO向设备回复Ack, 会话建立成功。
+5. 设备向ZLMediaKit发送实时流。
+6. ZLMediaKit向WVP-PRO发送流改变事件。
+7. WVP-PRO向WEB用户回复播放地址。
+8. ZLMediaKit向WVP发送流无人观看事件。
+9. WVP-PRO向设备回复Bye, 结束会话。
+10. 设备回复200OK,会话结束成功。

+ 21 - 0
elevator-media-gb/doc/_content/theory/register.md

@@ -0,0 +1,21 @@
+<!-- 注册流程 -->
+
+# 注册流程
+WVP-PRO目前仅支持国标中描述的基本注册流程,也是最常用的,
+> 基本注册即采用IETFRFC3261规定的基于数字摘要的挑战应答式安全技术进行注册.
+
+```plantuml
+@startuml
+"设备"  -> "WVP-PRO": 1. Register
+"设备" <-- "WVP-PRO": 2. 401 Unauthorized
+"设备"  -> "WVP-PRO": 3. Register
+"设备" <-- "WVP-PRO": 4. 200 OK
+@enduml
+```
+
+
+> 注册流程描述如下:  
+> 1. 摄像机向WVP-PRO服务器发送 Register请求;  
+> 2. WVP-PRO向摄像机发送响应401,并在响应的消息头 WWW_Authenticate字段中给出适合摄像机的认证体制和参数;
+> 3. 摄像机重新向WVP-PRO发送 Register请求,在请求的 Authorization字段给出信任书, 包含认证信息;
+> 4. WVP-PRO对请求进行验证,如果检查出 摄像机身份合法,向摄像机发送成功响应 200OK,如果身份不合法则发送拒绝服务应答。

+ 17 - 0
elevator-media-gb/doc/_coverpage.md

@@ -0,0 +1,17 @@
+<!-- 封面 -->
+![logo](_media/logo-mini.png)
+
+# WVP-PRO <small>2.0</small>
+
+> 开箱即用的28181协议视频平台。
+
+- 基于GB/T28181-2016标准信令实现,兼容GB/T28181-2011。  
+- 自带完整前端页面,开箱即用。  
+- 完全开源,且使用MIT许可协议。可以在保留版权信息的基础上商用。
+
+[GitHub](https://github.com/648540858/wvp-GB28181-pro)
+[Gitee](https://gitee.com/pan648540858/wvp-GB28181-pro)
+
+<!-- 背景色 -->
+
+[//]: # ([comment]: <> &#40;![color]&#40;#f0f0f0&#41;&#41;)

BIN
elevator-media-gb/doc/_media/1372762149.jpg


BIN
elevator-media-gb/doc/_media/2.png


BIN
elevator-media-gb/doc/_media/3-1.png


BIN
elevator-media-gb/doc/_media/3-2.png


BIN
elevator-media-gb/doc/_media/3-3.png


BIN
elevator-media-gb/doc/_media/3.png


BIN
elevator-media-gb/doc/_media/903207146.jpg


BIN
elevator-media-gb/doc/_media/favicon.ico


BIN
elevator-media-gb/doc/_media/index.png


BIN
elevator-media-gb/doc/_media/logo-mini.png


BIN
elevator-media-gb/doc/_media/logo.jpg


BIN
elevator-media-gb/doc/_media/logo.png


BIN
elevator-media-gb/doc/_media/shequ.png


BIN
elevator-media-gb/doc/_media/weixin.jpg


BIN
elevator-media-gb/doc/_media/zhifubao.jpg


+ 1 - 0
elevator-media-gb/doc/_navbar.md

@@ -0,0 +1 @@
+<!-- 导航栏 -->

+ 35 - 0
elevator-media-gb/doc/_sidebar.md

@@ -0,0 +1,35 @@
+<!-- 侧边栏 -->
+
+* **编译与部署**
+  * [测试](_content/introduction/test.md)
+  * [编译](_content/introduction/compile.md)
+  * [配置](_content/introduction/config.md)
+  * [部署](_content/introduction/deployment.md)
+* **功能与使用**
+  * [接入设备](_content/ability/device.md)
+  * [设备使用](_content/ability/device_use.md)
+  * [国标级联](_content/ability/cascade2.md)
+  * [推流列表](_content/ability/push.md)
+  * [拉流代理](_content/ability/proxy.md)
+  * [电子地图](_content/ability/gis.md)
+  * [节点管理](_content/ability/node_manger.md)
+  * [云端录像](_content/ability/cloud_record.md)
+  * [不间断录像](_content/ability/continuous_recording.md)
+  * [语音对讲](_content/ability/continuous_broadcast.md)
+* **流程与原理**
+  * [统一编码规则](_content/theory/code.md)
+  * [树形结构](_content/theory/channel_tree.md)
+  * [注册流程](_content/theory/register.md)
+  * [点播流程](_content/theory/play.md)
+  * [级联语音喊话流程](_content/theory/broadcast_cascade.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)
+* [**免责声明**](_content/disclaimers.md)
+* [**关于本文档**](_content/about_doc.md)

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio