Parcourir la source

change
1. 预置位界面调整
2. 预置位功能调试
3. 修复wvp异常情况下推流缓存异常问题

kindring il y a 2 ans
Parent
commit
edc22f85ff

+ 11 - 0
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java

@@ -155,6 +155,17 @@ public class PlayServiceImpl implements IPlayService {
             MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
             JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaInfo, streamId);
 
+            // 判断rtpserver是否为null
+            if (rtpInfo == null) {
+                logger.info("rtpInfo为null");
+                wvpResult.setCode(ErrorCode.ERROR100.getCode());
+                wvpResult.setMsg("点播失败,请重试 rtpInfo为null");
+                msg.setData(wvpResult);
+                redisCatchStorage.stopPlay(streamInfo);
+                resultHolder.invokeAllResult(msg);
+                return;
+            }
+
             if (rtpInfo.getInteger("code") == 0) {
                 if (rtpInfo.getBoolean("exist")) {
                     int localPort = rtpInfo.getInteger("local_port");

+ 6 - 2
src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java

@@ -1,14 +1,17 @@
 package com.genersoft.iot.vmp.vmanager.bean;
 
 
+import com.fasterxml.jackson.annotation.JsonInclude;
 import io.swagger.v3.oas.annotations.media.Schema;
 
 @Schema(description = "统一返回结果")
+
 public class WVPResult<T> implements Cloneable{
 
     public WVPResult() {
     }
 
+
     public WVPResult(int code, String msg, T data) {
         this.code = code;
         this.msg = msg;
@@ -35,16 +38,17 @@ public class WVPResult<T> implements Cloneable{
     @Schema(description = "数据")
     private T data;
 
+    @JsonInclude(JsonInclude.Include.NON_NULL)
     @Schema(description = "查询数据量")
     private int limit;
 
 
-
+    @JsonInclude(JsonInclude.Include.NON_NULL)
     @Schema(description = "查询页数")
     private int page;
 
 
-
+    @JsonInclude(JsonInclude.Include.NON_NULL)
     @Schema(description = "总条数")
     private int total;
 

+ 10 - 0
web_src/src/assets/index.css

@@ -8,6 +8,9 @@
 .justify-center{
   justify-content: center;
 }
+.items-center{
+  align-items: center;
+}
 .xy-center{
   align-items: center;
   justify-content: center;
@@ -77,3 +80,10 @@
   color: black;
   font-weight: bold;
 }
+
+.ml-1{
+  margin-left: 1em;
+}
+.ml-2{
+  margin-left: 2em;
+}

+ 72 - 16
web_src/src/components/common/ptzControl.vue

@@ -45,14 +45,15 @@
 
     <div class="control-panel">
 <!--      预置位 -->
-      <el-tabs tab-position="left" style="height: 200px;">
+      <el-tabs tab-position="left" style="height: 210px;width:100%">
         <el-tab-pane label="预置位">
 <!--          预置位查询 -->
           <el-table
             v-loading="presetLoading"
             :data="presetList"
-            height="100%"
-            :row-style="{height: 30}"
+            height="260px"
+            width="100%"
+            :row-style="{height: '20px',fontSize: '12px'}"
             style="width: 100%;font-size: 16px">
             <el-table-column
               prop="ind"
@@ -65,10 +66,33 @@
               width="100">
             </el-table-column>
             <el-table-column
-              prop="operation">
-
+              prop="operation"
+            >
+              <template slot-scope="scope">
+                <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(129, scope.row.ind)">设置</el-button>
+                <el-button v-if="scope.row.load" class="ml-2" type="primary" size="mini" @click="presetPosition(130, scope.row.ind)">调用</el-button>
+                <el-button v-if="scope.row.load" class="ml-2" type="danger" size="mini" @click="presetPosition(131, scope.row.ind)">删除</el-button>
+              </template>
               <template slot="header" slot-scope="scope">
-                <el-button type="primary" size="mini" icon="el-icon-refresh" @click="queryPresetPos"></el-button>
+                <div class="w-full flex">
+<!--                  input number -->
+
+                  <el-popover
+                    placement="bottom"
+                    title="快速预置位"
+                    width="400"
+                    trigger="click">
+                    <div class="w-full flex justify-center items-center">
+                      <el-input-number size="mini" :min="1" :max="255" v-model="presetPos"></el-input-number>
+
+                      <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(129, presetPos)">设置</el-button>
+                      <el-button class="ml-2" type="primary" size="mini" @click="presetPosition(130, presetPos)">调用</el-button>
+                      <el-button class="ml-2" type="danger" size="mini" @click="presetPosition(131, presetPos)">删除</el-button>
+                    </div>
+                    <el-button slot="reference">快速预置位</el-button>
+                  </el-popover>
+                  <el-button class="ml-2" type="primary" size="mini" icon="el-icon-refresh" @click="queryPresetPos"></el-button>
+                </div>
               </template>
             </el-table-column>
           </el-table>
@@ -167,6 +191,7 @@ export default {
       httpHook: "",
       presetList: [],
       presetLoading: false,
+      presetInd: 1,// 选择的预置位id
     }
   },
   beforeMount() {
@@ -183,6 +208,11 @@ export default {
       console.log('短按自动跟发stop');
       this.ptzCamera('stop');
     },
+    testHandle(key, item){
+      console.log('testHandle')
+      console.log(key)
+      console.log(item)
+    },
     async ptzCamera(command){
       console.log('云台控制:' + command);
       let isSendFocus = false;
@@ -402,7 +432,7 @@ export default {
         this.httpHook = response.data["httpHook"];
         this.pushKey = response.data["pushKey"];
       }else{
-        this.$message.warning(res.msg)
+        this.$message.warning(response.msg)
       }
 
     },
@@ -411,7 +441,15 @@ export default {
       console.log('请求预置位');
       this.presetLoading = true;
       let n_presetLength = 255;
-      let presetList = new Array(n_presetLength);
+      let presetList = new Array(n_presetLength).fill({}).map((item,i)=>{
+        return {
+          ind: i+1,
+          remark: `预置位${i+1}`,
+          load: false
+        }
+      })
+
+      console.log( presetList);
       let queryUrl = `/api/ptz/preset/query/${this.deviceId}/${this.channelId}`
       // 加载预置位
       let [err,res] = await handle(this.$axios.axios({
@@ -419,13 +457,6 @@ export default {
         url: queryUrl
       }));
       this.presetLoading = false;
-      presetList = presetList.map((item,i)=>{
-        return {
-          ind: i+1,
-          remark: `预置位${i+1}`,
-          load: false,
-        }
-      })
       if (err){
         if(err){
           console.error(err)
@@ -434,12 +465,34 @@ export default {
         }
       }
       console.log(res);
+      /**
+       * res = {
+       *  "code": 0,
+       *  "msg": "success",
+       *  "data": [
+       *  {
+       *  "presetId": 1,
+       *  "presetName": "预置位1",
+       *  }
+       *  ]
+       */
       let response = res.data;
       if (response.code === 0){
 
+        response.data.forEach(item=>{
+          console.log(item.presetId)
+          console.log(presetList[item.presetId-1])
+          presetList[item.presetId-1] = {
+              ind: item.presetId,
+              remark: item.presetName,
+              load: true,
+          }
+        });
       }else{
-        this.$message.warning(res.msg)
+        this.$message.warning(response.msg)
       }
+      console.log(presetList);
+      this.presetList = presetList;
 
     }
   },
@@ -464,11 +517,13 @@ export default {
   border-radius: 100%;
   margin-top: 1.5rem;
   margin-left: 0.5rem;
+  flex-shrink: 0;
   float: left;
 }
 
 .control-panel {
   position: relative;
+  width: 100%;
   top: 0;
   left: 5rem;
   height: 11rem;
@@ -640,4 +695,5 @@ export default {
   width: 80%;
   padding: 0 10%;
 }
+
 </style>