From d4ae8194eb87271423aba24bab0f0d815d5ffdc1 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 13 十月 2020 14:46:47 +0800
Subject: [PATCH] 离在线状态样式修改 修复未回复200ok导致catalog一直发送的bug 修改点播接口未收到视频后回复

---
 src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java                        |   16 +-
 src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java                               |   15 +-
 src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java            |   24 +++-
 src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java                          |   16 ++
 web_src/src/components/channelList.vue                                                         |   23 +++-
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java                |   17 +-
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java                         |   36 ++++++
 src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java                                     |   58 +++++++----
 web_src/src/components/videoList.vue                                                           |    6 
 web_src/src/components/gb28181/devicePlayer.vue                                                |    1 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java |    5 
 src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java          |   42 +++++--
 12 files changed, 179 insertions(+), 80 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
index 6e876be..0e7da44 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
@@ -3,11 +3,13 @@
 public class StreamInfo {
 
     private String ssrc;
+    private String deviceID;
+    private String cahnnelId;
     private String flv;
-    private String WS_FLV;
-    private String RTMP;
-    private String HLS;
-    private String RTSP;
+    private String ws_flv;
+    private String rtmp;
+    private String hls;
+    private String rtsp;
 
     public String getSsrc() {
         return ssrc;
@@ -25,35 +27,51 @@
         this.flv = flv;
     }
 
-    public String getWS_FLV() {
-        return WS_FLV;
+    public String getWs_flv() {
+        return ws_flv;
     }
 
-    public void setWS_FLV(String WS_FLV) {
-        this.WS_FLV = WS_FLV;
+    public void setWs_flv(String ws_flv) {
+        this.ws_flv = ws_flv;
     }
 
-    public String getRTMP() {
-        return RTMP;
+    public String getRtmp() {
+        return rtmp;
     }
 
-    public void setRTMP(String RTMP) {
-        this.RTMP = RTMP;
+    public void setRtmp(String rtmp) {
+        this.rtmp = rtmp;
     }
 
-    public String getHLS() {
-        return HLS;
+    public String getHls() {
+        return hls;
     }
 
-    public void setHLS(String HLS) {
-        this.HLS = HLS;
+    public void setHls(String hls) {
+        this.hls = hls;
     }
 
-    public String getRTSP() {
-        return RTSP;
+    public String getRtsp() {
+        return rtsp;
     }
 
-    public void setRTSP(String RTSP) {
-        this.RTSP = RTSP;
+    public void setRtsp(String rtsp) {
+        this.rtsp = rtsp;
+    }
+
+    public String getDeviceID() {
+        return deviceID;
+    }
+
+    public void setDeviceID(String deviceID) {
+        this.deviceID = deviceID;
+    }
+
+    public String getCahnnelId() {
+        return cahnnelId;
+    }
+
+    public void setCahnnelId(String cahnnelId) {
+        this.cahnnelId = cahnnelId;
     }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 3a971a7..481bb43 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -242,14 +242,15 @@
 			StreamInfo streamInfo = new StreamInfo();
 			streamInfo.setSsrc(ssrc);
 //			String streamId = Integer.toHexString(Integer.parseInt(streamInfo.getSsrc()));
-			String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase(); // ZLM 瑕佹眰澶у啓涓旈浣嶈ˉ闆�
-			streamInfo.setFlv(String.format("http://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
-			streamInfo.setWS_FLV(String.format("ws://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
-			streamInfo.setRTMP(String.format("rtmp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtmpPort(), streamId));
-			streamInfo.setHLS(String.format("http://%s:%s/rtp/%s/hls.m3u8", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
-			streamInfo.setRTSP(String.format("rtsp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtspPort(), streamId));
-
-			storager.startPlay(device.getDeviceId(), channelId, streamInfo);
+//			String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase(); // ZLM 瑕佹眰澶у啓涓旈浣嶈ˉ闆�
+//			streamInfo.setFlv(String.format("http://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
+//			streamInfo.setWS_FLV(String.format("ws://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
+//			streamInfo.setRTMP(String.format("rtmp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtmpPort(), streamId));
+//			streamInfo.setHLS(String.format("http://%s:%s/rtp/%s/hls.m3u8", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
+//			streamInfo.setRTSP(String.format("rtsp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtspPort(), streamId));
+			streamInfo.setCahnnelId(channelId);
+			streamInfo.setDeviceID(device.getDeviceId());
+			storager.startPlay(streamInfo);
 			return streamInfo;
 		} catch ( SipException | ParseException | InvalidArgumentException e) {
 			e.printStackTrace();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index 0dfcdb0..774cd60 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -210,8 +210,11 @@
 				msg.setType(DeferredResultHolder.CALLBACK_CMD_CATALOG);
 				msg.setData(device);
 				deferredResultHolder.invokeResult(msg);
+
+				// 鍥炲200
+				responseAck(evt);
 			}
-		} catch (DocumentException e) {
+		} catch (DocumentException | SipException | InvalidArgumentException | ParseException e) {
 			e.printStackTrace();
 		}
 	}
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 2d6b8e7..22ebe52 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -1,11 +1,13 @@
 package com.genersoft.iot.vmp.media.zlm;
 
 import java.math.BigInteger;
+import java.text.DecimalFormat;
 import java.util.ArrayList;
 import java.util.List;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
+import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.conf.MediaServerConfig;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
 import com.genersoft.iot.vmp.utils.IpUtil;
@@ -35,7 +37,8 @@
 public class ZLMHttpHookListener {
 
 	private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookListener.class);
-	
+
+
 	@Autowired
 	private SIPCommander cmder;
 
@@ -54,7 +57,7 @@
 			logger.debug("ZLM HOOK on_flow_report API璋冪敤锛屽弬鏁帮細" + json.toString());
 		}
 		// TODO Auto-generated method stub
-		
+
 		
 		JSONObject ret = new JSONObject();
 		ret.put("code", 0);
@@ -113,6 +116,21 @@
 		if (logger.isDebugEnabled()) {
 			logger.debug("ZLM HOOK on_publish API璋冪敤锛屽弬鏁帮細" + json.toString());
 		}
+		String app = json.getString("app");
+		String streamId = json.getString("id");
+//		String ssrc = String.format("%10d", Integer.parseInt(streamId, 16)); // ZLM 瑕佹眰澶у啓涓旈浣嶈ˉ闆�
+		String ssrc = new DecimalFormat("0000000000").format(Integer.parseInt(streamId, 16));
+		StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+		if ("rtp".equals(app) && streamInfo != null ) {
+			MediaServerConfig mediaInfo = storager.getMediaInfo();
+			streamInfo.setFlv(String.format("http://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
+			streamInfo.setWs_flv(String.format("ws://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
+			streamInfo.setRtmp(String.format("rtmp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtmpPort(), streamId));
+			streamInfo.setHls(String.format("http://%s:%s/rtp/%s/hls.m3u8", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
+			streamInfo.setRtsp(String.format("rtsp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtspPort(), streamId));
+			storager.startPlay(streamInfo);
+		}
+
 		// TODO Auto-generated method stub
 		
 		JSONObject ret = new JSONObject();
@@ -213,8 +231,18 @@
 		if (logger.isDebugEnabled()) {
 			logger.debug("ZLM HOOK on_stream_changed API璋冪敤锛屽弬鏁帮細" + json.toString());
 		}
-		// TODO Auto-generated method stub
-		
+		// 娴佹秷澶辩Щ闄edis play
+		String app = json.getString("app");
+		String streamId = json.getString("stream");
+		boolean regist = json.getBoolean("regist");
+//		String ssrc = String.format("%10d", Integer.parseInt(streamId, 16)); // ZLM 瑕佹眰澶у啓涓旈浣嶈ˉ闆�
+		String ssrc = new DecimalFormat("0000000000").format(Integer.parseInt(streamId, 16));
+		StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+		if ("rtp".equals(app) && !regist ) {
+			storager.stopPlay(streamInfo);
+		}
+
+
 		JSONObject ret = new JSONObject();
 		ret.put("code", 0);
 		ret.put("msg", "success");
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index fd0a665..8381738 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -136,30 +136,24 @@
 	/**
 	 * 寮�濮嬫挱鏀炬椂灏嗘祦瀛樺叆
 	 *
-	 * @param deviceId 璁惧ID
-	 * @param channelId 閫氶亾ID
 	 * @param stream 娴佷俊鎭�
 	 * @return
 	 */
-	public boolean startPlay(String deviceId, String channelId, StreamInfo stream);
+	public boolean startPlay(StreamInfo stream);
 
 	/**
 	 * 鍋滄鎾斁鏃跺垹闄�
 	 *
-	 * @param deviceId 璁惧ID
-	 * @param channelId 閫氶亾ID
 	 * @return
 	 */
-	public boolean stopPlay(String deviceId, String channelId);
+	public boolean stopPlay(StreamInfo streamInfo);
 
 	/**
 	 * 鏌ユ壘瑙嗛娴�
 	 *
-	 * @param deviceId 璁惧ID
-	 * @param channelId 閫氶亾ID
 	 * @return
 	 */
-	public StreamInfo queryPlay(String deviceId, String channelId);
+	public StreamInfo queryPlay(StreamInfo streamInfo);
 
 	/**
 	 * 鏌ヨ瀛愯澶�
@@ -182,4 +176,8 @@
 	 * @param deviceId
 	 */
 	void cleanChannelsForDevice(String deviceId);
+
+	StreamInfo queryPlayBySSRC(String ssrc);
+
+	StreamInfo queryPlayByDevice(String deviceId, String code);
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
index 272912f..c3a18b7 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
@@ -148,17 +148,12 @@
 	}
 
 	@Override
-	public boolean startPlay(String deviceId, String channelId, StreamInfo stream) {
+	public boolean stopPlay(StreamInfo streamInfo) {
 		return false;
 	}
 
 	@Override
-	public boolean stopPlay(String deviceId, String channelId) {
-		return false;
-	}
-
-	@Override
-	public StreamInfo queryPlay(String deviceId, String channelId) {
+	public StreamInfo queryPlay(StreamInfo streamInfo) {
 		return null;
 	}
 
@@ -176,4 +171,19 @@
 	public void cleanChannelsForDevice(String deviceId) {
 
 	}
+
+	@Override
+	public boolean startPlay(StreamInfo stream) {
+		return false;
+	}
+
+	@Override
+	public StreamInfo queryPlayBySSRC(String ssrc) {
+		return null;
+	}
+
+	@Override
+	public StreamInfo queryPlayByDevice(String deviceId, String code) {
+		return null;
+	}
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
index 1acd15c..5ca8b1c 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -329,40 +329,53 @@
 	/**
 	 * 寮�濮嬫挱鏀炬椂灏嗘祦瀛樺叆redis
 	 *
-	 * @param deviceId 璁惧ID
-	 * @param channelId 閫氶亾ID
 	 * @return
 	 */
 	@Override
-	public boolean startPlay(String deviceId, String channelId, StreamInfo stream) {
-		return redis.set(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId),
+	public boolean startPlay(StreamInfo stream) {
+		return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, stream.getSsrc(),stream.getDeviceID(), stream.getCahnnelId()),
 				stream);
 	}
 
 	/**
 	 * 鍋滄鎾斁鏃朵粠redis鍒犻櫎
 	 *
-	 * @param deviceId 璁惧ID
-	 * @param channelId 閫氶亾ID
 	 * @return
 	 */
 	@Override
-	public boolean stopPlay(String deviceId, String channelId) {
-		return redis.del(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId));
+	public boolean stopPlay(StreamInfo streamInfo) {
+		return redis.del(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
+				streamInfo.getSsrc(),
+				streamInfo.getDeviceID(),
+				streamInfo.getCahnnelId()));
 	}
 
 	/**
 	 * 鏌ヨ鎾斁鍒楄〃
-	 * @param deviceId 璁惧ID
-	 * @param channelId 閫氶亾ID
 	 * @return
 	 */
 	@Override
-	public StreamInfo queryPlay(String deviceId, String channelId) {
-		return (StreamInfo)redis.get(String.format("%S_%s_%s", VideoManagerConstants.PLAYER_PREFIX, deviceId, channelId));
+	public StreamInfo queryPlay(StreamInfo streamInfo) {
+		return (StreamInfo)redis.get(String.format("%S_%s_%s_%s",
+				VideoManagerConstants.PLAYER_PREFIX,
+				streamInfo.getSsrc(),
+				streamInfo.getDeviceID(),
+				streamInfo.getCahnnelId()));
+	}
+	@Override
+	public StreamInfo queryPlayBySSRC(String ssrc) {
+		List<Object> playLeys = redis.keys(String.format("%S_%s_*", VideoManagerConstants.PLAYER_PREFIX, ssrc));
+		if (playLeys.size() == 0) return null;
+		return (StreamInfo)redis.get(playLeys.get(0).toString());
 	}
 
-
+	@Override
+	public StreamInfo queryPlayByDevice(String deviceId, String code) {
+		List<Object> playLeys = redis.keys(String.format("%S_*_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
+				deviceId,
+				code));
+		return (StreamInfo)redis.get(playLeys.get(0).toString());
+	}
 
 	/**
 	 * 鏇存柊娴佸獟浣撲俊鎭�
@@ -423,4 +436,7 @@
 			}
 		}
 	}
+
+
+
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
index b7d6101..64bcf34 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
@@ -37,7 +37,18 @@
 		
 		Device device = storager.queryVideoDevice(deviceId);
 		StreamInfo streamInfo = cmder.playStreamCmd(device, channelId);
-		
+		// 绛夊緟鎺ㄦ祦, TODO 榛樿瓒呮椂15s
+
+		long startTime = System.currentTimeMillis();
+		while (storager.queryPlay(streamInfo) == null || storager.queryPlay(streamInfo).getFlv() == null) {
+			try {
+				if (System.currentTimeMillis() - startTime > 15 * 1000)
+				Thread.sleep(200);
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+		streamInfo = storager.queryPlay(streamInfo);
 		if (logger.isDebugEnabled()) {
 			logger.debug(String.format("璁惧棰勮 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s",deviceId, channelId));
 			logger.debug("璁惧棰勮 API璋冪敤锛宻src锛�"+streamInfo.getSsrc()+",ZLMedia streamId:"+Integer.toHexString(Integer.parseInt(streamInfo.getSsrc())));
@@ -55,7 +66,8 @@
 	public ResponseEntity<String> playStop(@PathVariable String ssrc){
 		
 		cmder.streamByeCmd(ssrc);
-		
+		StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+		storager.stopPlay(streamInfo);
 		if (logger.isDebugEnabled()) {
 			logger.debug(String.format("璁惧棰勮鍋滄API璋冪敤锛宻src锛�%s", ssrc));
 		}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
index d2644f3..8d845b1 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
@@ -70,7 +70,7 @@
             return result;
         }
         // 鏌ヨ鏄惁宸茬粡鍦ㄦ挱鏀�
-        StreamInfo streamInfo = storager.queryPlay(device.getDeviceId(), code);
+        StreamInfo streamInfo = storager.queryPlayByDevice(device.getDeviceId(), code);
         if (streamInfo == null) streamInfo = cmder.playStreamCmd(device, code);
 
         if (logger.isDebugEnabled()) {
@@ -86,10 +86,10 @@
             result.put("ChannelName", deviceChannel.getName());
             result.put("ChannelCustomName ", "");
             result.put("FLV ", streamInfo.getFlv());
-            result.put("WS_FLV ", streamInfo.getWS_FLV());
-            result.put("RTMP", streamInfo.getRTMP());
-            result.put("HLS", streamInfo.getHLS());
-            result.put("RTSP", streamInfo.getRTSP());
+            result.put("WS_FLV ", streamInfo.getWs_flv());
+            result.put("RTMP", streamInfo.getRtmp());
+            result.put("HLS", streamInfo.getHls());
+            result.put("RTSP", streamInfo.getRtsp());
             result.put("CDN", "");
             result.put("SnapURL", "");
             result.put("Transport", device.getTransport());
@@ -135,14 +135,14 @@
                              @RequestParam(required = false)String check_outputs
 
     ){
-        StreamInfo streamInfo = storager.queryPlay(serial, code);
+        StreamInfo streamInfo = storager.queryPlayByDevice(serial, code);
         if (streamInfo == null) {
             JSONObject result = new JSONObject();
             result.put("error","鏈壘鍒版祦淇℃伅");
             return result;
         }
         cmder.streamByeCmd(streamInfo.getSsrc());
-        storager.stopPlay(serial, code);
+        storager.stopPlay(streamInfo);
         return null;
     }
 
@@ -151,7 +151,6 @@
      * @param serial 璁惧缂栧彿
      * @param channel 閫氶亾搴忓彿
      * @param code 閫氶亾鍥芥爣缂栧彿
-     * @param check_outputs
      * @return
      */
     @RequestMapping(value = "/touch")
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index 5cd108e..7a1e0e2 100644
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -35,8 +35,16 @@
 						</el-table-column>
 						<el-table-column prop="subCount" label="瀛愯妭鐐规暟">
 						</el-table-column>
-						<el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷">
-						</el-table-column>
+          <el-table-column label="鐘舵��" width="180" align="center">
+            <template slot-scope="scope">
+              <div slot="reference" class="name-wrapper">
+                <el-tag size="medium" v-if="scope.row.status == 1">鍦ㄧ嚎</el-tag>
+                <el-tag size="medium" type="info" v-if="scope.row.status == 0">绂荤嚎</el-tag>
+              </div>
+            </template>
+          </el-table-column>
+            <el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷">
+            </el-table-column>
 						<el-table-column label="鎿嶄綔" width="240" align="center" fixed="right">
 							<template slot-scope="scope">
 								<el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @click="sendDevicePush(scope.row)">棰勮瑙嗛</el-button>
@@ -58,17 +66,20 @@
 
 			</el-main>
 		</el-container>
+    <Loading v-if="isLoging" marginTop="-50%"></Loading>
 	</div>
 </template>
 
 <script>
 	 import devicePlayer from './gb28181/devicePlayer.vue'
 	 import uiHeader from './UiHeader.vue'
+   import Loading from './Loading.vue'
 	export default {
 		name: 'channelList',
 		components: {
 			devicePlayer,
-			uiHeader
+			uiHeader,
+      Loading
 		},
 		data() {
 			return {
@@ -85,7 +96,8 @@
 				currentPage: parseInt(this.$route.params.page),
 				count: parseInt(this.$route.params.count),
 				total:0,
-				beforeUrl:"/videoList"
+				beforeUrl:"/videoList",
+        isLoging: false
 			};
 		},
 
@@ -182,7 +194,7 @@
 			//閫氱煡璁惧涓婁紶濯掍綋娴�
 			sendDevicePush: function(itemData) {
 				let deviceId = this.deviceId;
-
+        this.isLoging = true;
 				let channelId = itemData.channelId;
 				console.log("閫氱煡璁惧鎺ㄦ祦1锛�" + deviceId + " : " + channelId);
 				let that = this;
@@ -191,6 +203,7 @@
 					url: '/api/play/' + deviceId + '/' + channelId
 				}).then(function(res) {
 					let ssrc = res.data.ssrc;
+          that.isLoging = false
 					that.$refs.devicePlayer.play(res.data,deviceId,channelId);
 				}).catch(function(e) {
 				});
diff --git a/web_src/src/components/gb28181/devicePlayer.vue b/web_src/src/components/gb28181/devicePlayer.vue
index e193d7c..dc69adb 100644
--- a/web_src/src/components/gb28181/devicePlayer.vue
+++ b/web_src/src/components/gb28181/devicePlayer.vue
@@ -115,6 +115,7 @@
 				deviceId: '',
 				channelId: '',
 				tabActiveName: 'media'
+
 			};
 		},
 		methods: {
diff --git a/web_src/src/components/videoList.vue b/web_src/src/components/videoList.vue
index 234ddc8..efbb489 100644
--- a/web_src/src/components/videoList.vue
+++ b/web_src/src/components/videoList.vue
@@ -1,7 +1,6 @@
 <template>
 	<div id="app">
 		<el-container>
-
 			<el-header>
 				<uiHeader></uiHeader>
 			</el-header>
@@ -37,14 +36,15 @@
 					<el-table-column label="鐘舵��" width="180" align="center">
 						<template slot-scope="scope">
 							<div slot="reference" class="name-wrapper">
-								<el-tag size="medium">{{ scope.row.online==1?'鍦ㄧ嚎' :'绂荤嚎'}}</el-tag>
+								<el-tag size="medium" v-if="scope.row.online == 1">鍦ㄧ嚎</el-tag>
+								<el-tag size="medium" type="info" v-if="scope.row.online == 0">绂荤嚎</el-tag>
 							</div>
 						</template>
 					</el-table-column>
 
 					<el-table-column label="鎿嶄綔" width="240" align="center" fixed="right">
 						<template slot-scope="scope">
-							<el-button size="mini" icon="el-icon-refresh"  @click="refDevice(scope.row)">鍒锋柊</el-button>
+							<el-button size="mini" icon="el-icon-refresh"  @click="refDevice(scope.row)">鍒锋柊閫氶亾</el-button>
 							<el-button size="mini" icon="el-icon-s-open"  type="primary" @click="showChannelList(scope.row)">鏌ョ湅閫氶亾</el-button>
 						</template>
 					</el-table-column>

--
Gitblit v1.8.0