From d551c82d34618ca31e2a15b5bc0c51f727084466 Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期五, 23 四月 2021 14:39:52 +0800
Subject: [PATCH] 优化点播体验, 优化tcp被动的sdp

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java |   22 +++++++++-------------
 src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java           |    6 +++++-
 src/main/resources/application-dev.yml                                          |    4 ++++
 pom.xml                                                                         |    1 +
 4 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/pom.xml b/pom.xml
index c1383e7..91b90e6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,7 @@
 
 	<groupId>com.genersoft</groupId>
 	<artifactId>wvp</artifactId>
+	<version>2.0.0</version>
 	<name>web video platform</name>
 
 	<repositories>
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 529feaf..eb80955 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
@@ -91,6 +91,9 @@
 	@Value("${media.autoApplyPlay}")
 	private boolean autoApplyPlay;
 
+	@Value("${userSettings.waitTrack}")
+	private boolean waitTrack;
+
 	@Autowired
 	private ZLMHttpHookSubscribe subscribe;
 
@@ -376,7 +379,7 @@
 			subscribeKey.put("regist", true);
 
 			subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey, json->{
-				if (json.getJSONArray("tracks") == null) return;
+				if (waitTrack && json.getJSONArray("tracks") == null) return;
 				event.response(json);
 				subscribe.removeSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey);
 			});
@@ -426,19 +429,12 @@
 				content.append("a=rtpmap:96 PS/90000\r\n");
 				content.append("a=rtpmap:98 H264/90000\r\n");
 				content.append("a=rtpmap:97 MPEG4/90000\r\n");
-				if("TCP-PASSIVE".equals(streamMode)) { // tcp琚姩妯″紡
+				if ("TCP-PASSIVE".equals(streamMode)) { // tcp琚姩妯″紡
 					content.append("a=setup:passive\r\n");
-					content.append("a=recvonly\r\n");
-					content.append("a=rtpmap:96 PS/90000\r\n");
-					content.append("a=rtpmap:98 H264/90000\r\n");
-					content.append("a=rtpmap:97 MPEG4/90000\r\n");
-					if ("TCP-PASSIVE".equals(streamMode)) { // tcp琚姩妯″紡
-						content.append("a=setup:passive\r\n");
-						content.append("a=connection:new\r\n");
-					} else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
-						content.append("a=setup:active\r\n");
-						content.append("a=connection:new\r\n");
-					}
+					content.append("a=connection:new\r\n");
+				} else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
+					content.append("a=setup:active\r\n");
+					content.append("a=connection:new\r\n");
 				}
 			}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
index 6022724..42c10a7 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -22,6 +22,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.web.context.request.async.DeferredResult;
@@ -58,6 +59,9 @@
     @Autowired
     private VideoStreamSessionManager streamSession;
 
+    @Value("${userSettings.playTimeout}")
+    private long playTimeout;
+
 
     @Override
     public PlayResult play(String deviceId, String channelId, ZLMHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent) {
@@ -67,7 +71,7 @@
         playResult.setDevice(device);
         UUID uuid = UUID.randomUUID();
         playResult.setUuid(uuid.toString());
-        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>();
+        DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String>>(playTimeout);
         playResult.setResult(result);
         // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
         resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid, result);
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index e1397d7..b9df098 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -100,6 +100,10 @@
 userSettings:
     # 淇濆瓨绉诲姩浣嶇疆鍘嗗彶杞ㄨ抗锛歵rue:淇濈暀鍘嗗彶鏁版嵁锛宖alse:浠呬繚鐣欐渶鍚庣殑浣嶇疆(榛樿)
     savePositionHistory: false
+    # 鐐规挱绛夊緟瓒呮椂鏃堕棿,鍗曚綅锛氭绉�
+    playTimeout: 3000
+    # 绛夊緟闊宠棰戠紪鐮佷俊鎭啀杩斿洖锛� true锛� 鍙互鏍规嵁缂栫爜閫夋嫨鍚堥�傜殑鎾斁鍣紝false锛� 鍙互鏇村揩鐐规挱
+    waitTrack: false
 
 # 鍦ㄧ嚎鏂囨。锛� swagger-ui锛堢敓浜х幆澧冨缓璁叧闂級
 springfox:

--
Gitblit v1.8.0