Commit 04a1bfa329a6de22f4f0983d86a50e291f6d80bf

Authored by 648540858
1 parent b699158e

优化事务释放逻辑

src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
@@ -117,8 +117,19 @@ public class VideoStreamSessionManager { @@ -117,8 +117,19 @@ public class VideoStreamSessionManager {
117 } 117 }
118 118
119 public void remove(String deviceId, String channelId, String stream) { 119 public void remove(String deviceId, String channelId, String stream) {
120 - SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, null, stream);  
121 - if (ssrcTransaction == null) { 120 + List<SsrcTransaction> ssrcTransactionList = getSsrcTransactionForAll(deviceId, channelId, null, stream);
  121 + if (ssrcTransactionList == null || ssrcTransactionList.isEmpty()) {
  122 + return;
  123 + }
  124 + for (SsrcTransaction ssrcTransaction : ssrcTransactionList) {
  125 + redisTemplate.delete(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_"
  126 + + deviceId + "_" + channelId + "_" + ssrcTransaction.getCallId() + "_" + ssrcTransaction.getStream());
  127 + }
  128 + }
  129 +
  130 + public void removeByCallId(String deviceId, String channelId, String callId) {
  131 + SsrcTransaction ssrcTransaction = getSsrcTransaction(deviceId, channelId, callId, null);
  132 + if (ssrcTransaction == null ) {
122 return; 133 return;
123 } 134 }
124 redisTemplate.delete(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_" 135 redisTemplate.delete(VideoManagerConstants.MEDIA_TRANSACTION_USED_PREFIX + userSetting.getServerId() + "_"
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -164,6 +164,7 @@ public class SIPRequestHeaderProvider { @@ -164,6 +164,7 @@ public class SIPRequestHeaderProvider {
164 Request request = null; 164 Request request = null;
165 //请求行 165 //请求行
166 SipURI requestLine = SipFactory.getInstance().createAddressFactory().createSipURI(channelId, device.getHostAddress()); 166 SipURI requestLine = SipFactory.getInstance().createAddressFactory().createSipURI(channelId, device.getHostAddress());
  167 +// SipURI requestLine = SipFactory.getInstance().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
167 // via 168 // via
168 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 169 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
169 ViaHeader viaHeader = SipFactory.getInstance().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag()); 170 ViaHeader viaHeader = SipFactory.getInstance().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
@@ -174,6 +175,7 @@ public class SIPRequestHeaderProvider { @@ -174,6 +175,7 @@ public class SIPRequestHeaderProvider {
174 FromHeader fromHeader = SipFactory.getInstance().createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag()); 175 FromHeader fromHeader = SipFactory.getInstance().createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag());
175 //to 176 //to
176 SipURI toSipURI = SipFactory.getInstance().createAddressFactory().createSipURI(channelId,device.getHostAddress()); 177 SipURI toSipURI = SipFactory.getInstance().createAddressFactory().createSipURI(channelId,device.getHostAddress());
  178 +// SipURI toSipURI = SipFactory.getInstance().createAddressFactory().createSipURI(device.getDeviceId(),device.getHostAddress());
177 Address toAddress = SipFactory.getInstance().createAddressFactory().createAddress(toSipURI); 179 Address toAddress = SipFactory.getInstance().createAddressFactory().createAddress(toSipURI);
178 ToHeader toHeader = SipFactory.getInstance().createHeaderFactory().createToHeader(toAddress, transactionInfo.getToTag()); 180 ToHeader toHeader = SipFactory.getInstance().createHeaderFactory().createToHeader(toAddress, transactionInfo.getToTag());
179 181
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -618,8 +618,9 @@ public class SIPCommander implements ISIPCommander { @@ -618,8 +618,9 @@ public class SIPCommander implements ISIPCommander {
618 } 618 }
619 619
620 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc()); 620 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
  621 +
621 mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream()); 622 mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream());
622 - streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 623 + streamSession.removeByCallId(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getCallId());
623 624
624 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo()); 625 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo());
625 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), byteRequest, null, okEvent); 626 sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), byteRequest, null, okEvent);
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
@@ -178,7 +178,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In @@ -178,7 +178,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
178 if (mediaServerItem != null) { 178 if (mediaServerItem != null) {
179 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc()); 179 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
180 } 180 }
181 - streamSession.remove(device.getDeviceId(), channel.getChannelId(), ssrcTransaction.getStream()); 181 + streamSession.removeByCallId(device.getDeviceId(), channel.getChannelId(), ssrcTransaction.getCallId());
182 } 182 }
183 } 183 }
184 } 184 }
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -271,8 +271,10 @@ public class ZLMHttpHookListener { @@ -271,8 +271,10 @@ public class ZLMHttpHookListener {
271 if (!mediaInfo.isRtpEnable() && inviteInfo == null) { 271 if (!mediaInfo.isRtpEnable() && inviteInfo == null) {
272 String ssrc = String.format("%010d", Long.parseLong(param.getStream(), 16)); 272 String ssrc = String.format("%010d", Long.parseLong(param.getStream(), 16));
273 inviteInfo = inviteStreamService.getInviteInfoBySSRC(ssrc); 273 inviteInfo = inviteStreamService.getInviteInfoBySSRC(ssrc);
274 - result.setStream_replace(inviteInfo.getStream());  
275 - logger.info("[ZLM HOOK]推流鉴权 stream: {} 替换为 {}", param.getStream(), inviteInfo.getStream()); 274 + if (inviteInfo != null) {
  275 + result.setStream_replace(inviteInfo.getStream());
  276 + logger.info("[ZLM HOOK]推流鉴权 stream: {} 替换为 {}", param.getStream(), inviteInfo.getStream());
  277 + }
276 } 278 }
277 279
278 // 设置音频信息及录制信息 280 // 设置音频信息及录制信息
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -217,7 +217,7 @@ public class DeviceServiceImpl implements IDeviceService { @@ -217,7 +217,7 @@ public class DeviceServiceImpl implements IDeviceService {
217 for (SsrcTransaction ssrcTransaction : ssrcTransactions) { 217 for (SsrcTransaction ssrcTransaction : ssrcTransactions) {
218 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc()); 218 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
219 mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream()); 219 mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream());
220 - streamSession.remove(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 220 + streamSession.removeByCallId(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getCallId());
221 } 221 }
222 } 222 }
223 // 移除订阅 223 // 移除订阅
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -197,7 +197,10 @@ public class MediaServerServiceImpl implements IMediaServerService { @@ -197,7 +197,10 @@ public class MediaServerServiceImpl implements IMediaServerService {
197 @Override 197 @Override
198 public void closeRTPServer(String mediaServerId, String streamId) { 198 public void closeRTPServer(String mediaServerId, String streamId) {
199 MediaServerItem mediaServerItem = this.getOne(mediaServerId); 199 MediaServerItem mediaServerItem = this.getOne(mediaServerId);
200 - closeRTPServer(mediaServerItem, streamId); 200 + if (mediaServerItem.isRtpEnable()) {
  201 + closeRTPServer(mediaServerItem, streamId);
  202 + }
  203 + zlmresTfulUtils.closeStreams(mediaServerItem, "rtp", streamId);
201 } 204 }
202 205
203 @Override 206 @Override
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -636,6 +636,7 @@ public class PlayServiceImpl implements IPlayService { @@ -636,6 +636,7 @@ public class PlayServiceImpl implements IPlayService {
636 636
637 637
638 638
  639 +
639 @Override 640 @Override
640 public void download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, ErrorCallback<Object> callback) { 641 public void download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, ErrorCallback<Object> callback) {
641 Device device = storager.queryVideoDevice(deviceId); 642 Device device = storager.queryVideoDevice(deviceId);