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 | 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); | ... | ... |