Pre Merge pull request !26 from heyn/wvp-28181-2.0

This commit is contained in:
heyn 2023-07-08 20:45:49 +00:00 committed by Gitee
commit 99852ca59b
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
671 changed files with 94863 additions and 11802 deletions

36
.github/ISSUE_TEMPLATE/bug.md vendored Normal file
View File

@ -0,0 +1,36 @@
---
name: "[ BUG ] "
about: 关于wvp的bug与zlm有关的建议直接在zlm的issue中提问
title: 'BUG'
labels: 'wvp的bug'
assignees: ''
---
**环境信息:**
- 1. 部署方式 wvp-pro docker / zlm(docker) + 编译wvp-pro/ wvp-prp + zlm都是编译部署/
- 2. 部署环境 windows / ubuntu/ centos ...
- 3. 端口开放情况
- 4. 是否是公网部署
- 5. 是否使用https
- 6. 方便的话提供下使用的设备品牌或平台
- 7. 你做过哪些尝试
- 8. 代码更新时间
**描述错误**
描述下您遇到的问题
**如何复现**
有明确复现步骤的问题会很容易被解决
**截图**
**抓包文件**
**日志**
```
日志内容放这里, 文件的话请直接上传
```

13
.github/ISSUE_TEMPLATE/new.md vendored Normal file
View File

@ -0,0 +1,13 @@
---
name: "[ 新功能 ]"
about: 新功能
title: '希望wVP实现的新功能此功能应与你的具体业务无关'
labels: ''
assignees: ''
---
**项目的详细需求**
**这样的实现什么作用**

31
.github/ISSUE_TEMPLATE/solve.md vendored Normal file
View File

@ -0,0 +1,31 @@
---
name: "[ 技术咨询 ] "
about: 对于使用中遇到问题
title: '技术咨询'
labels: '技术咨询'
assignees: ''
---
**环境信息:**
- 1. 部署方式 wvp-pro docker / zlm(docker) + 编译wvp-pro/ wvp-prp + zlm都是编译部署/
- 2. 部署环境 windows / ubuntu/ centos ...
- 3. 端口开放情况
- 4. 是否是公网部署
- 5. 是否使用https
- 6. 方便的话提供下使用的设备品牌或平台
- 7. 你做过哪些尝试
- 8. 代码更新时间
**内容描述:**
**截图**
**抓包文件**
**日志**
```
日志内容放这里, 文件的话请直接上传
```

4
.gitignore vendored
View File

@ -3,7 +3,7 @@
# Log file # Log file
*.log *.log
logs/*
# BlueJ files # BlueJ files
*.ctxt *.ctxt
@ -26,3 +26,5 @@ hs_err_pid*
/.idea/ /.idea/
/target/ /target/
/src/main/resources/static/
certificates

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "be.teletask.onvif-java"]
path = be.teletask.onvif-java
url = https://gitee.com/pan648540858/be.teletask.onvif-java.git

View File

@ -1,32 +1,130 @@
FROM ubuntu:19.10 #很久没维护了,已经与定前版本不匹配
FROM ubuntu:20.04 AS build
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
EXPOSE 18080/tcp EXPOSE 18080/tcp
EXPOSE 5060/tcp EXPOSE 5060/tcp
EXPOSE 5060/udp
EXPOSE 6379/tcp
EXPOSE 18081/tcp
EXPOSE 80/tcp
EXPOSE 1935/tcp
EXPOSE 554/tcp
EXPOSE 554/udp
EXPOSE 30000-30500/tcp
EXPOSE 30000-30500/udp
ENV LC_ALL zh_CN.UTF-8
# 使用了自己的settings.xml作为maven的源,加快打包速度 # 使用了自己的settings.xml作为maven的源,加快打包速度
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends openjdk-11-jre git maven nodejs npm && \ DEBIAN_FRONTEND="noninteractive" && \
cd /home && \ apt-get install -y --no-install-recommends openjdk-11-jre git maven nodejs npm build-essential tcl language-pack-zh-hans \
git clone https://github.com/648540858/wiki.git && \ cmake curl vim ca-certificates tzdata libmysqlclient-dev redis-server libssl-dev libx264-dev libfaac-dev ffmpeg
cp wiki/config/settings.xml /usr/share/maven/conf/ && \ WORKDIR /home
git clone https://github.com/648540858/wvp-GB28181.git && \
cd /home/wvp-GB28181/web_src && \ RUN git clone https://gitee.com/pan648540858/maven.git && \
npm install npm -g && \ cp maven/settings.xml /usr/share/maven/conf/ && \
npm install nrm -g && \ git clone https://gitee.com/pan648540858/wvp-GB28181.git && \
nrm use taobao && \ git clone https://gitee.com/pan648540858/wvp-pro-assist.git
npm install && \ # 编译前端界面
WORKDIR /home/wvp-GB28181/web_src
RUN npm install && \
npm run build && \ npm run build && \
mkdir -p /opt/wvp/config && \ mkdir -p /opt/wvp/config && \
cd /home/wvp-GB28181 && \ mkdir -p /opt/assist/config && \
mvn compile && \ cp /home/wvp-GB28181/src/main/resources/application-dev.yml /opt/wvp/config/application.yml && \
cp /home/wvp-pro-assist/src/main/resources/application-dev.yml /opt/assist/config/application.yml
# wvp打包
WORKDIR /home/wvp-GB28181
RUN mvn compile && \
mvn package && \ mvn package && \
cp /home/wvp-GB28181/target/wvp-1.5.10.RELEASE.jar /opt/wvp/ && \ cp /home/wvp-GB28181/target/wvp*.jar /opt/wvp/
rm -rf /home/wiki && \
# wvp 录像管理打包
WORKDIR /home/wvp-pro-assist
RUN mvn compile && \
mvn package && \
cp /home/wvp-pro-assist/target/*.jar /opt/assist/
# zlm打包
WORKDIR /home
RUN mkdir -p /opt/media && \
git clone --depth=1 https://gitee.com/xia-chu/ZLMediaKit && \
cd ZLMediaKit && git submodule update --init --recursive && \
mkdir -p build release/linux/Release/ &&\
cd build && \
cmake -DCMAKE_BUILD_TYPE=Release .. && \
make -j4 && \
rm -rf ../release/linux/Release/config.ini && \
cp -r ../release/linux/Release/* /opt/media && \
mkdir -p /opt/media/www/record
# 清理
RUN rm -rf /home/wiki && \
rm -rf /home/wvp-GB28181 && \ rm -rf /home/wvp-GB28181 && \
apt-get autoremove -y git maven nodejs npm && \ apt-get autoremove -y git maven nodejs npm && \
apt-get clean -y && \ apt-get clean -y && \
rm -rf /var/lib/apt/lists/*dic rm -rf /var/lib/apt/lists/*dic
WORKDIR /opt/wvp WORKDIR /opt/wvp
RUN echo '#!/bin/bash' > run.sh && \
echo 'echo ${WVP_IP}' >> run.sh && \
echo 'echo ${WVP_CONFIG}' >> run.sh && \
echo 'redis-server --daemonize yes --bind 0.0.0.0' >> run.sh && \
echo 'cd /opt/assist' >> run.sh && \
echo 'nohup java -jar *.jar --userSettings.record=/opt/media/www/record/ &' >> run.sh && \
echo 'nohup /opt/media/MediaServer -d -m 3 &' >> run.sh && \
echo 'cd /opt/wvp' >> run.sh && \
echo 'if [-n "${WVP_CONFIG}"]; then' >> run.sh && \
echo ' java -jar *.jar --spring.config.location=/opt/wvp/config/application.yml --media.record-assist-port=18081 ${WVP_CONFIG}' >> run.sh && \
echo 'else' >> run.sh && \
echo ' java -jar *.jar --spring.config.location=/opt/wvp/config/application.yml --media.record-assist-port=18081 --media.ip=127.0.0.1 --media.sdp-ip=${WVP_IP} --sip.ip=${WVP_IP} --media.stream-ip=${WVP_IP}' >> run.sh && \
echo 'fi' >> run.sh
RUN chmod +x run.sh
CMD java -jar wvp-1.5.10.RELEASE.jar --spring.config.location=/opt/wvp/config/application.yml FROM ubuntu:20.04
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
EXPOSE 18080/tcp
EXPOSE 5060/tcp
EXPOSE 5060/udp
EXPOSE 6379/tcp
EXPOSE 18081/tcp
EXPOSE 80/tcp
EXPOSE 1935/tcp
EXPOSE 554/tcp
EXPOSE 554/udp
EXPOSE 30000-30500/tcp
EXPOSE 30000-30500/udp
ENV LC_ALL zh_CN.UTF-8
RUN apt-get update && \
DEBIAN_FRONTEND="noninteractive" && \
apt-get install -y --no-install-recommends openjdk-11-jre tcl language-pack-zh-hans \
ca-certificates tzdata libmysqlclient21 redis-server libssl1.1 libx264-155 libfaac0 ffmpeg && \
apt-get autoremove -y && \
apt-get clean -y && \
rm -rf /var/lib/apt/lists/*dic
WORKDIR /opt/wvp
COPY --from=build /opt /opt
CMD ["sh", "run.sh"]

168
README.md
View File

@ -1,73 +1,131 @@
# wvp ![logo](doc/_media/logo.png)
WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台负责实现核心信令与设备管理后台部分支持NAT穿透支持海康、大华、宇视等品牌的IPC、NVR、DVR接入。 # 开箱即用的28181协议视频平台
流媒体服务基于ZLMediaKit-https://github.com/xiongziliang/ZLMediaKit
前段页面基于MediaServerUI进行修改. [![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等设备接入. 支持浏览器无插件播放摄像头视频。
# 项目目标 支持国标设备(摄像机、平台、NVR等)设备接入
旨在打造一个易配置,易使用,便于维护的28181国标信令系统, 依托优秀的开源流媒体服务框架ZLMediaKit, 实现一个完整易用GB28181平台. 支持非国标(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)
> wvp文档由gitee提供服务如果遇到打不开请多刷新几次。
# 付费社群
[![社群](doc/_media/shequ.png "shequ")](https://t.zsxq.com/0d8VAD3Dm)
> 收费是为了提供更好的服务,也是对作者更大的激励。加入星球的用户三天后可以私信我留下微信号,我会拉大家入群。加入三天内不满意可以直接退款,大家不需要有顾虑,来白嫖三天也不是不可以。
# gitee同步仓库 # gitee同步仓库
https://gitee.com/18010473990/wvp-GB28181.git https://gitee.com/pan648540858/wvp-GB28181-pro.git
# 截图 # 截图
![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_1.png) ![index](doc/_media/index.png "index.png")
![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_2.png) ![2](doc/_media/2.png "2.png")
![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_151459.png) ![3](doc/_media/3.png "3.png")
![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_152643.png) ![3-1](doc/_media/3-1.png "3-1.png")
![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_151606.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")
# 原版特性: # 功能特性
1. 视频预览; - [X] 集成web界面
2. 云台控制(方向、缩放控制); - [X] 兼容性良好
3. 视频设备信息同步; - [X] 支持电子地图支持接入WGS84和GCJ02两种坐标系并且自动转化为合适的坐标系进行展示和分发
4. 离在线监控; - [X] 接入设备
5. 录像查询与回放基于NVR\DVR暂不支持快进、seek操作; - [X] 视频预览
6. 无人观看自动断流; - [X] 无限制接入路数,能接入多少设备只取决于你的服务器性能
7. 支持UDP和TCP两种国标信令传输模式; - [X] 云台控制,控制设备转向,拉近,拉远
- [X] 预置位查询,使用与设置
# 新支持特性 - [X] 查询NVR/IPC上的录像与播放支持指定时间播放与下载
1. 集成web界面, 不需要单独部署前端服务, 直接利用wvp内置文件服务部署, 随wvp一起部署; - [X] 无人观看自动断流,节省流量
2. 支持平台接入, 针对大平台大量设备的情况进行优化; - [X] 视频设备信息同步
3. 支持检索,通道筛选; - [X] 离在线监控
4. 支持自动配置ZLM媒体服务, 减少因配置问题所出现的问题; - [X] 支持直接输出RTSP、RTMP、HTTP-FLV、Websocket-FLV、HLS多种协议流地址
5. 支持启用udp多端口模式, 提高udp模式下媒体传输性能; - [X] 支持通过一个流地址直接观看摄像头,无需登录以及调用任何接口
6. 支持通道是否含有音频的设置; - [X] 支持UDP和TCP两种国标信令传输模式
7. 支持通道子目录查询; - [X] 支持UDP和TCP两种国标流传输模式
8. 支持udp/tcp国标流传输模式; - [X] 支持检索,通道筛选
9. 支持直接输出RTSP、RTMP、HTTP-FLV、Websocket-FLV、HLS多种协议流地址 - [X] 支持通道子目录查询
10. 支持国标网络校时 - [X] 支持过滤音频,防止杂音影响观看
11. 支持公网部署, 支持wvp与zlm分开部署 - [X] 支持国标网络校时
12. 支持播放h265, g.711格式的流 - [X] 支持播放H264和H265
13. 支持固定流地址和自动点播,同时支持未点播时直接播放流地址,代码自动发起点播. ( [查看WIKI](https://github.com/648540858/wvp-GB28181-pro/wiki/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E5%9B%BA%E5%AE%9A%E6%92%AD%E6%94%BE%E5%9C%B0%E5%9D%80%E4%B8%8E%E8%87%AA%E5%8A%A8%E7%82%B9%E6%92%AD) - [X] 报警信息处理,支持向前端推送报警信息
14. 报警信息处理,支持向前端推送报警信息 - [X] 支持订阅与通知方法
15. 支持订阅与通知方法
- [X] 移动位置订阅 - [X] 移动位置订阅
- [X] 移动位置通知处理 - [X] 移动位置通知处理
- [ ] 报警事件订阅 - [X] 报警事件订阅
- [X] 报警事件通知处理 - [X] 报警事件通知处理
- [ ] 设备目录订阅 - [X] 设备目录订阅
- [X] 设备目录通知处理 - [X] 设备目录通知处理
16. 移动位置查询和显示,可通过配置文件设置移动位置历史是否存储 - [X] 移动位置查询和显示
- [X] 支持手动添加设备和给设备设置单独的密码
- [X] 支持平台对接接入
- [X] 支持国标级联
- [X] 国标通道向上级联
- [X] WEB添加上级平台
- [X] 注册
- [X] 心跳保活
- [X] 通道选择
- [X] 通道推送
- [X] 点播
- [X] 云台控制
- [X] 平台状态查询
- [X] 平台信息查询
- [X] 平台远程启动
- [X] 每个级联平台可自定义的虚拟目录
- [X] 目录订阅与通知
- [X] 录像查看与播放
- [X] GPS订阅与通知直播推流
- [X] 支持自动配置ZLM媒体服务, 减少因配置问题所出现的问题;
- [X] 多流媒体节点,自动选择负载最低的节点使用。
- [X] 支持启用udp多端口模式, 提高udp模式下媒体传输性能;
- [X] 支持公网部署;
- [X] 支持wvp与zlm分开部署提升平台并发能力
- [X] 支持拉流RTSP/RTMP分发为各种流格式或者推送到其他国标平台
- [X] 支持推流RTSP/RTMP分发为各种流格式或者推送到其他国标平台
- [X] 支持推流鉴权
- [X] 支持接口鉴权
- [X] 云端录像,推流/代理/国标视频均可以录制在云端服务器,支持预览和下载
- [X] 支持打包可执行jar和war
- [X] 支持跨域请求,支持前后端分离部署
- [X] 支持MysqlPostgresql金仓等数据库
- [X] 支持Onvif(目前在onvif分支需要安装onvif服务服务请在知识星球获取)
# 待实现: # 授权协议
上级级联 本项目自有代码使用宽松的MIT协议在保留版权信息的情况下可以自由应用于各自商用、非商业的项目。 但是本项目也零碎的使用了一些其他的开源代码,在商用的情况下请自行替代或剔除; 由于使用本项目而产生的商业纠纷或侵权行为一概与本项目及开发者无关,请自行承担法律风险。 在使用本项目代码时,也应该在授权协议中同时表明本项目依赖的第三方库的协议
推流列表
拉流列表
web界面系统设置
使用mysql作为数据库
# 项目部署 # 技术支持
参考:[WIKI](https://github.com/648540858/wvp-GB28181-pro/wiki)
# gitee同步仓库 [知识星球](https://t.zsxq.com/0d8VAD3Dm)专栏列表:
https://gitee.com/18010473990/wvp-GB28181.git - [使用入门系列一WVP-PRO能做什么](https://t.zsxq.com/0dLguVoSp)
# 使用帮助 有偿技术支持请发送邮件到648540858@qq.com
QQ群: 901799015, 542509000(ZLM大群)
QQ私信一般不回, 精力有限.欢迎大家在群里讨论.
# 致谢 # 致谢
感谢作者[夏楚](https://github.com/xiongziliang) 提供这么棒的开源流媒体服务框架 感谢作者[夏楚](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)

91
bootstrap.sh Normal file
View File

@ -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
doc/README.md Normal file
View File

@ -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] 目录订阅
- [ ] 语音广播
- [ ] 语音对讲
# 社区
代码目前托管在GitHub和GiteeGitee目前作为加速仓库使用不接受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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 99 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

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

View File

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

View File

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

View File

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

View File

@ -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使用多端口收流不然你无法得到一个固定的流地址也就无法实现自动点播。

View File

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

View File

@ -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功能有关更与网络有关。

View File

@ -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
}
```

View File

@ -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进行使用。以此保证节点负载均衡。

View File

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

View File

@ -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配置文件中添加一个即可。

View File

@ -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默认开启推流鉴权目前不支持关闭此功能
### 推流规则
推流时需要携带推流鉴权的签名signsign=md5(pushKey),pushKey来自用户表每个用户会有一个不同的pushKey.
例如app=teststream=livepushKey=1000ip=192.168.1.4, port=10554 那么推流地址为:
```
rtsp://192.168.1.4:10554/test/live?sign=a9b7ba70783b617e9998dc4dd82eb3c5
```
支持推流时自定义播放鉴权Id参数名为callId此时sign=md5(callId_pushKey)
例如app=teststream=livepushKey=1000callId=12345678, ip=192.168.1.4, port=10554 那么推流地址为:
```
rtsp://192.168.1.4:10554/test/live?callId=12345678&sign=c8e6e01dde2d60c66dcea8d2498ffef1
```
### 播放规则
默认情况播放不需要鉴权但是如果推流时携带了callId那么播放时必须携带callId
例如app=teststream=live无callId, ip=192.168.1.4, port=10554 那么播放地址为:
```
rtsp://192.168.1.4:10554/test/live
```
例如app=teststream=livecallId=12345678, ip=192.168.1.4, port=10554 那么播放地址为:
```
rtsp://192.168.1.4:10554/test/live?callId=12345678
```

View File

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

View File

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

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

View File

@ -0,0 +1,100 @@
<!-- 编译 -->
# 编译
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的媒体部分的实现以及各种视频流格式的分发支持 | 是 |
| wvp-pro-assist | wvp的辅助录像程序也可单独跟zlm一起使用提供录像控制,录像合并下载接口 | 否(不安装只是影响云端录像功能和国标录像下载) |
## 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)

View File

@ -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支持多种数据库包括MysqlPostgresql金仓等配置任选一种即可。
### 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服务器的内网IPsdp-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
# 是否将日志存储进数据库
logInDatebase: true
# 第三方匹配用于从stream钟获取有效信息
thirdPartyGBIdReg: [\s\S]*
```
如果配置信息无误你可以启动zlm再启动wvp来测试了启动成功的话你可以在wvp的日志下看到zlm已连接的提示。
接下来[部署到服务器](./_content/introduction/deployment.md) 如何你只是本地运行直接再本地运行即可。

View File

@ -0,0 +1,58 @@
<!-- 部署 -->
# 部署
**请仔细阅读以下内容**
1. WVP-PRO与ZLM支持分开部署但是wvp-pro-assist必须与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. WVP-PRO与ZLM支持分开部署但是wvp-pro-assist必须与zlm部署在同一台主机;
5. 生产环境按需开放端口但是建议修改默认端口尤其是5060端口易受到攻击;
6. zlm使用docker部署的情况要求端口映射一致比如映射5060,应将外部端口也映射为5060端口;
7. 启动服务以linux为例
### 启动WVP-PRO
**jar包**
```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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

12
doc/_content/qa/bug.md Normal file
View File

@ -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)
> 收费是为了提供更好的服务,也是对作者更大的激励。加入星球的用户三天后可以私信我留下微信号,我会拉大家入群。加入三天内不满意可以直接退款,大家不需要有顾虑,来白嫖三天也不是不可以。

View File

@ -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
doc/_content/qa/img.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

View File

@ -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播放看看是否可以播放。

View File

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

View File

@ -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端口被占用
---

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -0,0 +1,62 @@
<!-- 抓包 -->
# 抓包
如果说对于网络编程有什么工具是必会的我觉得抓包肯定是其中之一了。作为GB/T 28181调试过程中最重要的手段我觉得如果你真对他有兴趣或者系统遇到问题可以最快的得到解决那么抓包你就一定要学会了。
## 抓包工具的选择
### 1. Wireshark
在具备图形界面的系统上比如windowslinux发行版ubuntuopensuse等我一般直接使用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)

Binary file not shown.

After

Width:  |  Height:  |  Size: 96 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

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

View File

@ -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
doc/_content/theory/img.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -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会话结束成功。

View File

@ -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
doc/_coverpage.md Normal file
View File

@ -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
doc/_media/1372762149.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 126 KiB

BIN
doc/_media/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 469 KiB

BIN
doc/_media/3-1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

BIN
doc/_media/3-2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 KiB

BIN
doc/_media/3-3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

BIN
doc/_media/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
doc/_media/903207146.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

BIN
doc/_media/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
doc/_media/index.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
doc/_media/logo-mini.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/_media/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

BIN
doc/_media/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
doc/_media/shequ.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

BIN
doc/_media/weixin.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

BIN
doc/_media/zhifubao.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 421 KiB

Some files were not shown because too many files have changed in this diff Show More