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 117 }
118 118  
119 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 133 return;
123 134 }
124 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 164 Request request = null;
165 165 //请求行
166 166 SipURI requestLine = SipFactory.getInstance().createAddressFactory().createSipURI(channelId, device.getHostAddress());
  167 +// SipURI requestLine = SipFactory.getInstance().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
167 168 // via
168 169 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
169 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 175 FromHeader fromHeader = SipFactory.getInstance().createHeaderFactory().createFromHeader(fromAddress, transactionInfo.getFromTag());
175 176 //to
176 177 SipURI toSipURI = SipFactory.getInstance().createAddressFactory().createSipURI(channelId,device.getHostAddress());
  178 +// SipURI toSipURI = SipFactory.getInstance().createAddressFactory().createSipURI(device.getDeviceId(),device.getHostAddress());
177 179 Address toAddress = SipFactory.getInstance().createAddressFactory().createAddress(toSipURI);
178 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 618 }
619 619  
620 620 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
  621 +
621 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 625 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo());
625 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 178 if (mediaServerItem != null) {
179 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 271 if (!mediaInfo.isRtpEnable() && inviteInfo == null) {
272 272 String ssrc = String.format("%010d", Long.parseLong(param.getStream(), 16));
273 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 217 for (SsrcTransaction ssrcTransaction : ssrcTransactions) {
218 218 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
219 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 197 @Override
198 198 public void closeRTPServer(String mediaServerId, String streamId) {
199 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 206 @Override
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -636,6 +636,7 @@ public class PlayServiceImpl implements IPlayService {
636 636  
637 637  
638 638  
  639 +
639 640 @Override
640 641 public void download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, ErrorCallback<Object> callback) {
641 642 Device device = storager.queryVideoDevice(deviceId);
... ...