From 988dc36fa56a47cc4f331ab48c07577805a71425 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 04 八月 2023 15:47:56 +0800
Subject: [PATCH] 重构点播,回放,下载时ssrc不一致以及TCP主动播放的逻辑
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 1
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java | 420 +++++++++++++++++++---------------------------------
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java | 2
src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java | 6
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java | 4
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java | 7
src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java | 3
src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java | 17 ++
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java | 11 +
9 files changed, 198 insertions(+), 273 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
index f83eaf1..873feab 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/DynamicTask.java
@@ -46,6 +46,9 @@
* @return
*/
public void startCron(String key, Runnable task, int cycleForCatalog) {
+ if(ObjectUtils.isEmpty(key)) {
+ return;
+ }
ScheduledFuture<?> future = futureMap.get(key);
if (future != null) {
if (future.isCancelled()) {
@@ -74,6 +77,9 @@
* @return
*/
public void startDelay(String key, Runnable task, int delay) {
+ if(ObjectUtils.isEmpty(key)) {
+ return;
+ }
stop(key);
// 鑾峰彇鎵ц鐨勬椂鍒�
@@ -100,9 +106,12 @@
}
public boolean stop(String key) {
+ if(ObjectUtils.isEmpty(key)) {
+ return false;
+ }
boolean result = false;
if (!ObjectUtils.isEmpty(futureMap.get(key)) && !futureMap.get(key).isCancelled() && !futureMap.get(key).isDone()) {
- result = futureMap.get(key).cancel(false);
+ result = futureMap.get(key).cancel(true);
futureMap.remove(key);
runnableMap.remove(key);
}
@@ -110,6 +119,9 @@
}
public boolean contains(String key) {
+ if(ObjectUtils.isEmpty(key)) {
+ return false;
+ }
return futureMap.get(key) != null;
}
@@ -118,6 +130,9 @@
}
public Runnable get(String key) {
+ if(ObjectUtils.isEmpty(key)) {
+ return null;
+ }
return runnableMap.get(key);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
index 374e5dc..b6aac9c 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -138,7 +138,7 @@
logger.info("[鏀跺埌bye] {} 閫氱煡璁惧鍋滄鎺ㄦ祦鏃舵湭鎵惧埌璁惧淇℃伅", streamId);
}
try {
- logger.warn("[鍋滄鐐规挱] {}/{}", sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
+ logger.info("[鍋滄鐐规挱] {}/{}", sendRtpItem.getDeviceId(), sendRtpItem.getChannelId());
cmder.streamByeCmd(device, sendRtpItem.getChannelId(), streamId, null);
} catch (InvalidArgumentException | ParseException | SipException |
SsrcTransactionNotFoundException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
index 5c577ba..7b9f69a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/KeepaliveNotifyMessageHandler.java
@@ -33,7 +33,7 @@
public class KeepaliveNotifyMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler {
- private Logger logger = LoggerFactory.getLogger(KeepaliveNotifyMessageHandler.class);
+ private final Logger logger = LoggerFactory.getLogger(KeepaliveNotifyMessageHandler.class);
private final static String cmdType = "Keepalive";
@Autowired
@@ -59,13 +59,18 @@
// 鏈敞鍐岀殑璁惧涓嶅仛澶勭悊
return;
}
- logger.info("[鏀跺埌蹇冭烦]锛� device: {}", device.getDeviceId());
SIPRequest request = (SIPRequest) evt.getRequest();
+ logger.info("[鏀跺埌蹇冭烦]锛� device: {}, callId: {}", device.getDeviceId(), request.getCallIdHeader().getCallId());
+
// 鍥炲200 OK
try {
responseAck(request, Response.OK);
} catch (SipException | InvalidArgumentException | ParseException e) {
logger.error("[鍛戒护鍙戦�佸け璐 蹇冭烦鍥炲: {}", e.getMessage());
+ }
+ if (DateUtil.getDifferenceForNow(device.getKeepaliveTime()) <= 3000L){
+ logger.info("[鏀跺埌蹇冭烦] 蹇冭烦鍙戦�佽繃浜庨绻侊紝宸插拷鐣� device: {}, callId: {}", device.getDeviceId(), request.getCallIdHeader().getCallId());
+ return;
}
RemoteAddressInfo remoteAddressInfo = SipUtils.getRemoteAddressFromRequest(request, userSetting.getSipUseSourceIpAsRemoteAddress());
@@ -80,7 +85,7 @@
}else {
long lastTime = DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(device.getKeepaliveTime());
if (System.currentTimeMillis()/1000-lastTime > 10) {
- device.setKeepaliveIntervalTime(new Long(System.currentTimeMillis()/1000-lastTime).intValue());
+ device.setKeepaliveIntervalTime(Long.valueOf(System.currentTimeMillis()/1000-lastTime).intValue());
}
}
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 9b2864f..465aa2f 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
@@ -494,6 +494,7 @@
Device device = deviceService.getDevice(inviteInfo.getDeviceId());
if (device != null) {
try {
+ // 澶氭煡璇竴娆¢槻姝㈠凡缁忚澶勭悊浜�
InviteInfo info = inviteStreamService.getInviteInfo(inviteInfo.getType(),
inviteInfo.getDeviceId(), inviteInfo.getChannelId(), inviteInfo.getStream());
if (info != null) {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java
index f412816..6e46082 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/InviteStreamServiceImpl.java
@@ -98,6 +98,9 @@
"_" + inviteInfo.getChannelId() +
"_" + stream;
inviteInfoInDb.setStream(stream);
+ if (inviteInfoInDb.getSsrcInfo() != null) {
+ inviteInfoInDb.getSsrcInfo().setStream(stream);
+ }
redisTemplate.opsForValue().set(key, inviteInfoInDb);
return inviteInfoInDb;
}
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
index 142b810..580561b 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -151,9 +151,14 @@
if (streamId == null) {
streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
}
+ int ssrcCheckParam = 0;
+ if (ssrcCheck && tcpMode > 1) {
+ // 鐩墠zlm涓嶆敮鎸� tcp妯″紡鏇存柊ssrc锛屾殏鏃跺叧闂璼src鏍¢獙
+ logger.warn("[openRTPServer] TCP琚姩/TCP涓诲姩鏀舵祦鏃讹紝榛樿鍏抽棴ssrc妫�楠�");
+ }
int rtpServerPort;
if (mediaServerItem.isRtpEnable()) {
- rtpServerPort = zlmServerFactory.createRTPServer(mediaServerItem, streamId, ssrcCheck?Integer.parseInt(ssrc):0, port, reUsePort, tcpMode);
+ rtpServerPort = zlmServerFactory.createRTPServer(mediaServerItem, streamId, (ssrcCheck && tcpMode == 0)?Integer.parseInt(ssrc):0, port, reUsePort, tcpMode);
} else {
rtpServerPort = mediaServerItem.getRtpProxyPort();
}
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 113c859..260b9a4 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
@@ -17,6 +17,7 @@
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import com.genersoft.iot.vmp.media.zlm.AssistRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory;
@@ -34,6 +35,7 @@
import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import com.genersoft.iot.vmp.utils.DateUtil;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
+import gov.nist.javax.sip.message.SIPResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -95,7 +97,6 @@
@Autowired
private VideoStreamSessionManager streamSession;
-
@Autowired
private IDeviceService deviceService;
@@ -108,25 +109,25 @@
@Autowired
private ZlmHttpHookSubscribe subscribe;
- @Autowired
- private SSRCFactory ssrcFactory;
-
- @Autowired
- private RedisTemplate<Object, Object> redisTemplate;
-
@Override
public SSRCInfo play(MediaServerItem mediaServerItem, String deviceId, String channelId, String ssrc, ErrorCallback<Object> callback) {
if (mediaServerItem == null) {
+ logger.warn("[鐐规挱] 鏈壘鍒板彲鐢ㄧ殑zlm deviceId: {},channelId:{}", deviceId, channelId);
throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒板彲鐢ㄧ殑zlm");
}
Device device = redisCatchStorage.getDevice(deviceId);
+ if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE") && !mediaServerItem.isRtpEnable()) {
+ logger.warn("[鐐规挱] 鍗曠鍙f敹娴佹椂涓嶆敮鎸乀CP涓诲姩鏂瑰紡鏀舵祦 deviceId: {},channelId:{}", deviceId, channelId);
+ throw new ControllerException(ErrorCode.ERROR100.getCode(), "鍗曠鍙f敹娴佹椂涓嶆敮鎸乀CP涓诲姩鏂瑰紡鏀舵祦");
+ }
InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
if (inviteInfo != null ) {
if (inviteInfo.getStreamInfo() == null) {
// 鐐规挱鍙戣捣浜嗕絾鏄皻鏈垚鍔�, 浠呮敞鍐屽洖璋冪瓑寰呯粨鏋滃嵆鍙�
inviteStreamService.once(InviteSessionType.PLAY, deviceId, channelId, null, callback);
+ logger.info("[鐐规挱寮�濮媇 宸茬粡璇锋眰涓紝绛夊緟缁撴灉锛� deviceId: {}, channelId: {}", device.getDeviceId(), channelId);
return inviteInfo.getSsrcInfo();
}else {
StreamInfo streamInfo = inviteInfo.getStreamInfo();
@@ -149,6 +150,7 @@
InviteErrorCode.SUCCESS.getCode(),
InviteErrorCode.SUCCESS.getMsg(),
streamInfo);
+ logger.info("[鐐规挱宸插瓨鍦╙ 鐩存帴杩斿洖锛� deviceId: {}, channelId: {}", device.getDeviceId(), channelId);
return inviteInfo.getSsrcInfo();
}else {
// 鐐规挱鍙戣捣浜嗕絾鏄皻鏈垚鍔�, 浠呮敞鍐屽洖璋冪瓑寰呯粨鏋滃嵆鍙�
@@ -171,7 +173,6 @@
null);
return null;
}
- // TODO 璁板綍鐐规挱鐨勭姸鎬�
play(mediaServerItem, ssrcInfo, device, channelId, callback);
return ssrcInfo;
}
@@ -187,8 +188,8 @@
null);
return;
}
- logger.info("[鐐规挱寮�濮媇 deviceId: {}, channelId: {},鐮佹祦绫诲瀷锛歿}, 鏀舵祦绔彛锛� {}, 鏀舵祦妯″紡锛歿}, SSRC: {}, SSRC鏍¢獙锛歿}",
- device.getDeviceId(), channelId, device.isSwitchPrimarySubStream() ? "杈呯爜娴�" : "涓荤爜娴�", ssrcInfo.getPort(),
+ logger.info("[鐐规挱寮�濮媇 deviceId: {}, channelId: {},鐮佹祦绫诲瀷锛歿}, 鏀舵祦绔彛锛� {}, STREAM锛歿}, 鏀舵祦妯″紡锛歿}, SSRC: {}, SSRC鏍¢獙锛歿}",
+ device.getDeviceId(), channelId, device.isSwitchPrimarySubStream() ? "杈呯爜娴�" : "涓荤爜娴�", ssrcInfo.getPort(), ssrcInfo.getStream(),
device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck());
//绔彛鑾峰彇澶辫触鐨剆srcInfo 娌℃湁蹇呰鍙戦�佺偣鎾寚浠�
if (ssrcInfo.getPort() <= 0) {
@@ -219,16 +220,6 @@
device.getDeviceId(), channelId, device.isSwitchPrimarySubStream() ? "杈呯爜娴�" : "涓荤爜娴�",
ssrcInfo.getPort(), ssrcInfo.getSsrc());
- // 鐐规挱瓒呮椂鍥炲BYE 鍚屾椂閲婃斁ssrc浠ュ強姝ゆ鐐规挱鐨勮祫婧�
-// InviteInfo inviteInfoForTimeout = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.play, device.getDeviceId(), channelId);
-// if (inviteInfoForTimeout == null) {
-// return;
-// }
-// if (InviteSessionStatus.ok == inviteInfoForTimeout.getStatus() ) {
-// // TODO 鍙戦�乥ye
-// }else {
-// // TODO 鍙戦�乧ancel
-// }
callback.run(InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getCode(), InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getMsg(), null);
inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null,
InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getCode(), InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getMsg(), null);
@@ -272,99 +263,10 @@
logger.info("[鐐规挱鎴愬姛] deviceId: {}, channelId:{}, 鐮佹祦绫诲瀷锛歿}", device.getDeviceId(), channelId,
device.isSwitchPrimarySubStream() ? "杈呯爜娴�" : "涓荤爜娴�");
snapOnPlay(mediaServerItemInuse, device.getDeviceId(), channelId, ssrcInfo.getStream());
- }, (event) -> {
- inviteInfo.setStatus(InviteSessionStatus.ok);
-
- ResponseEvent responseEvent = (ResponseEvent) event.event;
- String contentString = new String(responseEvent.getResponse().getRawContent());
- // 鑾峰彇ssrc
- int ssrcIndex = contentString.indexOf("y=");
- // 妫�鏌ユ槸鍚︽湁y瀛楁
- if (ssrcIndex >= 0) {
- //ssrc瑙勫畾闀垮害涓�10瀛楄妭锛屼笉鍙栦綑涓嬮暱搴︿互閬垮厤鍚庣画杩樻湁鈥渇=鈥濆瓧娈� TODO 鍚庣画瀵逛笉瑙勮寖鐨勯潪10浣峴src鍏煎
- String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12).trim();
- // 鏌ヨ鍒皊src涓嶄竴鑷翠笖寮�鍚簡ssrc鏍¢獙鍒欓渶瑕侀拡瀵瑰鐞�
- if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
- if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
- tcpActiveHandler(device, channelId, contentString, mediaServerItem, timeOutTaskKey, ssrcInfo, callback);
- }
- return;
- }
- logger.info("[鐐规挱娑堟伅] 鏀跺埌invite 200, 鍙戠幇涓嬬骇鑷畾涔変簡ssrc: {}", ssrcInResponse);
- if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
- logger.info("[鐐规挱娑堟伅] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
- // 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄噸鏂拌缃洃鍚嵆鍙�
- if (!mediaServerItem.isRtpEnable()) {
- // 娣诲姞璁㈤槄
- HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
- subscribe.removeSubscribe(hookSubscribe);
- String stream = String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase();
- hookSubscribe.getContent().put("stream", stream);
- inviteStreamService.updateInviteInfoForStream(inviteInfo, stream);
- subscribe.addSubscribe(hookSubscribe, (mediaServerItemInUse, hookParam) -> {
- logger.info("[ZLM HOOK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + hookParam);
- dynamicTask.stop(timeOutTaskKey);
- // hook鍝嶅簲
- StreamInfo streamInfo = onPublishHandlerForPlay(mediaServerItemInUse, hookParam, device.getDeviceId(), channelId);
- if (streamInfo == null){
- callback.run(InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getCode(),
- InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getMsg(), null);
- inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null,
- InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getCode(),
- InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getMsg(), null);
- return;
- }
- callback.run(InviteErrorCode.SUCCESS.getCode(),
- InviteErrorCode.SUCCESS.getMsg(), streamInfo);
- inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null,
- InviteErrorCode.SUCCESS.getCode(),
- InviteErrorCode.SUCCESS.getMsg(),
- streamInfo);
- snapOnPlay(mediaServerItemInUse, device.getDeviceId(), channelId, stream);
- });
- return;
- }
-
- // 鏇存柊ssrc
- Boolean result = mediaServerService.updateRtpServerSSRC(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse);
- if (!result) {
- try {
- logger.warn("[鐐规挱] 鏇存柊ssrc澶辫触锛屽仠姝㈢偣鎾� {}/{}", device.getDeviceId(), channelId);
- cmder.streamByeCmd(device, channelId, ssrcInfo.getStream(), null, null);
- } catch (InvalidArgumentException | SipException | ParseException | SsrcTransactionNotFoundException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍋滄鐐规挱锛� 鍙戦�丅YE: {}", e.getMessage());
- }
-
- dynamicTask.stop(timeOutTaskKey);
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-
- callback.run(InviteErrorCode.ERROR_FOR_RESET_SSRC.getCode(),
- "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触", null);
- inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null,
- InviteErrorCode.ERROR_FOR_RESET_SSRC.getCode(),
- "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触", null);
-
- }else {
- if (ssrcInfo.getStream()!= null && !ssrcInfo.getStream().equals(inviteInfo.getStream())) {
- inviteStreamService.removeInviteInfo(inviteInfo);
- }
- ssrcInfo.setSsrc(ssrcInResponse);
- inviteInfo.setSsrcInfo(ssrcInfo);
- inviteInfo.setStream(ssrcInfo.getStream());
- if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
- tcpActiveHandler(device, channelId, contentString, mediaServerItem, timeOutTaskKey, ssrcInfo, callback);
- }
- }
- }else {
- logger.info("[鐐规挱娑堟伅] 鏀跺埌invite 200, 涓嬬骇鑷畾涔変簡ssrc, 浣嗘槸褰撳墠妯″紡鏃犻渶淇");
- }
- }
- inviteStreamService.updateInviteInfo(inviteInfo);
+ }, (eventResult) -> {
+ // 澶勭悊鏀跺埌200ok鍚庣殑TCP涓诲姩杩炴帴浠ュ強SSRC涓嶄竴鑷寸殑闂
+ InviteOKHandler(eventResult, ssrcInfo, mediaServerItem, device, channelId,
+ timeOutTaskKey, callback, inviteInfo, InviteSessionType.PLAY);
}, (event) -> {
dynamicTask.stop(timeOutTaskKey);
mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
@@ -548,19 +450,23 @@
String endTime, ErrorCallback<Object> callback) {
Device device = storager.queryVideoDevice(deviceId);
if (device == null) {
- return;
+ logger.warn("[褰曞儚鍥炴斁] 鏈壘鍒拌澶� deviceId: {},channelId:{}", deviceId, channelId);
+ throw new ControllerException(ErrorCode.ERROR100.getCode(), "鏈壘鍒拌澶囷細" + deviceId);
}
+
MediaServerItem newMediaServerItem = getNewMediaServerItem(device);
+ if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE") && ! newMediaServerItem.isRtpEnable()) {
+ logger.warn("[褰曞儚鍥炴斁] 鍗曠鍙f敹娴佹椂涓嶆敮鎸乀CP涓诲姩鏂瑰紡鏀舵祦 deviceId: {},channelId:{}", deviceId, channelId);
+ throw new ControllerException(ErrorCode.ERROR100.getCode(), "鍗曠鍙f敹娴佹椂涓嶆敮鎸乀CP涓诲姩鏂瑰紡鏀舵祦");
+ }
String stream = null;
if (newMediaServerItem.isRtpEnable()) {
String startTimeStr = startTime.replace("-", "")
.replace(":", "")
.replace(" ", "");
- System.out.println(startTimeStr);
String endTimeTimeStr = endTime.replace("-", "")
.replace(":", "")
.replace(" ", "");
- System.out.println(endTimeTimeStr);
stream = deviceId + "_" + channelId + "_" + startTimeStr + "_" + endTimeTimeStr;
}
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, stream, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam());
@@ -636,90 +542,134 @@
try {
cmder.playbackStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime,
hookEvent, eventResult -> {
- inviteInfo.setStatus(InviteSessionStatus.ok);
- ResponseEvent responseEvent = (ResponseEvent) eventResult.event;
- String contentString = new String(responseEvent.getResponse().getRawContent());
- // 鑾峰彇ssrc
- int ssrcIndex = contentString.indexOf("y=");
- // 妫�鏌ユ槸鍚︽湁y瀛楁
- if (ssrcIndex >= 0) {
- //ssrc瑙勫畾闀垮害涓�10瀛楄妭锛屼笉鍙栦綑涓嬮暱搴︿互閬垮厤鍚庣画杩樻湁鈥渇=鈥濆瓧娈� TODO 鍚庣画瀵逛笉瑙勮寖鐨勯潪10浣峴src鍏煎
- String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
- // 鏌ヨ鍒皊src涓嶄竴鑷翠笖寮�鍚簡ssrc鏍¢獙鍒欓渶瑕侀拡瀵瑰鐞�
- if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
- if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
- tcpActiveHandler(device, channelId, contentString, mediaServerItem, playBackTimeOutTaskKey, ssrcInfo, callback);
- }
- return;
- }
- logger.info("[褰曞儚鍥炴斁] 鏀跺埌invite 200, 鍙戠幇涓嬬骇鑷畾涔変簡ssrc: {}", ssrcInResponse);
- if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
- logger.info("[褰曞儚鍥炴斁] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
+ // 澶勭悊鏀跺埌200ok鍚庣殑TCP涓诲姩杩炴帴浠ュ強SSRC涓嶄竴鑷寸殑闂
+ InviteOKHandler(eventResult, ssrcInfo, mediaServerItem, device, channelId,
+ playBackTimeOutTaskKey, callback, inviteInfo, InviteSessionType.PLAYBACK);
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-
- // 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄渶瑕侀噸鏂拌缃洃鍚�
- if (!mediaServerItem.isRtpEnable()) {
- // 娣诲姞璁㈤槄
- HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
- subscribe.removeSubscribe(hookSubscribe);
- String stream = String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase();
- hookSubscribe.getContent().put("stream", stream);
- inviteStreamService.updateInviteInfoForStream(inviteInfo, stream);
- subscribe.addSubscribe(hookSubscribe, (mediaServerItemInUse, hookParam) -> {
- logger.info("[ZLM HOOK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + hookParam);
- dynamicTask.stop(playBackTimeOutTaskKey);
- // hook鍝嶅簲
- hookEvent.response(mediaServerItemInUse, hookParam);
- });
- }
- // 鏇存柊ssrc
- Boolean result = mediaServerService.updateRtpServerSSRC(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse);
- if (!result) {
- try {
- logger.warn("[褰曞儚鍥炴斁] 鏇存柊ssrc澶辫触锛屽仠姝㈠綍鍍忓洖鏀� {}/{}", device.getDeviceId(), channelId);
- cmder.streamByeCmd(device, channelId, ssrcInfo.getStream(), null, null);
- } catch (InvalidArgumentException | SipException | ParseException | SsrcTransactionNotFoundException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍋滄鐐规挱锛� 鍙戦�丅YE: {}", e.getMessage());
-
- }
-
- dynamicTask.stop(playBackTimeOutTaskKey);
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-
- callback.run(InviteErrorCode.ERROR_FOR_RESET_SSRC.getCode(),
- "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触", null);
-
- }else {
- if (ssrcInfo.getStream()!= null && !ssrcInfo.getStream().equals(inviteInfo.getStream())) {
- inviteStreamService.removeInviteInfo(inviteInfo);
- }
-
- ssrcInfo.setSsrc(ssrcInResponse);
- inviteInfo.setSsrcInfo(ssrcInfo);
- inviteInfo.setStream(ssrcInfo.getStream());
- if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
- tcpActiveHandler(device, channelId, contentString, mediaServerItem, playBackTimeOutTaskKey, ssrcInfo, callback);
- }
- }
- }else {
- logger.info("[鐐规挱娑堟伅] 鏀跺埌invite 200, 涓嬬骇鑷畾涔変簡ssrc, 浣嗘槸褰撳墠妯″紡鏃犻渶淇");
- }
- }
- inviteStreamService.updateInviteInfo(inviteInfo);
}, errorEvent);
} catch (InvalidArgumentException | SipException | ParseException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍥炴斁: {}", e.getMessage());
+ logger.error("[鍛戒护鍙戦�佸け璐 褰曞儚鍥炴斁: {}", e.getMessage());
SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult();
eventResult.type = SipSubscribe.EventResultType.cmdSendFailEvent;
eventResult.statusCode = -1;
eventResult.msg = "鍛戒护鍙戦�佸け璐�";
errorEvent.response(eventResult);
+ }
+ }
+
+
+ private void InviteOKHandler(SipSubscribe.EventResult eventResult, SSRCInfo ssrcInfo, MediaServerItem mediaServerItem,
+ Device device, String channelId, String timeOutTaskKey, ErrorCallback<Object> callback,
+ InviteInfo inviteInfo, InviteSessionType inviteSessionType){
+ inviteInfo.setStatus(InviteSessionStatus.ok);
+ ResponseEvent responseEvent = (ResponseEvent) eventResult.event;
+ String contentString = new String(responseEvent.getResponse().getRawContent());
+ String ssrcInResponse = SipUtils.getSsrcFromSdp(contentString);
+ if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
+ // ssrc 涓�鑷�
+ if (mediaServerItem.isRtpEnable()) {
+ // 澶氱鍙�
+ if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
+ tcpActiveHandler(device, channelId, contentString, mediaServerItem, timeOutTaskKey, ssrcInfo, callback);
+ }
+ }else {
+ // 鍗曠鍙�
+ if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
+ logger.warn("[Invite 200OK] 鍗曠鍙f敹娴佹ā寮忎笉鏀寔tcp涓诲姩妯″紡鏀舵祦");
+ }
+
+ }
+ }else {
+ logger.info("[Invite 200OK] 鏀跺埌invite 200, 鍙戠幇涓嬬骇鑷畾涔変簡ssrc: {}", ssrcInResponse);
+ // ssrc 涓嶄竴鑷�
+ if (mediaServerItem.isRtpEnable()) {
+ // 澶氱鍙�
+ if (device.isSsrcCheck()) {
+ // ssrc妫�楠�
+ // 鏇存柊ssrc
+ logger.info("[Invite 200OK] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
+ // 閲婃斁ssrc
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
+ Boolean result = mediaServerService.updateRtpServerSSRC(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse);
+ if (!result) {
+ try {
+ logger.warn("[Invite 200OK] 鏇存柊ssrc澶辫触锛屽仠姝㈢偣鎾� {}/{}", device.getDeviceId(), channelId);
+ cmder.streamByeCmd(device, channelId, ssrcInfo.getStream(), null, null);
+ } catch (InvalidArgumentException | SipException | ParseException | SsrcTransactionNotFoundException e) {
+ logger.error("[鍛戒护鍙戦�佸け璐 鍋滄鎾斁锛� 鍙戦�丅YE: {}", e.getMessage());
+ }
+
+ dynamicTask.stop(timeOutTaskKey);
+ // 閲婃斁ssrc
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
+
+ streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
+
+ callback.run(InviteErrorCode.ERROR_FOR_RESET_SSRC.getCode(),
+ "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触", null);
+ inviteStreamService.call(inviteSessionType, device.getDeviceId(), channelId, null,
+ InviteErrorCode.ERROR_FOR_RESET_SSRC.getCode(),
+ "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触", null);
+
+ }else {
+ ssrcInfo.setSsrc(ssrcInResponse);
+ inviteInfo.setSsrcInfo(ssrcInfo);
+ inviteInfo.setStream(ssrcInfo.getStream());
+ if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
+ if (mediaServerItem.isRtpEnable()) {
+ tcpActiveHandler(device, channelId, contentString, mediaServerItem, timeOutTaskKey, ssrcInfo, callback);
+ }else {
+ logger.warn("[Invite 200OK] 鍗曠鍙f敹娴佹ā寮忎笉鏀寔tcp涓诲姩妯″紡鏀舵祦");
+ }
+ }
+ inviteStreamService.updateInviteInfo(inviteInfo);
+ }
+ }
+ }else {
+ if (ssrcInResponse != null) {
+ // 鍗曠鍙�
+ // 閲嶆柊璁㈤槄娴佷笂绾�
+ HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp",
+ ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
+ subscribe.removeSubscribe(hookSubscribe);
+ SsrcTransaction ssrcTransaction = streamSession.getSsrcTransaction(inviteInfo.getDeviceId(),
+ inviteInfo.getChannelId(), null, inviteInfo.getStream());
+ streamSession.remove(inviteInfo.getDeviceId(),
+ inviteInfo.getChannelId(), inviteInfo.getStream());
+
+ String stream = String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase();
+ hookSubscribe.getContent().put("stream", stream);
+
+ inviteStreamService.updateInviteInfoForStream(inviteInfo, stream);
+ streamSession.put(device.getDeviceId(), channelId, ssrcTransaction.getCallId(),
+ stream, ssrcInResponse, mediaServerItem.getId(), (SIPResponse) responseEvent.getResponse(), inviteSessionType);
+ subscribe.addSubscribe(hookSubscribe, (mediaServerItemInUse, hookParam) -> {
+ logger.info("[Invite 200OK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + hookParam);
+ dynamicTask.stop(timeOutTaskKey);
+ subscribe.removeSubscribe(hookSubscribe);
+ // hook鍝嶅簲
+ StreamInfo streamInfo = onPublishHandlerForPlay(mediaServerItemInUse, hookParam, device.getDeviceId(), channelId);
+ if (streamInfo == null){
+ callback.run(InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getCode(),
+ InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getMsg(), null);
+ inviteStreamService.call(inviteSessionType, device.getDeviceId(), channelId, null,
+ InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getCode(),
+ InviteErrorCode.ERROR_FOR_STREAM_PARSING_EXCEPTIONS.getMsg(), null);
+ return;
+ }
+ callback.run(InviteErrorCode.SUCCESS.getCode(),
+ InviteErrorCode.SUCCESS.getMsg(), streamInfo);
+ inviteStreamService.call(inviteSessionType, device.getDeviceId(), channelId, null,
+ InviteErrorCode.SUCCESS.getCode(),
+ InviteErrorCode.SUCCESS.getMsg(),
+ streamInfo);
+ if (inviteSessionType == InviteSessionType.PLAY) {
+ snapOnPlay(mediaServerItemInUse, device.getDeviceId(), channelId, stream);
+ }
+ });
+ }
+ }
}
}
@@ -738,7 +688,17 @@
null);
return;
}
- SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam());
+ String stream = null;
+ if (newMediaServerItem.isRtpEnable()) {
+ String startTimeStr = startTime.replace("-", "")
+ .replace(":", "")
+ .replace(" ", "");
+ String endTimeTimeStr = endTime.replace("-", "")
+ .replace(":", "")
+ .replace(" ", "");
+ stream = deviceId + "_" + channelId + "_" + startTimeStr + "_" + endTimeTimeStr;
+ }
+ SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, stream, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam());
download(newMediaServerItem, ssrcInfo, deviceId, channelId, startTime, endTime, downloadSpeed, callback);
}
@@ -806,79 +766,9 @@
try {
cmder.downloadStreamCmd(mediaServerItem, ssrcInfo, device, channelId, startTime, endTime, downloadSpeed,
hookEvent, errorEvent, eventResult ->{
- inviteInfo.setStatus(InviteSessionStatus.ok);
- ResponseEvent responseEvent = (ResponseEvent) eventResult.event;
- String contentString = new String(responseEvent.getResponse().getRawContent());
- // 鑾峰彇ssrc
- int ssrcIndex = contentString.indexOf("y=");
- // 妫�鏌ユ槸鍚︽湁y瀛楁
- if (ssrcIndex >= 0) {
- //ssrc瑙勫畾闀垮害涓�10瀛楄妭锛屼笉鍙栦綑涓嬮暱搴︿互閬垮厤鍚庣画杩樻湁鈥渇=鈥濆瓧娈� TODO 鍚庣画瀵逛笉瑙勮寖鐨勯潪10浣峴src鍏煎
- String ssrcInResponse = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
- // 鏌ヨ鍒皊src涓嶄竴鑷翠笖寮�鍚簡ssrc鏍¢獙鍒欓渶瑕侀拡瀵瑰鐞�
- if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
- if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
- tcpActiveHandler(device, channelId, contentString, mediaServerItem, downLoadTimeOutTaskKey, ssrcInfo, callback);
- }
- return;
- }
- logger.info("[褰曞儚涓嬭浇] 鏀跺埌invite 200, 鍙戠幇涓嬬骇鑷畾涔変簡ssrc: {}", ssrcInResponse);
- if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) {
- logger.info("[褰曞儚涓嬭浇] SSRC淇 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse);
-
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-
- // 鍗曠鍙fā寮弒treamId涔熸湁鍙樺寲锛岄渶瑕侀噸鏂拌缃洃鍚�
- if (!mediaServerItem.isRtpEnable()) {
- // 娣诲姞璁㈤槄
- HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
- subscribe.removeSubscribe(hookSubscribe);
- String stream = String.format("%08x", Integer.parseInt(ssrcInResponse)).toUpperCase();
- hookSubscribe.getContent().put("stream", stream);
- inviteStreamService.updateInviteInfoForStream(inviteInfo, stream);
- subscribe.addSubscribe(hookSubscribe, (mediaServerItemInUse, hookParam) -> {
- logger.info("[ZLM HOOK] ssrc淇鍚庢敹鍒拌闃呮秷鎭細 " + hookParam);
- dynamicTask.stop(downLoadTimeOutTaskKey);
- hookEvent.response(mediaServerItemInUse, hookParam);
- });
- }
-
- // 鏇存柊ssrc
- Boolean result = mediaServerService.updateRtpServerSSRC(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse);
- if (!result) {
- try {
- logger.warn("[褰曞儚涓嬭浇] 鏇存柊ssrc澶辫触锛屽仠姝㈠綍鍍忓洖鏀� {}/{}", device.getDeviceId(), channelId);
- cmder.streamByeCmd(device, channelId, ssrcInfo.getStream(), null, null);
- } catch (InvalidArgumentException | SipException | ParseException | SsrcTransactionNotFoundException e) {
- logger.error("[鍛戒护鍙戦�佸け璐 鍋滄鐐规挱锛� 鍙戦�丅YE: {}", e.getMessage());
- }
-
- dynamicTask.stop(downLoadTimeOutTaskKey);
- // 閲婃斁ssrc
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
-
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
-
- callback.run(InviteErrorCode.ERROR_FOR_RESET_SSRC.getCode(),
- "涓嬬骇鑷畾涔変簡ssrc,閲嶆柊璁剧疆鏀舵祦淇℃伅澶辫触", null);
-
- }else {
- if (ssrcInfo.getStream()!= null && !ssrcInfo.getStream().equals(inviteInfo.getStream())) {
- inviteStreamService.removeInviteInfo(inviteInfo);
- }
- ssrcInfo.setSsrc(ssrcInResponse);
- inviteInfo.setSsrcInfo(ssrcInfo);
- inviteInfo.setStream(ssrcInfo.getStream());
- if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
- tcpActiveHandler(device, channelId, contentString, mediaServerItem, downLoadTimeOutTaskKey, ssrcInfo, callback);
- }
- }
- }else {
- logger.info("[褰曞儚涓嬭浇] 鏀跺埌invite 200, 涓嬬骇鑷畾涔変簡ssrc, 浣嗘槸褰撳墠妯″紡鏃犻渶淇");
- }
- }
- inviteStreamService.updateInviteInfo(inviteInfo);
+ // 澶勭悊鏀跺埌200ok鍚庣殑TCP涓诲姩杩炴帴浠ュ強SSRC涓嶄竴鑷寸殑闂
+ InviteOKHandler(eventResult, ssrcInfo, mediaServerItem, device, channelId,
+ downLoadTimeOutTaskKey, callback, inviteInfo, InviteSessionType.DOWNLOAD);
});
} catch (InvalidArgumentException | SipException | ParseException e) {
logger.error("[鍛戒护鍙戦�佸け璐 褰曞儚涓嬭浇: {}", e.getMessage());
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java
index 923f834..23cb9da 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/DateUtil.java
@@ -7,6 +7,7 @@
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;
+import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAccessor;
import java.util.Locale;
@@ -106,4 +107,9 @@
LocalDateTime nowDateTime = LocalDateTime.now();
return formatterISO8601.format(nowDateTime);
}
+
+ public static long getDifferenceForNow(String keepaliveTime) {
+ Instant beforeInstant = Instant.from(formatter.parse(keepaliveTime));
+ return ChronoUnit.MILLIS.between(beforeInstant, Instant.now());
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index 445e42f..3d233dc 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -111,7 +111,7 @@
wvpResult.setCode(ErrorCode.ERROR100.getCode());
wvpResult.setMsg("鐐规挱瓒呮椂");
requestMessage.setData(wvpResult);
- resultHolder.invokeResult(requestMessage);
+ resultHolder.invokeAllResult(requestMessage);
inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
storager.stopPlay(deviceId, channelId);
});
@@ -166,7 +166,7 @@
}
if (InviteSessionStatus.ok == inviteInfo.getStatus()) {
try {
- logger.warn("[鍋滄鐐规挱] {}/{}", device.getDeviceId(), channelId);
+ logger.info("[鍋滄鐐规挱] {}/{}", device.getDeviceId(), channelId);
cmder.streamByeCmd(device, channelId, inviteInfo.getStream(), null, null);
} catch (InvalidArgumentException | SipException | ParseException | SsrcTransactionNotFoundException e) {
logger.error("[鍛戒护鍙戦�佸け璐 鍋滄鐐规挱锛� 鍙戦�丅YE: {}", e.getMessage());
--
Gitblit v1.8.0