Prechádzať zdrojové kódy

补充文档, 修复通道查询错误

648540858 1 rok pred
rodič
commit
3f85c66328

BIN
doc/_content/ability/_media/img_16.png


+ 26 - 5
doc/_content/ability/device.md

@@ -1,5 +1,6 @@
 <!-- 接入设备 -->
 # 接入设备
+## 国标28181设备
 设备接入主要是需要在设备上配置28181上级也就是WVP-PRO的信息,只有信息一致的情况才可以注册成功。设备注册成功后打开WVP->国标设备,可以看到新增加的设备;[设备使用](./_content/ability/device_use.md),  
 主要有以下字段需要配置:  
 
@@ -19,15 +20,35 @@ domain宜采用ID统一编码的前十位编码。
 
 ![_media/img_16.png](_media/img_16.png)
 ***
-## 大华摄像头
+### 1. 大华摄像头
 ![_media/img_10.png](_media/img_10.png)
-## 大华NVR
+### 2. 大华NVR
 ![_media/img_11.png](_media/img_11.png)
-## 艾科威视摄像头
+### 3. 艾科威视摄像头
 ![_media/img_15.png](_media/img_15.png)
-## 水星摄像头
+### 4. 水星摄像头
 ![_media/img_12.png](_media/img_12.png)
-## 海康摄像头
+### 5. 海康摄像头
 ![_media/img_9.png](_media/img_9.png)
 
+## 直播推流设备
+这里以obs推流为例,很多无人机也是一样的,设置下推流地址就可以接入了
+1. 从wvp获取推流地址, 选择节点管理菜单,查看要推流的节点;
+   ![_media/img_19.png](_media/img_19.png)
+2. 拼接推流地址
+    得到的rtsp地址就是: rtsp://{流IP}:{RTSP PORT}/{app}/{stream}
+    得到的rtmp地址就是: rtsp://{流IP}:{RTMP PORT}/{app}/{stream}
+    其中流IP是设备可以连接到zlm的IP,端口是对应协议的端口号, app和stream自己定义就可以.
+3. 增加推流鉴权信息
+    wvp默认开启推流鉴权,拼接好的地址是不能直接推送的,会被返回鉴权失败,参考[推流规则](_content/ability/push?id=推流规则)
+4. 推流成功后可以再推流列表中看到推流设备,可以播放
+    此方式只支持设备实时流的播放,无其他功能, 推流信息在推流结束后会自动移除,在列表里就看不到了,如果需要推流信息需要为设备配置国标编号,这样才可以作为wvp的一个永久通道存在.
+
+## 接入非国标IPC设备或者其他流地址形式的设备
+这类设备的接入主要通过拉流代理的方式接入,原理就是zlm主动像播放器一样拉取这个流缓存在自己服务器供其他人播放.可以解决源设备并发访问能力差的问题.
+在拉流代理/添加代理后可以直接播放, 拉流代理也是同样只支持播放当前配置的流.
+
+
+
+
 [设备使用](_content/ability/device_use.md)

+ 10 - 6
doc/_content/ability/device_use.md

@@ -4,18 +4,18 @@
   点击列表末尾的“刷新”按钮,可以看到一个圆形进度条,等进度结束提示成功后即可更新完成,如果通道数量有变化你可以看点击左上角的![刷新](_media/img_14.png)即可看到通道数量的变化;如果通道数量仍未0,那么可能时对方尚未推送通道给你。
 ### 查看设备通道  
   点击列表末尾的“通道”按钮,
-### 查看设备定位  
-  点击列表末尾的“定位”按钮,即可跳转到地图页面看到设备的位置
 ### 编辑设备在WVP中一些功能
 点击列表末尾的“编辑”按钮,即可在打开的弹窗中对设备功能进行修改
 - 设备名称  
   如何未能从设备里读取到设备名称或者需要自己重命名,那么可以修改此选项。
+- 密码
+  支持为设备配置独立的密码.
+- 收流IP
+  如果你需要设备从指定的网络地址接入视频流,那么可以配置此IP,设备将会发流到这个IP,比如多网卡接入的服务器.或者存在网络映射的情况.
+- 流媒体ID
+  固定设备使用的流媒体ID,默认根据负载自动分配.
 - 字符集  
   修改读取设备数据时使用的字符集,默认为GB2312,但是GB2312收录的汉字不全,所以有时候回遇到乱码,可以修改为UTF-8来解决。
-- 地理坐标系  
-  展示此设备定位信息时使用的设用什么坐标系来解析经纬度,一般不用修改,如果遇到定位不准,可以修改尝试修改此选项解决。 
-- 目录结构  
-  展示设备的通道信息时,使用设备作为树形结构的依据,国标28181定义了两种树形结构,详情查看[国标28181的树形结构](./_content/theory/channel_tree.md);
 - 目录订阅  
   填写订阅周期即可对设备开启目录订阅,设备如果支持目录订阅那么设备在通道信息发生变化时就会通知WVP哪些通道发生了那些变化,包括通道增加/删除/更新/上线/下线/视频丢失/故障。0为取消订阅。
   一般NVR和平台对接可以开启此选项,直接接摄像机开启此选项意义不大。
@@ -23,6 +23,10 @@
   对设备开启移动位置订阅,设备如果支持目录订阅那么设备位置发生变化时会通知到WVP,一般执法记录仪可以开启此选项,对固定位置的设备意义不大。
 - SSRC校验  
   为了解决部分设备出现的串流问题,可以打开此选项。ZLM会严格按照给定的ssrc处理视频流。部分设备流信息不标准,开启可能导致无法点播。
+- 作为消息通道
+  wvp支持通过报警消息给下级WVP互相推送消息,消息内容由redis消息发送给wvp,wvp编辑成报警消息发送给下级
+- 收到ACK后发流
+  语音对讲策略: 不同的设备对于语音对讲的收流时机要求不一,勾选后会在收到设备发送的ack后再开始发流,不勾选则在回复200OK后开始发流,目前已知大华设备不勾选,海康需要勾选.
 ### 删除设备  
   可以删除WVP中的设备信息,如果设备28181配置未更改,那么设备在下一次注册后仍然会注册上来。
 ### 点播视频  

BIN
doc/_content/introduction/_media/img_1.png


BIN
doc/_content/introduction/_media/img_2.png


+ 1 - 1
doc/_content/introduction/config.md

@@ -118,7 +118,7 @@ media:
     # [可选] 国标级联在此范围内选择端口发送媒体流,
     send-port-range: 40000,40300 # 端口范围
 ```
-### 2.4 个性化定制信息配置
+### 2.4 策略配置
 ```yaml
 # [根据业务需求配置]
 user-settings:

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/gb28181/dao/provider/DeviceChannelProvider.java

@@ -58,7 +58,7 @@ public class DeviceChannelProvider {
     public String queryChannels(Map<String, Object> params ){
         StringBuilder sqlBuild = new StringBuilder();
         sqlBuild.append(getBaseSelectSql());
-        sqlBuild.append(" where 1=1");
+        sqlBuild.append(" where dc.device_db_id = #{deviceDbId}");
         if (params.get("query") != null) {
             sqlBuild.append(" AND coalesce(dc.gb_device_id, dc.device_id) LIKE concat('%',#{query},'%')" +
                     " OR coalesce(dc.gb_name, dc.name) LIKE concat('%',#{query},'%')")

+ 25 - 0
src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/PlatformServiceImpl.java

@@ -246,6 +246,31 @@ public class PlatformServiceImpl implements IPlatformService {
         return false;
     }
 
+    private void unregister(Platform platform) {
+        // 停止心跳定时
+        final String keepaliveTaskKey = KEEPALIVE_KEY_PREFIX + platform.getServerGBId();
+        dynamicTask.stop(keepaliveTaskKey);
+        // 停止注册定时
+        final String registerTaskKey = REGISTER_KEY_PREFIX + platform.getServerGBId();
+        dynamicTask.stop(registerTaskKey);
+
+        PlatformCatch platformCatchOld = redisCatchStorage.queryPlatformCatchInfo(platform.getServerGBId());
+        // 注销旧的
+        try {
+            if (platform.isStatus()) {
+                commanderForPlatform.unregister(platform, platformCatchOld.getSipTransactionInfo(), null, eventResult -> {
+                    log.info("[国标级联] 注销命令发送成功,平台:{}", platform.getServerGBId());
+                });
+            }
+        } catch (InvalidArgumentException | ParseException | SipException e) {
+            log.error("[命令发送失败] 国标级联 注销: {}", e.getMessage());
+        }
+    }
+
+    private void register(Platform platform) {
+
+    }
+
 
     @Override
     public void online(Platform platform, SipTransactionInfo sipTransactionInfo) {

+ 0 - 4
web_src/src/components/DeviceList.vue

@@ -77,10 +77,6 @@
                      @click="showChannelList(scope.row)">通道
           </el-button>
           <el-divider direction="vertical"></el-divider>
-          <el-button size="medium" icon="el-icon-location" type="text"
-                     @click="showDevicePosition(scope.row)">定位
-          </el-button>
-          <el-divider direction="vertical"></el-divider>
           <el-button size="medium" icon="el-icon-edit" type="text" @click="edit(scope.row)">编辑</el-button>
           <el-divider direction="vertical"></el-divider>
           <el-button size="medium" icon="el-icon-delete" type="text" @click="deleteDevice(scope.row)" style="color: #f56c6c">删除</el-button>