优化点播时RtpServer为正常关闭的问题

This commit is contained in:
648540858 2022-09-16 18:02:56 +08:00
parent 5b3dc4d595
commit 692f716788
7 changed files with 24 additions and 10 deletions

View File

@ -69,7 +69,7 @@ public class SIPProcessorObserver implements ISIPProcessorObserver {
* @param requestEvent RequestEvent事件 * @param requestEvent RequestEvent事件
*/ */
@Override @Override
@Async @Async("taskExecutor")
public void processRequest(RequestEvent requestEvent) { public void processRequest(RequestEvent requestEvent) {
String method = requestEvent.getRequest().getMethod(); String method = requestEvent.getRequest().getMethod();
if ("NOTIFY".equalsIgnoreCase(requestEvent.getRequest().getMethod())) { if ("NOTIFY".equalsIgnoreCase(requestEvent.getRequest().getMethod())) {
@ -89,7 +89,7 @@ public class SIPProcessorObserver implements ISIPProcessorObserver {
* @param responseEvent responseEvent事件 * @param responseEvent responseEvent事件
*/ */
@Override @Override
@Async @Async("taskExecutor")
public void processResponse(ResponseEvent responseEvent) { public void processResponse(ResponseEvent responseEvent) {
Response response = responseEvent.getResponse(); Response response = responseEvent.getResponse();
int status = response.getStatusCode(); int status = response.getStatusCode();

View File

@ -102,7 +102,7 @@ public class AckRequestProcessor extends SIPRequestProcessorParent implements In
SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId()); SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platformGbId, channelId, null, callIdHeader.getCallId());
String is_Udp = sendRtpItem.isTcp() ? "0" : "1"; String is_Udp = sendRtpItem.isTcp() ? "0" : "1";
MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
logger.info("收到ACK开始向上级推流 rtp/{}", sendRtpItem.getStreamId()); logger.info("收到ACKrtp/{}开始向上级推流, 目标 {}:{}SSRC={}", sendRtpItem.getStreamId(), sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc());
Map<String, Object> param = new HashMap<>(); Map<String, Object> param = new HashMap<>();
param.put("vhost","__defaultVhost__"); param.put("vhost","__defaultVhost__");
param.put("app",sendRtpItem.getApp()); param.put("app",sendRtpItem.getApp());

View File

@ -98,7 +98,18 @@ public class ZLMRTPServerFactory {
result = rtpInfo.getInteger("local_port"); result = rtpInfo.getInteger("local_port");
if (result == 0) { if (result == 0) {
// 此时说明rtpServer已经创建但是流还没有推上来 // 此时说明rtpServer已经创建但是流还没有推上来
// 此时重新打开rtpServer
Map<String, Object> param = new HashMap<>();
param.put("stream_id", streamId);
JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(mediaServerItem, param);
if (jsonObject != null ) {
System.out.println(jsonObject);
if (jsonObject.getInteger("code") == 0) {
return createRTPServer(mediaServerItem, streamId, ssrc, port);
}else {
logger.warn("[开启rtpServer], 重启RtpServer错误");
}
}
} }
return result; return result;
} }

View File

@ -104,7 +104,7 @@ public class ZLMRunner implements CommandLineRunner {
}, 60 * 1000 ); }, 60 * 1000 );
} }
@Async @Async("taskExecutor")
public void connectZlmServer(MediaServerItem mediaServerItem){ public void connectZlmServer(MediaServerItem mediaServerItem){
String connectZlmServerTaskKey = "connect-zlm-" + mediaServerItem.getId(); String connectZlmServerTaskKey = "connect-zlm-" + mediaServerItem.getId();
ZLMServerConfig zlmServerConfigFirst = getMediaServerConfig(mediaServerItem); ZLMServerConfig zlmServerConfigFirst = getMediaServerConfig(mediaServerItem);

View File

@ -36,7 +36,7 @@ public class ZLMStatusEventListener {
@Autowired @Autowired
private IPlayService playService; private IPlayService playService;
@Async @Async("taskExecutor")
@EventListener @EventListener
public void onApplicationEvent(ZLMOnlineEvent event) { public void onApplicationEvent(ZLMOnlineEvent event) {
logger.info("[ZLM] 上线 ID" + event.getMediaServerId()); logger.info("[ZLM] 上线 ID" + event.getMediaServerId());
@ -45,7 +45,7 @@ public class ZLMStatusEventListener {
playService.zlmServerOnline(event.getMediaServerId()); playService.zlmServerOnline(event.getMediaServerId());
} }
@Async @Async("taskExecutor")
@EventListener @EventListener
public void onApplicationEvent(ZLMOfflineEvent event) { public void onApplicationEvent(ZLMOfflineEvent event) {

View File

@ -253,7 +253,7 @@ public class PlayServiceImpl implements IPlayService {
if (ssrcInfo == null) { if (ssrcInfo == null) {
ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck(), false); ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck(), false);
} }
logger.info("[点播开始] deviceId: {}, channelId: {}, SSRC: {}", device.getDeviceId(), channelId, ssrcInfo.getSsrc() ); logger.info("[点播开始] deviceId: {}, channelId: {},收流端口: {}, 收流模式:{}, SSRC: {}, SSRC校验{}", device.getDeviceId(), channelId, ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck() );
// 超时处理 // 超时处理
String timeOutTaskKey = UUID.randomUUID().toString(); String timeOutTaskKey = UUID.randomUUID().toString();
SSRCInfo finalSsrcInfo = ssrcInfo; SSRCInfo finalSsrcInfo = ssrcInfo;
@ -262,12 +262,12 @@ public class PlayServiceImpl implements IPlayService {
SIPDialog dialog = streamSession.getDialogByStream(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); SIPDialog dialog = streamSession.getDialogByStream(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
if (dialog != null) { if (dialog != null) {
logger.info("[点播超时] 收流超时 deviceId: {}, channelId: {}", device.getDeviceId(), channelId); logger.info("[点播超时] 收流超时 deviceId: {}, channelId: {},端口:{}, SSRC: {}", device.getDeviceId(), channelId, finalSsrcInfo.getPort(), finalSsrcInfo.getSsrc());
timeoutCallback.run(1, "收流超时"); timeoutCallback.run(1, "收流超时");
// 点播超时回复BYE 同时释放ssrc以及此次点播的资源 // 点播超时回复BYE 同时释放ssrc以及此次点播的资源
cmder.streamByeCmd(device.getDeviceId(), channelId, finalSsrcInfo.getStream(), null); cmder.streamByeCmd(device.getDeviceId(), channelId, finalSsrcInfo.getStream(), null);
}else { }else {
logger.info("[点播超时] 消息未响应 deviceId: {}, channelId: {}", device.getDeviceId(), channelId); logger.info("[点播超时] 消息未响应 deviceId: {}, channelId: {},端口:{}, SSRC: {}", device.getDeviceId(), channelId, finalSsrcInfo.getPort(), finalSsrcInfo.getSsrc());
timeoutCallback.run(0, "点播超时"); timeoutCallback.run(0, "点播超时");
mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream()); mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());

View File

@ -394,6 +394,9 @@ export default {
console.log(this.videoUrl) console.log(this.videoUrl)
}, },
openDialog: function (tab, deviceId, channelId, param) { openDialog: function (tab, deviceId, channelId, param) {
if (this.showVideoDialog) {
return;
}
this.tabActiveName = tab; this.tabActiveName = tab;
this.channelId = channelId; this.channelId = channelId;
this.deviceId = deviceId; this.deviceId = deviceId;