优化子码流切换逻辑,去除主子多开逻辑。优化单端口模式ssrc变化导致的无法移出点播缓存 #895
This commit is contained in:
@@ -156,29 +156,5 @@ public class DeferredResultHolder {
|
||||
}
|
||||
}
|
||||
|
||||
/*============================设备主子码流逻辑START========================*/
|
||||
public static String getPlayKey(String deviceId,String channelId,boolean deviceSwitchSubStream,boolean isSubStream){
|
||||
String key = null;
|
||||
if(deviceSwitchSubStream){
|
||||
key = CALLBACK_CMD_PLAY + isSubStream + deviceId + channelId;
|
||||
}else {
|
||||
key = CALLBACK_CMD_PLAY +deviceId + channelId;
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
public static String getSnapKey(String deviceId,String channelId,boolean deviceSwitchSubStream,boolean isSubStream){
|
||||
String key = null;
|
||||
if(deviceSwitchSubStream){
|
||||
key = CALLBACK_CMD_SNAP + isSubStream + deviceId + channelId;
|
||||
}else {
|
||||
key = CALLBACK_CMD_SNAP +deviceId + channelId;
|
||||
}
|
||||
return key;
|
||||
}
|
||||
|
||||
|
||||
/*============================设备主子码流逻辑END========================*/
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -98,7 +98,7 @@ public interface ISIPCommander {
|
||||
* @param device 视频设备
|
||||
* @param channelId 预览通道
|
||||
*/
|
||||
void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,boolean isSubStream, ZlmHttpHookSubscribe.Event event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
|
||||
void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, ZlmHttpHookSubscribe.Event event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException;
|
||||
|
||||
/**
|
||||
* 请求回放视频流
|
||||
|
||||
@@ -268,7 +268,7 @@ public class SIPCommander implements ISIPCommander {
|
||||
* @param errorEvent sip错误订阅
|
||||
*/
|
||||
@Override
|
||||
public void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,boolean isSubStream,
|
||||
public void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
|
||||
ZlmHttpHookSubscribe.Event event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
||||
String stream = ssrcInfo.getStream();
|
||||
|
||||
@@ -345,13 +345,13 @@ public class SIPCommander implements ISIPCommander {
|
||||
|
||||
if( device.isSwitchPrimarySubStream() ){
|
||||
if("TP-LINK".equals(device.getManufacturer())){
|
||||
if (isSubStream){
|
||||
if (device.isSwitchPrimarySubStream()){
|
||||
content.append("a=streamMode:sub\r\n");
|
||||
}else {
|
||||
content.append("a=streamMode:main\r\n");
|
||||
}
|
||||
}else {
|
||||
if (isSubStream){
|
||||
if (device.isSwitchPrimarySubStream()){
|
||||
content.append("a=streamprofile:1\r\n");
|
||||
}else {
|
||||
content.append("a=streamprofile:0\r\n");
|
||||
@@ -374,11 +374,8 @@ public class SIPCommander implements ISIPCommander {
|
||||
// 这里为例避免一个通道的点播只有一个callID这个参数使用一个固定值
|
||||
ResponseEvent responseEvent = (ResponseEvent) e.event;
|
||||
SIPResponse response = (SIPResponse) responseEvent.getResponse();
|
||||
if(device.isSwitchPrimarySubStream()){
|
||||
streamSession.put(device.getDeviceId(), channelId, "switch-play", stream, ssrcInfo.getSsrc(), mediaServerItem.getId(), response, InviteSessionType.PLAY);
|
||||
}else {
|
||||
streamSession.put(device.getDeviceId(), channelId, "play", stream, ssrcInfo.getSsrc(), mediaServerItem.getId(), response, InviteSessionType.PLAY);
|
||||
}
|
||||
streamSession.put(device.getDeviceId(), channelId, "play", stream, ssrcInfo.getSsrc(), mediaServerItem.getId(), response,
|
||||
InviteSessionType.PLAY);
|
||||
okEvent.response(e);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -142,13 +142,8 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
|
||||
// 可能是设备主动停止
|
||||
Device device = storager.queryVideoDeviceByChannelId(platformGbId);
|
||||
if (device != null) {
|
||||
SsrcTransaction ssrcTransactionForPlay = null;
|
||||
if (device.isSwitchPrimarySubStream() ) {
|
||||
ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "switch-play", null);
|
||||
} else {
|
||||
storager.stopPlay(device.getDeviceId(), channelId);
|
||||
ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
|
||||
}
|
||||
storager.stopPlay(device.getDeviceId(), channelId);
|
||||
SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
|
||||
if (ssrcTransactionForPlay != null){
|
||||
if (ssrcTransactionForPlay.getCallId().equals(callIdHeader.getCallId())){
|
||||
// 释放ssrc
|
||||
@@ -158,16 +153,8 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
|
||||
}
|
||||
streamSession.remove(device.getDeviceId(), channelId, ssrcTransactionForPlay.getStream());
|
||||
}
|
||||
InviteInfo inviteInfo = null;
|
||||
if (device.isSwitchPrimarySubStream() ) {
|
||||
String streamType = ssrcTransactionForPlay.getStream().split("_")[0];
|
||||
boolean isSubStream = "sub".equals(streamType);
|
||||
inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channelId,isSubStream);
|
||||
inviteStreamService.removeInviteInfo(inviteInfo.getType(),inviteInfo.getDeviceId(),inviteInfo.getChannelId(),isSubStream,inviteInfo.getStream());
|
||||
}else {
|
||||
inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channelId);
|
||||
inviteStreamService.removeInviteInfo(inviteInfo);
|
||||
}
|
||||
InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, device.getDeviceId(), channelId);
|
||||
inviteStreamService.removeInviteInfo(inviteInfo);
|
||||
if (inviteInfo != null) {
|
||||
if (inviteInfo.getStreamInfo() != null) {
|
||||
mediaServerService.closeRTPServer(inviteInfo.getStreamInfo().getMediaServerId(), inviteInfo.getStream());
|
||||
|
||||
@@ -490,7 +490,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
}
|
||||
sendRtpItem.setStreamId(streamId);
|
||||
redisCatchStorage.updateSendRTPSever(sendRtpItem);
|
||||
playService.play(mediaServerItem, device.getDeviceId(), channelId,false, ((code, msg, data) -> {
|
||||
playService.play(mediaServerItem, device.getDeviceId(), channelId, ((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()){
|
||||
|
||||
@@ -252,7 +252,6 @@ public class NotifyRequestForCatalogProcessor extends SIPRequestProcessorParent
|
||||
}
|
||||
|
||||
private void executeSave(){
|
||||
System.out.println("定时存储数据");
|
||||
executeSaveForUpdate();
|
||||
executeSaveForDelete();
|
||||
executeSaveForOnline();
|
||||
|
||||
@@ -250,7 +250,6 @@ public class SipUtils {
|
||||
if (ObjectUtils.isEmpty(timeStr)){
|
||||
return null;
|
||||
}
|
||||
System.out.println(timeStr);
|
||||
LocalDateTime localDateTime;
|
||||
try {
|
||||
localDateTime = LocalDateTime.parse(timeStr);
|
||||
|
||||
Reference in New Issue
Block a user