Merge branch '2.6.8' into wvp-28181-2.0

# Conflicts:
#	src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
pull/1036/head
648540858 2023-08-25 08:56:47 +08:00
commit 3951a95284
3 changed files with 37 additions and 49 deletions

View File

@ -479,55 +479,47 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
errorEvent.run(code, msg, data); errorEvent.run(code, msg, data);
} }
}); });
}else if ("Download".equalsIgnoreCase(sessionName)) { } else {
// 获取指定的下载速度 sendRtpItem.setPlayType(InviteStreamType.PLAY);
Vector sdpMediaDescriptions = sdp.getMediaDescriptions(true); sendRtpItem.setPlayType(InviteStreamType.PLAY);
MediaDescription mediaDescription = null; // SsrcTransaction playTransaction = sessionManager.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
String downloadSpeed = "1"; StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
if (sdpMediaDescriptions.size() > 0) { if (streamInfo != null) {
mediaDescription = (MediaDescription)sdpMediaDescriptions.get(0); Boolean streamReady = zlmServerFactory.isStreamReady(mediaServerItem, streamInfo.getApp(), streamInfo.getStream());
} if (!streamReady) {
if (mediaDescription != null) { redisCatchStorage.stopPlay(streamInfo);
downloadSpeed = mediaDescription.getAttribute("downloadspeed"); storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId());
streamInfo = null;
}
} }
if (streamInfo == null) {
String streamId = null;
if (mediaServerItem.isRtpEnable()) {
streamId = String.format("%s_%s", device.getDeviceId(), channelId);
}
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, null, device.isSsrcCheck(), false, 0, false, device.getStreamModeForParam());
logger.info(JSONObject.toJSONString(ssrcInfo));
sendRtpItem.setStreamId(ssrcInfo.getStream());
sendRtpItem.setSsrc(ssrc);
sendRtpItem.setPlayType(InviteStreamType.DOWNLOAD); // 写入redis 超时时回复
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, null, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam()); redisCatchStorage.updateSendRTPSever(sendRtpItem);
sendRtpItem.setStreamId(ssrcInfo.getStream()); MediaServerItem finalMediaServerItem = mediaServerItem;
// 写入redis 超时时回复 playService.play(mediaServerItem, ssrcInfo, device, channelId, hookEvent, errorEvent, (code, msg) -> {
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 {
SSRCInfo ssrcInfo = playService.play(mediaServerItem, device.getDeviceId(), channelId, ssrc, ((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); logger.info("[上级点播]超时, 用户:{} 通道:{}", username, channelId);
redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null); redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
errorEvent.run(code, msg, data); });
}else { } else {
errorEvent.run(code, msg, data); // 当前系统作为下级平台使用当上级平台点播时不携带ssrc时并且设备在当前系统中已经点播了。这个时候需要重新给生成一个ssrc不使用默认的"0000000000"。
} sendRtpItem.setSsrc(ssrc);
})); sendRtpItem.setStreamId(playTransaction.getStream());
sendRtpItem.setPlayType(InviteStreamType.PLAY); // 写入redis 超时时回复
String streamId = String.format("%s_%s", device.getDeviceId(), channelId); redisCatchStorage.updateSendRTPSever(sendRtpItem);
sendRtpItem.setStreamId(streamId); JSONObject jsonObject = new JSONObject();
sendRtpItem.setSsrc(ssrcInfo.getSsrc()); jsonObject.put("app", sendRtpItem.getApp());
redisCatchStorage.updateSendRTPSever(sendRtpItem); jsonObject.put("stream", sendRtpItem.getStreamId());
hookEvent.response(mediaServerItem, jsonObject);
}
} }
} else if (gbStream != null) { } else if (gbStream != null) {

View File

@ -223,8 +223,6 @@ public class PsController {
String is_Udp = isUdp ? "1" : "0"; String is_Udp = isUdp ? "1" : "0";
param.put("is_udp", is_Udp); param.put("is_udp", is_Udp);
param.put("src_port", sendInfo.getSendLocalPort()); param.put("src_port", sendInfo.getSendLocalPort());
param.put("use_ps", "0");
param.put("only_audio", "1");
Boolean streamReady = zlmServerFactory.isStreamReady(mediaServerItem, app, stream); Boolean streamReady = zlmServerFactory.isStreamReady(mediaServerItem, app, stream);

View File

@ -247,7 +247,6 @@ public class RtpController {
String is_Udp = isUdp ? "1" : "0"; String is_Udp = isUdp ? "1" : "0";
paramForAudio.put("is_udp", is_Udp); paramForAudio.put("is_udp", is_Udp);
paramForAudio.put("src_port", sendInfo.getSendLocalPortForAudio()); paramForAudio.put("src_port", sendInfo.getSendLocalPortForAudio());
paramForAudio.put("use_ps", "0");
paramForAudio.put("only_audio", "1"); paramForAudio.put("only_audio", "1");
if (ptForAudio != null) { if (ptForAudio != null) {
paramForAudio.put("pt", ptForAudio); paramForAudio.put("pt", ptForAudio);
@ -268,7 +267,6 @@ public class RtpController {
String is_Udp = isUdp ? "1" : "0"; String is_Udp = isUdp ? "1" : "0";
paramForVideo.put("is_udp", is_Udp); paramForVideo.put("is_udp", is_Udp);
paramForVideo.put("src_port", sendInfo.getSendLocalPortForVideo()); paramForVideo.put("src_port", sendInfo.getSendLocalPortForVideo());
paramForVideo.put("use_ps", "0");
paramForVideo.put("only_audio", "0"); paramForVideo.put("only_audio", "0");
if (ptForVideo != null) { if (ptForVideo != null) {
paramForVideo.put("pt", ptForVideo); paramForVideo.put("pt", ptForVideo);