From 4e8659e156767b7f471725840b331a5ec9be9894 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期六, 07 十一月 2020 22:15:53 +0800
Subject: [PATCH] Merge pull request #10 from lawrencehj/master

---
 src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java                 |   72 +++++++++++++----------
 web_src/src/components/channelList.vue                                                |   23 ++++---
 web_src/src/components/gb28181/devicePlayer.vue                                       |    2 
 pom.xml                                                                               |   14 ++++
 src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java |   28 ++++++++-
 5 files changed, 92 insertions(+), 47 deletions(-)

diff --git a/pom.xml b/pom.xml
index a8cf147..b5e44c0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -163,6 +163,7 @@
 	
 	<build>
 		<plugins>
+
 			<plugin>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
@@ -176,6 +177,18 @@
 				<configuration>
 					<source>1.8</source>
 					<target>1.8</target>
+					<!-- 
+					<webResources>
+						<resource>
+							<directory>${project.basedir}/libs</directory>
+							<targetPath>WEB-INF/lib</targetPath>
+							<filtering>true</filtering>
+							<includes>
+								<include>**/*.jar</include>
+							</includes>
+						</resource>
+					</webResources>
+					 -->
 				</configuration>
 			</plugin>
 
@@ -183,6 +196,7 @@
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-surefire-plugin</artifactId>
 			</plugin>
+
 		</plugins>
 	</build>
 </project>
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 7c3a2fc..765dc82 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
@@ -276,6 +276,7 @@
 		PageResult pageResult = new PageResult<Device>();
 		pageResult.setPage(page);
 		pageResult.setCount(count);
+		Device device = null;
 
 		if (deviceIds == null || deviceIds.length == 0) {
 
@@ -284,11 +285,21 @@
 			pageResult.setTotal(deviceIdList.size());
 			int maxCount = (page + 1)* count;
 			for (int i = page * count; i < (pageResult.getTotal() > maxCount ? maxCount : pageResult.getTotal() ); i++) {
-				devices.add((Device)redis.get((String)deviceIdList.get(i)));
+				// devices.add((Device)redis.get((String)deviceIdList.get(i)));
+				device =(Device)redis.get((String)deviceIdList.get(i));
+				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
+					outline(device.getDeviceId());
+				}
+				devices.add(device);
 			}
 		} else {
 			for (int i = 0; i < deviceIds.length; i++) {
-				devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
+				// devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
+				device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]);
+				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
+					outline(device.getDeviceId());
+				}
+				devices.add(device);
 			}
 		}
 		pageResult.setData(devices);
@@ -304,16 +315,25 @@
 	@Override
 	public List<Device> queryVideoDeviceList(String[] deviceIds) {
 		List<Device> devices = new ArrayList<>();
+		Device device = null;
 
 		if (deviceIds == null || deviceIds.length == 0) {
 //			List<Object> deviceIdList = redis.keys(VideoManagerConstants.DEVICE_PREFIX+"*");
 			List<Object> deviceIdList = redis.scan(VideoManagerConstants.DEVICE_PREFIX+"*");
 			for (int i = 0; i < deviceIdList.size(); i++) {
-				devices.add((Device)redis.get((String)deviceIdList.get(i)));
+				device =(Device)redis.get((String)deviceIdList.get(i));
+				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
+					outline(device.getDeviceId());
+				}
+				devices.add(device);
 			}
 		} else {
 			for (int i = 0; i < deviceIds.length; i++) {
-				devices.add((Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]));
+				device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceIds[i]);
+				if (redis.scan(VideoManagerConstants.KEEPLIVEKEY_PREFIX+device.getDeviceId()).size() == 0){
+					outline(device.getDeviceId());
+				}
+				devices.add(device);
 			}
 		}
 		return devices;
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 00f268c..780e950 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
@@ -39,7 +39,8 @@
 	private ZLMRESTfulUtils zlmresTfulUtils;
 
 	@GetMapping("/play/{deviceId}/{channelId}")
-	public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId) {
+	public ResponseEntity<String> play(@PathVariable String deviceId, @PathVariable String channelId,
+	Integer getEncoding) {
 
 		Device device = storager.queryVideoDevice(deviceId);
 		StreamInfo streamInfo = storager.queryPlayByDevice(deviceId, channelId);
@@ -64,40 +65,49 @@
 		long startTime = System.currentTimeMillis();
 		JSONObject rtpInfo = null;
 
-		while (lockFlag) {
-			try {
-				if (System.currentTimeMillis() - startTime > 60 * 1000) {
-					storager.stopPlay(streamInfo);
-					logger.info("鎾斁绛夊緟瓒呮椂");
-					return new ResponseEntity<String>("timeout", HttpStatus.OK);
-				} else {
-					streamInfo = storager.queryPlayByDevice(deviceId, channelId);
-					if (!rtpPushed) {
-						logger.info("鏌ヨRTP鎺ㄦ祦淇℃伅...");
-						rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
-					}
-					if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null && streamInfo.getFlv() != null) {
-						logger.info("鏌ヨ娴佺紪鐮佷俊鎭細" + streamInfo.getFlv());
-						rtpPushed = true;
-						Thread.sleep(2000);
-						JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId);
-						if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) {
-							lockFlag = false;
-							logger.info("娴佺紪鐮佷俊鎭凡鑾峰彇");
-							JSONArray tracks = mediaInfo.getJSONArray("tracks");
-							streamInfo.setTracks(tracks);
-							storager.startPlay(streamInfo);
-						} else {
-							logger.info("娴佺紪鐮佷俊鎭湭鑾峰彇锛�2绉掑悗閲嶈瘯...");
-						}
+		if (getEncoding == 1) {
+			while (lockFlag) {
+				try {
+					if (System.currentTimeMillis() - startTime > 60 * 1000) {
+						storager.stopPlay(streamInfo);
+						logger.info("鎾斁绛夊緟瓒呮椂");
+						return new ResponseEntity<String>("timeout", HttpStatus.OK);
 					} else {
-						Thread.sleep(2000);
-						continue;
+						streamInfo = storager.queryPlayByDevice(deviceId, channelId);
+						if (!rtpPushed) {
+							logger.info("鏌ヨRTP鎺ㄦ祦淇℃伅...");
+							rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
+						}
+						if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo != null
+								&& streamInfo.getFlv() != null) {
+							logger.info("鏌ヨ娴佺紪鐮佷俊鎭細" + streamInfo.getFlv());
+							rtpPushed = true;
+							Thread.sleep(2000);
+							JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId);
+							if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) {
+								lockFlag = false;
+								logger.info("娴佺紪鐮佷俊鎭凡鑾峰彇");
+								JSONArray tracks = mediaInfo.getJSONArray("tracks");
+								streamInfo.setTracks(tracks);
+								storager.startPlay(streamInfo);
+							} else {
+								logger.info("娴佺紪鐮佷俊鎭湭鑾峰彇锛�2绉掑悗閲嶈瘯...");
+							}
+						} else {
+							Thread.sleep(2000);
+							continue;
+						}
 					}
+				} catch (InterruptedException e) {
+					e.printStackTrace();
 				}
-			} catch (InterruptedException e) {
-				e.printStackTrace();
 			}
+		} else {
+			String flv = storager.getMediaInfo().getLocalIP() + ":" + storager.getMediaInfo().getHttpPort() + "/rtp/"
+					+ streamId + ".flv";
+			streamInfo.setFlv("http://" + flv);
+			streamInfo.setWs_flv("ws://" + flv);
+			storager.startPlay(streamInfo);
 		}
 
 		if (logger.isDebugEnabled()) {
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index 930da5b..b539e8c 100644
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -58,8 +58,8 @@
                             <el-button size="mini" icon="el-icon-video-play" @click="sendDevicePush(scope.row)">鎾斁</el-button>
                             <el-button size="mini" icon="el-icon-switch-button" type="danger" v-if="scope.row.play" @click="stopDevicePush(scope.row)">鍋滄</el-button>
                             <el-button size="mini" icon="el-icon-s-open" type="primary" v-if="scope.row.parental == 1" @click="changeSubchannel(scope.row)">鏌ョ湅</el-button>
-                                              <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">璁惧褰曡薄</el-button>
-<!--                             <el-button size="mini" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> -->
+                            <el-button size="mini" icon="el-icon-video-camera" type="primary" @click="queryRecords(scope.row)">璁惧褰曡薄</el-button>
+                            <!--                             <el-button size="mini" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> -->
                         </el-button-group>
                     </template>
                 </el-table-column>
@@ -197,20 +197,21 @@
             let deviceId = this.deviceId;
             this.isLoging = true;
             let channelId = itemData.channelId;
-            console.log("閫氱煡璁惧鎺ㄦ祦1锛�" + deviceId + " : " + channelId);
+            let getEncoding = itemData.hasAudio ? '1' : '0'
+            console.log("閫氱煡璁惧鎺ㄦ祦1锛�" + deviceId + " : " + channelId + ":" + getEncoding);
             let that = this;
             this.$axios({
                 method: 'get',
-                url: '/api/play/' + deviceId + '/' + channelId
+                url: '/api/play/' + deviceId + '/' + channelId + '?getEncoding=' + getEncoding
             }).then(function (res) {
                 console.log(res.data)
                 let ssrc = res.data.ssrc;
                 that.isLoging = false;
                 if (!!ssrc) {
                     // that.$refs.devicePlayer.play(res.data, deviceId, channelId, itemData.hasAudio);
-                    that.$refs.devicePlayer.openDialog("media", deviceId, channelId,{
-                      streamInfo: res.data,
-                      hasAudio: itemData.hasAudio
+                    that.$refs.devicePlayer.openDialog("media", deviceId, channelId, {
+                        streamInfo: res.data,
+                        hasAudio: itemData.hasAudio
                     });
                     that.initData();
                 } else {
@@ -219,10 +220,10 @@
             }).catch(function (e) {});
         },
         queryRecords: function (itemData) {
-          var format = moment().format("YYYY-M-D");
-          let deviceId = this.deviceId;
-          let channelId = itemData.channelId;
-          this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date:format})
+            var format = moment().format("YYYY-M-D");
+            let deviceId = this.deviceId;
+            let channelId = itemData.channelId;
+            this.$refs.devicePlayer.openDialog("record", deviceId, channelId, {date: format})
         },
         stopDevicePush: function (itemData) {
             console.log(itemData)
diff --git a/web_src/src/components/gb28181/devicePlayer.vue b/web_src/src/components/gb28181/devicePlayer.vue
index 493f5d5..b8e45ba 100644
--- a/web_src/src/components/gb28181/devicePlayer.vue
+++ b/web_src/src/components/gb28181/devicePlayer.vue
@@ -223,7 +223,7 @@
         play: function (streamInfo, hasAudio) {
             this.hasaudio = hasAudio;
             // 鏍规嵁濯掍綋娴佷俊鎭簩娆″垽鏂�
-            if (!!streamInfo.tracks && streamInfo.tracks.length > 0) {
+            if (!!streamInfo.tracks && streamInfo.tracks.length > 0 && hasAudio) {
                 var realHasAudio = false;
                 for (let i = 0; i < streamInfo.tracks.length; i++) {
                     if (streamInfo.tracks[i].codec_type == 1 && streamInfo.tracks[i].codec_id_name == "CodecAAC") { // 鍒ゆ柇涓篈AC闊抽

--
Gitblit v1.8.0