From 5b8ffd5b61666f399d1a46a403bfc8c5bf054ba5 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期三, 14 六月 2023 18:14:40 +0800
Subject: [PATCH] 修复前端空指针异常 #831
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java | 81 +++++++++++++++++++++++-----------------
1 files changed, 47 insertions(+), 34 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index 44f0349..e21dfd6 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -19,7 +19,7 @@
import com.genersoft.iot.vmp.service.IPlayService;
import com.genersoft.iot.vmp.service.IStreamProxyService;
import com.genersoft.iot.vmp.service.IStreamPushService;
-import com.genersoft.iot.vmp.service.bean.InviteErrorCallback;
+import com.genersoft.iot.vmp.service.bean.ErrorCallback;
import com.genersoft.iot.vmp.service.bean.InviteErrorCode;
import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
@@ -241,18 +241,8 @@
// 瑙f瀽sdp娑堟伅, 浣跨敤jainsip 鑷甫鐨剆dp瑙f瀽鏂瑰紡
String contentString = new String(request.getRawContent());
- // jainSip涓嶆敮鎸亂=瀛楁锛� 绉婚櫎浠ヨВ鏋愩��
- // 妫�鏌ユ槸鍚︽湁y瀛楁
- int ssrcIndex = contentString.indexOf("y=");
-
- SessionDescription sdp;
- if (ssrcIndex >= 0) {
- //ssrc瑙勫畾闀垮害涓�10涓瓧鑺傦紝涓嶅彇浣欎笅闀垮害浠ラ伩鍏嶅悗缁繕鏈夆�渇=鈥濆瓧娈�
- String substring = contentString.substring(0, ssrcIndex);
- sdp = SdpFactory.getInstance().createSessionDescription(substring);
- } else {
- sdp = SdpFactory.getInstance().createSessionDescription(contentString);
- }
+ Gb28181Sdp gb28181Sdp = SipUtils.parseSDP(contentString);
+ SessionDescription sdp = gb28181Sdp.getBaseSdb();
String sessionName = sdp.getSessionName().getValue();
Long startTime = null;
@@ -340,11 +330,11 @@
}
String ssrc;
- if (userSetting.getUseCustomSsrcForParentInvite() || ssrcIndex < 0) {
+ if (userSetting.getUseCustomSsrcForParentInvite() || gb28181Sdp.getSsrc() == null) {
// 涓婄骇骞冲彴鐐规挱鏃朵笉浣跨敤涓婄骇骞冲彴鎸囧畾鐨剆src锛屼娇鐢ㄨ嚜瀹氫箟鐨剆src锛屽弬鑰冨浗鏍囨枃妗�-鐐规挱澶栧煙璁惧濯掍綋娴丼SRC澶勭悊鏂瑰紡
ssrc = "Play".equalsIgnoreCase(sessionName) ? ssrcFactory.getPlaySsrc(mediaServerItem.getId()) : ssrcFactory.getPlayBackSsrc(mediaServerItem.getId());
}else {
- ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
+ ssrc = gb28181Sdp.getSsrc();
}
String streamTypeStr = null;
if (mediaTransmissionTCP) {
@@ -377,7 +367,7 @@
Long finalStartTime = startTime;
Long finalStopTime = stopTime;
- InviteErrorCallback<Object> hookEvent = (code, msg, data) -> {
+ ErrorCallback<Object> hookEvent = (code, msg, data) -> {
StreamInfo streamInfo = (StreamInfo)data;
MediaServerItem mediaServerItemInUSe = mediaServerService.getOne(streamInfo.getMediaServerId());
logger.info("[涓婄骇Invite]涓嬬骇宸茬粡寮�濮嬫帹娴併�� 鍥炲200OK(SDP)锛� {}/{}", streamInfo.getApp(), streamInfo.getStream());
@@ -426,11 +416,13 @@
logger.error("[鍛戒护鍙戦�佸け璐 鍥芥爣绾ц仈 鍥炲SdpAck", e);
}
};
- InviteErrorCallback<Object> errorEvent = ((statusCode, msg, data) -> {
+ ErrorCallback<Object> errorEvent = ((statusCode, msg, data) -> {
// 鏈煡閿欒銆傜洿鎺ヨ浆鍙戣澶囩偣鎾殑閿欒
try {
- Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
- sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
+ if (statusCode > 0) {
+ Response response = getMessageFactory().createResponse(statusCode, evt.getRequest());
+ sipSender.transmitRequest(request.getLocalAddress().getHostAddress(), response);
+ }
} catch (ParseException | SipException e) {
logger.error("鏈鐞嗙殑寮傚父 ", e);
}
@@ -455,7 +447,37 @@
errorEvent.run(code, msg, data);
}
});
- } else {
+ }else if ("Download".equalsIgnoreCase(sessionName)) {
+ // 鑾峰彇鎸囧畾鐨勪笅杞介�熷害
+ Vector sdpMediaDescriptions = sdp.getMediaDescriptions(true);
+ MediaDescription mediaDescription = null;
+ String downloadSpeed = "1";
+ if (sdpMediaDescriptions.size() > 0) {
+ mediaDescription = (MediaDescription)sdpMediaDescriptions.get(0);
+ }
+ if (mediaDescription != null) {
+ downloadSpeed = mediaDescription.getAttribute("downloadspeed");
+ }
+
+ sendRtpItem.setPlayType(InviteStreamType.DOWNLOAD);
+ SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, null, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam());
+ sendRtpItem.setStreamId(ssrcInfo.getStream());
+ // 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶�
+ redisCatchStorage.updateSendRTPSever(sendRtpItem);
+ playService.download(mediaServerItem, ssrcInfo, device.getDeviceId(), channelId, DateUtil.formatter.format(start),
+ DateUtil.formatter.format(end), Integer.parseInt(downloadSpeed),
+ (code, msg, data) -> {
+ if (code == InviteErrorCode.SUCCESS.getCode()){
+ hookEvent.run(code, msg, data);
+ }else if (code == InviteErrorCode.ERROR_FOR_SIGNALLING_TIMEOUT.getCode() || code == InviteErrorCode.ERROR_FOR_STREAM_TIMEOUT.getCode()){
+ logger.info("[褰曞儚涓嬭浇]瓒呮椂, 鐢ㄦ埛锛歿}锛� 閫氶亾锛歿}", username, channelId);
+ redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
+ errorEvent.run(code, msg, data);
+ }else {
+ errorEvent.run(code, msg, data);
+ }
+ });
+ }else {
sendRtpItem.setPlayType(InviteStreamType.PLAY);
String streamId = null;
if (mediaServerItem.isRtpEnable()) {
@@ -481,11 +503,11 @@
} else if (gbStream != null) {
String ssrc;
- if (userSetting.getUseCustomSsrcForParentInvite() || ssrcIndex < 0) {
+ if (userSetting.getUseCustomSsrcForParentInvite() || gb28181Sdp.getSsrc() == null) {
// 涓婄骇骞冲彴鐐规挱鏃朵笉浣跨敤涓婄骇骞冲彴鎸囧畾鐨剆src锛屼娇鐢ㄨ嚜瀹氫箟鐨剆src锛屽弬鑰冨浗鏍囨枃妗�-鐐规挱澶栧煙璁惧濯掍綋娴丼SRC澶勭悊鏂瑰紡
ssrc = "Play".equalsIgnoreCase(sessionName) ? ssrcFactory.getPlaySsrc(mediaServerItem.getId()) : ssrcFactory.getPlayBackSsrc(mediaServerItem.getId());
}else {
- ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
+ ssrc = gb28181Sdp.getSsrc();
}
if("push".equals(gbStream.getStreamType())) {
@@ -859,20 +881,11 @@
}
String contentString = new String(request.getRawContent());
// jainSip涓嶆敮鎸亂=瀛楁锛� 绉婚櫎绉婚櫎浠ヨВ鏋愩��
- String substring = contentString;
String ssrc = "0000000404";
- int ssrcIndex = contentString.indexOf("y=");
- if (ssrcIndex > 0) {
- substring = contentString.substring(0, ssrcIndex);
- ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
- }
- ssrcIndex = substring.indexOf("f=");
- if (ssrcIndex > 0) {
- substring = contentString.substring(0, ssrcIndex);
- }
- SessionDescription sdp = null;
+
try {
- sdp = SdpFactory.getInstance().createSessionDescription(substring);
+ Gb28181Sdp gb28181Sdp = SipUtils.parseSDP(contentString);
+ SessionDescription sdp = gb28181Sdp.getBaseSdb();
// 鑾峰彇鏀寔鐨勬牸寮�
Vector mediaDescriptions = sdp.getMediaDescriptions(true);
// 鏌ョ湅鏄惁鏀寔PS 璐熻浇96
--
Gitblit v1.8.0