From 36cd31d69d451072e00ff1dd1928a61753aa5a97 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 19 十月 2020 14:25:41 +0800
Subject: [PATCH] 修复ui开启音频无法播放的bug 修复可能导致录象查看的bug 修复开启openRTPServer时的bug

---
 src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java |    2 
 src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java               |   17 ++++++--
 web_src/src/components/channelList.vue                                              |   13 ++++--
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java     |    2 
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java              |    2 -
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java                  |    9 ++++
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java                         |    2 
 web_src/src/components/gb28181/devicePlayer.vue                                     |   26 +++++-------
 README.md                                                                           |   37 +++++++++---------
 9 files changed, 62 insertions(+), 48 deletions(-)

diff --git a/README.md b/README.md
index 97ad0f1..69f77eb 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # wvp
 WEB VIDEO PLATFORM鏄竴涓熀浜嶨B28181-2016鏍囧噯瀹炵幇鐨勭綉缁滆棰戝钩鍙帮紝璐熻矗瀹炵幇鏍稿績淇′护涓庤澶囩鐞嗗悗鍙伴儴鍒嗭紝鏀寔NAT绌块�忥紝鏀寔娴峰悍銆佸ぇ鍗庛�佸畤瑙嗙瓑鍝佺墝鐨処PC銆丯VR銆丏VR鎺ュ叆銆�   
-娴佸獟浣撴湇鍔″熀浜嶼LMediaKit-https://github.com/xiongziliang/ZLMediaKit
+娴佸獟浣撴湇鍔″熀浜嶼LMediaKit-https://github.com/xiongziliang/ZLMediaKit  
 鍓嶆椤甸潰鍩轰簬MediaServerUI杩涜淇敼.
 
 # 搴旂敤鍦烘櫙锛�
@@ -16,24 +16,25 @@
 ![build_1.png](https://github.com/648540858/wiki/blob/master/images/Screenshot_20201012_151606.png)
 
 # 鍘熺増鐗规�э細
-1. 瑙嗛棰勮  
-2. 浜戝彴鎺у埗锛堟柟鍚戙�佺缉鏀炬帶鍒讹級  
-3. 瑙嗛璁惧淇℃伅鍚屾   
-4. 绂诲湪绾跨洃鎺�  
-5. 褰曞儚鏌ヨ涓庡洖鏀撅紙鍩轰簬NVR\DVR锛屾殏涓嶆敮鎸佸揩杩涖�乻eek鎿嶄綔锛�  
-6. 鏃犱汉瑙傜湅鑷姩鏂祦    
+1. 瑙嗛棰勮;  
+2. 浜戝彴鎺у埗锛堟柟鍚戙�佺缉鏀炬帶鍒讹級;  
+3. 瑙嗛璁惧淇℃伅鍚屾;   
+4. 绂诲湪绾跨洃鎺�;  
+5. 褰曞儚鏌ヨ涓庡洖鏀撅紙鍩轰簬NVR\DVR锛屾殏涓嶆敮鎸佸揩杩涖�乻eek鎿嶄綔锛�;  
+6. 鏃犱汉瑙傜湅鑷姩鏂祦;    
+7. 鏀寔UDP鍜孴CP涓ょ鍥芥爣淇′护浼犺緭妯″紡;  
 
-
-# 鏂版敮鎸佺壒鎬�
-1. 闆嗘垚web鐣岄潰, 涓嶉渶瑕佸崟鐙儴缃插墠绔湇鍔�, 鐩存帴鍒╃敤wvp鍐呯疆鏂囦欢鏈嶅姟閮ㄧ讲. 
-2. 鏀寔骞冲彴鎺ュ叆, 閽堝澶у钩鍙板ぇ閲忚澶囩殑鎯呭喌杩涜浼樺寲.
-3. 鏀寔妫�绱�,閫氶亾绛涢��.
-4. 鏀寔鑷姩閰嶇疆ZLM濯掍綋鏈嶅姟, 鍑忓皯鍥犻厤缃棶棰樻墍鍑虹幇鐨勯棶棰�.
-5. 鏀寔鍚敤udp澶氱鍙fā寮�, 鎻愰珮udp妯″紡涓嬪獟浣撲紶杈撴�ц兘.
-6. 鏀寔閫氶亾鏄惁鍚湁闊抽鐨勮缃�
-7. 鏀寔閫氶亾瀛愮洰褰曟煡璇�
-8. 鏀寔udp/tcp,涓ょ妯″紡浼犺緭瑙嗛娴�  
-
+# 鏂版敮鎸佺壒鎬�  
+1. 闆嗘垚web鐣岄潰, 涓嶉渶瑕佸崟鐙儴缃插墠绔湇鍔�, 鐩存帴鍒╃敤wvp鍐呯疆鏂囦欢鏈嶅姟閮ㄧ讲, 闅弚vp涓�璧烽儴缃�;   
+2. 鏀寔骞冲彴鎺ュ叆, 閽堝澶у钩鍙板ぇ閲忚澶囩殑鎯呭喌杩涜浼樺寲;  
+3. 鏀寔妫�绱�,閫氶亾绛涢��;  
+4. 鏀寔鑷姩閰嶇疆ZLM濯掍綋鏈嶅姟, 鍑忓皯鍥犻厤缃棶棰樻墍鍑虹幇鐨勯棶棰�;  
+5. 鏀寔鍚敤udp澶氱鍙fā寮�, 鎻愰珮udp妯″紡涓嬪獟浣撲紶杈撴�ц兘;  
+6. 鏀寔閫氶亾鏄惁鍚湁闊抽鐨勮缃�;  
+7. 鏀寔閫氶亾瀛愮洰褰曟煡璇�;  
+8. 鏀寔udp/tcp鍥芥爣娴佷紶杈撴ā寮�;  
+9. 鏀寔鐩存帴杈撳嚭RTSP銆丷TMP銆丠TTP-FLV銆乄ebsocket-FLV銆丠LS澶氱鍗忚娴佸湴鍧�  
+10. 
 # 寰呭疄鐜帮細 
 涓婄骇绾ц仈  
 鎺ㄦ祦鍒楄〃  
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 9af409f..e2c11cb 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
@@ -538,7 +538,7 @@
 			recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
 			recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>\r\n");
 			recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>\r\n");
-			recordInfoXml.append("<Secrecy>0</Secrecy>\\r\n");
+			recordInfoXml.append("<Secrecy>0</Secrecy>\r\n");
 			// 澶у崕NVR瑕佹眰蹇呴』澧炲姞涓�涓�间负all鐨勬枃鏈厓绱犺妭鐐筎ype
 			recordInfoXml.append("<Type>all</Type>\r\n");
 			recordInfoXml.append("</Query>\r\n");
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 4c9f6fd..96b4af2 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
@@ -140,8 +140,6 @@
 			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);
 		}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
index 775cb0f..86f05da 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -74,6 +74,15 @@
         return sendPost("getMediaList",param);
     }
 
+    public JSONObject getMediaInfo(String app, String schema, String stream){
+        Map<String, Object> param = new HashMap<>();
+        param.put("app",app);
+        param.put("schema",schema);
+        param.put("stream",stream);
+        param.put("vhost","__defaultVhost__");
+        return sendPost("getMediaInfo",param);
+    }
+
     public JSONObject getRtpInfo(String stream_id){
         Map<String, Object> param = new HashMap<>();
         param.put("stream_id",stream_id);
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java
index 93e6a24..f88d59c 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java
@@ -37,7 +37,7 @@
             System.out.println(jsonObject.toJSONString());
             return newPort;
         }else {
-            return getNewRTPPort(streamId);
+            return getNewRTPPort(ssrc);
         }
     }
 
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 99f19ee..1e68095 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
@@ -165,7 +165,7 @@
 
 	@Override
 	public void updateCatch() {
-
+		System.out.println("##################");
 	}
 
 	@Override
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 ad0ff0c..3827fc7 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
@@ -64,18 +64,25 @@
 
 		while (lockFlag) {
 			try {
-
 				if (System.currentTimeMillis() - startTime > 15 * 1000) {
 					storager.stopPlay(streamInfo);
 					return new ResponseEntity<String>("timeout",HttpStatus.OK);
 				}else {
+					streamInfo = storager.queryPlayByDevice(deviceId, channelId);
 					JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
-					if (rtpInfo == null || !rtpInfo.getBoolean("exist") || storager.queryPlayByDevice(deviceId, channelId).getFlv() == null){
+					if (rtpInfo != null && rtpInfo.getBoolean("exist") && streamInfo.getFlv() != null){
+						JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo("rtp", "rtmp", streamId);
+						if (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")) {
+							lockFlag = false;
+							JSONArray tracks = mediaInfo.getJSONArray("tracks");
+							streamInfo.setTracks(tracks);
+							storager.startPlay(streamInfo);
+						}else {
+
+						}
+					}else {
 						Thread.sleep(2000);
 						continue;
-					}else {
-						lockFlag = false;
-						streamInfo = storager.queryPlay(streamInfo);
 					};
 				}
 			} catch (InterruptedException e) {
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index b3980c3..8e6638a 100644
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -54,12 +54,15 @@
           </el-table-column>
             <el-table-column prop="ptztypeText" label="浜戝彴绫诲瀷">
             </el-table-column>
-						<el-table-column label="鎿嶄綔" width="240" align="center" fixed="right">
+						<el-table-column label="鎿嶄綔" width="280" 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>
-								<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" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> -->
+                <el-button-group>
+                  <el-button size="mini" icon="el-icon-video-play" v-if="scope.row.parental == 0" @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" >璁惧褰曡薄</el-button>-->
+                  <!-- <el-button size="mini" @click="sendDevicePush(scope.row)">褰曞儚鏌ヨ</el-button> -->
+                </el-button-group>
 							</template>
 						</el-table-column>
 				</el-table>
diff --git a/web_src/src/components/gb28181/devicePlayer.vue b/web_src/src/components/gb28181/devicePlayer.vue
index 2f2cfc0..18a8d51 100644
--- a/web_src/src/components/gb28181/devicePlayer.vue
+++ b/web_src/src/components/gb28181/devicePlayer.vue
@@ -1,8 +1,7 @@
 <template>
 	<div id="devicePlayer">
 		<el-dialog title="瑙嗛鎾斁" top="0" :visible.sync="showVideoDialog" :destroy-on-close="true" @close="close()">
-      <LivePlayer v-if="showVideoDialog && hasaudio" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" hasaudio fluent autoplay live ></LivePlayer>
-      <LivePlayer v-if="showVideoDialog && !hasaudio" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" fluent autoplay live ></LivePlayer>
+      <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :hasaudio="hasaudio" fluent autoplay live ></LivePlayer>
 			<div id="shared" style="text-align: right; margin-top: 1rem;">
 				<el-tabs v-model="tabActiveName">
 					<el-tab-pane label="濯掍綋娴佷俊鎭�" name="media">
@@ -123,20 +122,17 @@
 		methods: {
 
 			play: function(streamInfo, deviceId, channelId, hasAudio) {
-        // this.hasaudio = hasAudio;
-        if (!hasAudio) { // hasaudio == false鏃惰缃挱鏀惧櫒hasaudio false, 鍚﹀垯涓嶈缃�
-          this.hasaudio = hasAudio;
-        }
+        this.hasaudio = hasAudio;
         // 鏍规嵁濯掍綋娴佷俊鎭簩娆″垽鏂�
-        // if( this.hasaudio && !!streamInfo.tracks && streamInfo.tracks.length > 0) {
-        //   var realHasAudio = false;
-        //   for (let i = 0; i < streamInfo.tracks; i++) {
-        //     if (streamInfo.tracks[i].codec_type == 1) { // 鍒ゆ柇涓洪煶棰�
-        //       realHasAudio = true;
-        //     }
-        //   }
-        //   this.hasaudio = realHasAudio && this.hasaudio;
-        // }
+        if( this.hasaudio && !!streamInfo.tracks && streamInfo.tracks.length > 0) {
+          var realHasAudio = false;
+          for (let i = 0; i < streamInfo.tracks; i++) {
+            if (streamInfo.tracks[i].codec_type == 1) { // 鍒ゆ柇涓洪煶棰�
+              realHasAudio = true;
+            }
+          }
+          this.hasaudio = realHasAudio && this.hasaudio;
+        }
         this.ssrc = streamInfo.ssrc;
 				this.deviceId = deviceId;
 				this.channelId = channelId;

--
Gitblit v1.8.0