添加对海康平台录像回放的兼容,修复录像信息发送失败, 级联平台支持开启rtcp保活
This commit is contained in:
@@ -113,7 +113,6 @@ public class ParentPlatform {
|
||||
|
||||
/**
|
||||
* RTCP流保活
|
||||
* TODO 预留, 暂不实现
|
||||
*/
|
||||
@Schema(description = "RTCP流保活")
|
||||
private boolean rtcp;
|
||||
|
||||
@@ -103,7 +103,7 @@ public interface ISIPCommander {
|
||||
* @param startTime 开始时间,格式要求:yyyy-MM-dd HH:mm:ss
|
||||
* @param endTime 结束时间,格式要求:yyyy-MM-dd HH:mm:ss
|
||||
*/
|
||||
void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInf, Device device, String channelId, String startTime, String endTime,InviteStreamCallback inviteStreamCallback, InviteStreamCallback event, SipSubscribe.Event errorEvent);
|
||||
void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInf, Device device, String channelId, String startTime, String endTime,InviteStreamCallback inviteStreamCallback, InviteStreamCallback event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent);
|
||||
|
||||
/**
|
||||
* 请求历史媒体下载
|
||||
|
||||
@@ -456,7 +456,7 @@ public class SIPCommander implements ISIPCommander {
|
||||
@Override
|
||||
public void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
|
||||
String startTime, String endTime, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
|
||||
SipSubscribe.Event errorEvent) {
|
||||
SipSubscribe.Event okEvent,SipSubscribe.Event errorEvent) {
|
||||
try {
|
||||
|
||||
logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
||||
@@ -535,10 +535,11 @@ public class SIPCommander implements ISIPCommander {
|
||||
});
|
||||
Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
|
||||
|
||||
transmitRequest(device, request, errorEvent, okEvent -> {
|
||||
ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
|
||||
transmitRequest(device, request, errorEvent, event -> {
|
||||
ResponseEvent responseEvent = (ResponseEvent) event.event;
|
||||
streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), responseEvent.getClientTransaction(), VideoStreamSessionManager.SessionType.playback);
|
||||
streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), okEvent.dialog);
|
||||
streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), event.dialog);
|
||||
okEvent.response(event);
|
||||
});
|
||||
if (inviteStreamCallback != null) {
|
||||
inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
|
||||
|
||||
@@ -115,6 +115,11 @@ public class AckRequestProcessor extends SIPRequestProcessorParent implements In
|
||||
param.put("pt", sendRtpItem.getPt());
|
||||
param.put("use_ps", sendRtpItem.isUsePs() ? "1" : "0");
|
||||
param.put("only_audio", sendRtpItem.isOnlyAudio() ? "1" : "0");
|
||||
if (!sendRtpItem.isTcp() && parentPlatform.isRtcp()) {
|
||||
// 开启rtcp保活
|
||||
param.put("udp_rtcp_timeout", "1");
|
||||
}
|
||||
|
||||
if (mediaInfo == null) {
|
||||
RequestPushStreamMsg requestPushStreamMsg = RequestPushStreamMsg.getInstance(
|
||||
sendRtpItem.getMediaServerId(), sendRtpItem.getApp(), sendRtpItem.getStreamId(),
|
||||
|
||||
@@ -98,8 +98,8 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
|
||||
param.put("ssrc",sendRtpItem.getSsrc());
|
||||
logger.info("收到bye:停止向上级推流:" + streamId);
|
||||
MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
|
||||
zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
|
||||
redisCatchStorage.deleteSendRTPServer(platformGbId, channelId, callIdHeader.getCallId(), null);
|
||||
zlmrtpServerFactory.stopSendRtpStream(mediaInfo, param);
|
||||
int totalReaderCount = zlmrtpServerFactory.totalReaderCount(mediaInfo, sendRtpItem.getApp(), streamId);
|
||||
if (totalReaderCount <= 0) {
|
||||
logger.info("收到bye: {} 无其它观看者,通知设备停止推流", streamId);
|
||||
|
||||
@@ -563,6 +563,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
responseAck(evt, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
|
||||
} else if ("push".equals(gbStream.getStreamType())) {
|
||||
if (!platform.isStartOfflinePush()) {
|
||||
// 平台设置中关闭了拉起离线的推流则直接回复
|
||||
responseAck(evt, Response.TEMPORARILY_UNAVAILABLE, "channel unavailable");
|
||||
return;
|
||||
}
|
||||
@@ -599,7 +600,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
app, stream, channelId, mediaTransmissionTCP);
|
||||
|
||||
if (sendRtpItem == null) {
|
||||
logger.warn("服务器端口资源不足");
|
||||
logger.warn("上级点时创建sendRTPItem失败,可能是服务器端口资源不足");
|
||||
try {
|
||||
responseAck(evt, Response.BUSY_HERE);
|
||||
} catch (SipException e) {
|
||||
|
||||
Reference in New Issue
Block a user