Commit 04a1bfa329a6de22f4f0983d86a50e291f6d80bf
1 parent
b699158e
优化事务释放逻辑
Showing
8 changed files
with
28 additions
and
8 deletions
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); |