diff --git a/pom.xml b/pom.xml
index c1383e74..91b90e69 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,6 +11,7 @@
com.genersoft
wvp
+ 2.0.0
web video platform
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 529feaf0..eb80955c 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 @@ public class SIPCommander implements ISIPCommander {
@Value("${media.autoApplyPlay}")
private boolean autoApplyPlay;
+ @Value("${userSettings.waitTrack}")
+ private boolean waitTrack;
+
@Autowired
private ZLMHttpHookSubscribe subscribe;
@@ -376,7 +379,7 @@ public class SIPCommander implements ISIPCommander {
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 @@ public class SIPCommander implements ISIPCommander {
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 60227245..42c10a79 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 gov.nist.javax.sip.stack.SIPDialog;
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 @@ public class PlayServiceImpl implements IPlayService {
@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 @@ public class PlayServiceImpl implements IPlayService {
playResult.setDevice(device);
UUID uuid = UUID.randomUUID();
playResult.setUuid(uuid.toString());
- DeferredResult> result = new DeferredResult>();
+ DeferredResult> result = new DeferredResult>(playTimeout);
playResult.setResult(result);
// 录像查询以channelId作为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 e1397d7a..b9df0988 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -100,6 +100,10 @@ logging:
userSettings:
# 保存移动位置历史轨迹:true:保留历史数据,false:仅保留最后的位置(默认)
savePositionHistory: false
+ # 点播等待超时时间,单位:毫秒
+ playTimeout: 3000
+ # 等待音视频编码信息再返回, true: 可以根据编码选择合适的播放器,false: 可以更快点播
+ waitTrack: false
# 在线文档: swagger-ui(生产环境建议关闭)
springfox: