修复并发点播时可能出现的rtpServer开启但是还未收到流的情况,编码类型136,137,138默认开启音频通道
This commit is contained in:
@@ -356,7 +356,7 @@ public class SIPCommander implements ISIPCommander {
|
||||
// String streamMode = device.getStreamMode().toUpperCase();
|
||||
|
||||
logger.info("{} 分配的ZLM为: {} [{}:{}]", stream, mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
||||
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", stream, true, "rtmp", mediaServerItem.getId());
|
||||
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", stream, true, "rtsp", mediaServerItem.getId());
|
||||
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json)->{
|
||||
if (event != null) {
|
||||
event.response(mediaServerItemInUse, json);
|
||||
@@ -524,7 +524,7 @@ public class SIPCommander implements ISIPCommander {
|
||||
|
||||
CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
||||
: udpSipProvider.getNewCallId();
|
||||
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtmp", mediaServerItem.getId());
|
||||
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
|
||||
// 添加订阅
|
||||
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json)->{
|
||||
if (hookEvent != null) {
|
||||
|
||||
@@ -16,9 +16,7 @@ import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.*;
|
||||
import com.genersoft.iot.vmp.service.IMediaServerService;
|
||||
import com.genersoft.iot.vmp.service.IPlayService;
|
||||
import com.genersoft.iot.vmp.service.IStreamProxyService;
|
||||
@@ -90,6 +88,9 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
@Autowired
|
||||
private IMediaServerService mediaServerService;
|
||||
|
||||
@Autowired
|
||||
private ZlmHttpHookSubscribe zlmHttpHookSubscribe;
|
||||
|
||||
@Autowired
|
||||
private SIPProcessorObserver sipProcessorObserver;
|
||||
|
||||
@@ -400,7 +401,14 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
if (playTransaction != null) {
|
||||
Boolean streamReady = zlmrtpServerFactory.isStreamReady(mediaServerItem, "rtp", playTransaction.getStream());
|
||||
if (!streamReady) {
|
||||
playTransaction = null;
|
||||
boolean hasRtpServer = mediaServerService.checkRtpServer(mediaServerItem, "rtp", playTransaction.getStream());
|
||||
if (hasRtpServer) {
|
||||
logger.info("[上级点播]已经开启rtpServer但是尚未收到流,开启监听流的到来");
|
||||
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", playTransaction.getStream(), true, "rtsp", mediaServerItem.getId());
|
||||
zlmHttpHookSubscribe.addSubscribe(hookSubscribe, hookEvent);
|
||||
}else {
|
||||
playTransaction = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (playTransaction == null) {
|
||||
@@ -564,7 +572,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
} else if ("push".equals(gbStream.getStreamType())) {
|
||||
if (!platform.isStartOfflinePush()) {
|
||||
// 平台设置中关闭了拉起离线的推流则直接回复
|
||||
responseAck(evt, Response.TEMPORARILY_UNAVAILABLE, "channel unavailable");
|
||||
responseAck(evt, Response.TEMPORARILY_UNAVAILABLE, "channel stream not pushing");
|
||||
return;
|
||||
}
|
||||
// 发送redis消息以使设备上线
|
||||
|
||||
@@ -203,6 +203,12 @@ public class XmlUtil {
|
||||
return null;
|
||||
}
|
||||
deviceChannel.setChannelId(channelId);
|
||||
int channelTypeCode = Integer.parseInt(channelId.substring(10, 13));
|
||||
if (channelTypeCode == 136 || channelTypeCode == 137 || channelTypeCode == 138) {
|
||||
deviceChannel.setHasAudio(true);
|
||||
}else {
|
||||
deviceChannel.setHasAudio(false);
|
||||
}
|
||||
if (event != null && !event.equals(CatalogEvent.ADD) && !event.equals(CatalogEvent.UPDATE)) {
|
||||
// 除了ADD和update情况下需要识别全部内容,
|
||||
return deviceChannel;
|
||||
@@ -396,7 +402,6 @@ public class XmlUtil {
|
||||
} else {
|
||||
deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType")));
|
||||
}
|
||||
deviceChannel.setHasAudio(true); // 默认含有音频,播放时再检查是否有音频及是否AAC
|
||||
return deviceChannel;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user