Commit 16f3b0553d5ea1dd891b56b93e3e13da950cf4dd

Authored by 648540858
1 parent 49e937c3

设备离线清空语音对讲通道

src/main/java/com/genersoft/iot/vmp/gb28181/session/AudioBroadcastManager.java
... ... @@ -83,4 +83,19 @@ public class AudioBroadcastManager {
83 83  
84 84 return audioBroadcastCatch;
85 85 }
  86 +
  87 + public List<AudioBroadcastCatch> get(String deviceId) {
  88 + List<AudioBroadcastCatch> audioBroadcastCatchList= new ArrayList<>();
  89 + if (SipUtils.isFrontEnd(deviceId)) {
  90 + audioBroadcastCatchList.add(data.get(deviceId));
  91 + }else {
  92 + for (String key : data.keySet()) {
  93 + if (key.startsWith(deviceId)) {
  94 + audioBroadcastCatchList.add(data.get(key));
  95 + }
  96 + }
  97 + }
  98 +
  99 + return audioBroadcastCatchList;
  100 + }
86 101 }
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
... ... @@ -3,12 +3,15 @@ package com.genersoft.iot.vmp.service.impl;
3 3 import com.genersoft.iot.vmp.conf.DynamicTask;
4 4 import com.genersoft.iot.vmp.conf.UserSetting;
5 5 import com.genersoft.iot.vmp.gb28181.bean.*;
  6 +import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager;
6 7 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
7 8 import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask;
8 9 import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask;
9 10 import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask;
10 11 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
11 12 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler;
  13 +import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
  14 +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
12 15 import com.genersoft.iot.vmp.service.IDeviceChannelService;
13 16 import com.genersoft.iot.vmp.service.IDeviceService;
14 17 import com.genersoft.iot.vmp.service.IMediaServerService;
... ... @@ -32,9 +35,7 @@ import javax.sip.InvalidArgumentException;
32 35 import javax.sip.SipException;
33 36 import java.text.ParseException;
34 37 import java.time.Instant;
35   -import java.util.ArrayList;
36   -import java.util.Collections;
37   -import java.util.List;
  38 +import java.util.*;
38 39 import java.util.concurrent.TimeUnit;
39 40  
40 41 /**
... ... @@ -89,6 +90,12 @@ public class DeviceServiceImpl implements IDeviceService {
89 90 @Autowired
90 91 private IMediaServerService mediaServerService;
91 92  
  93 + @Autowired
  94 + private AudioBroadcastManager audioBroadcastManager;
  95 +
  96 + @Autowired
  97 + private ZLMRESTfulUtils zlmresTfulUtils;
  98 +
92 99 @Override
93 100 public void online(Device device) {
94 101 logger.info("[设备上线] deviceId:{}->{}:{}", device.getDeviceId(), device.getIp(), device.getPort());
... ... @@ -183,6 +190,23 @@ public class DeviceServiceImpl implements IDeviceService {
183 190 // 移除订阅
184 191 removeCatalogSubscribe(device);
185 192 removeMobilePositionSubscribe(device);
  193 + List<AudioBroadcastCatch> audioBroadcastCatches = audioBroadcastManager.get(deviceId);
  194 + if (audioBroadcastCatches.size() > 0) {
  195 + for (AudioBroadcastCatch audioBroadcastCatch : audioBroadcastCatches) {
  196 + SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null);
  197 + if (sendRtpItem != null) {
  198 + redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null);
  199 + MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
  200 + Map<String, Object> param = new HashMap<>();
  201 + param.put("vhost", "__defaultVhost__");
  202 + param.put("app", sendRtpItem.getApp());
  203 + param.put("stream", sendRtpItem.getStreamId());
  204 + zlmresTfulUtils.stopSendRtp(mediaInfo, param);
  205 + }
  206 +
  207 + audioBroadcastManager.del(deviceId, audioBroadcastCatch.getChannelId());
  208 + }
  209 + }
186 210 }
187 211  
188 212 @Override
... ...
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
... ... @@ -58,10 +58,7 @@ import javax.sip.header.CallIdHeader;
58 58 import java.math.BigDecimal;
59 59 import java.math.RoundingMode;
60 60 import java.text.ParseException;
61   -import java.util.HashMap;
62   -import java.util.List;
63   -import java.util.Map;
64   -import java.util.UUID;
  61 +import java.util.*;
65 62  
66 63 @SuppressWarnings(value = {"rawtypes", "unchecked"})
67 64 @Service
... ... @@ -1067,25 +1064,31 @@ public class PlayServiceImpl implements IPlayService {
1067 1064  
1068 1065 @Override
1069 1066 public void stopAudioBroadcast(String deviceId, String channelId) {
1070   - AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(deviceId, channelId);
1071   - if (audioBroadcastCatch != null) {
  1067 + List<AudioBroadcastCatch> audioBroadcastCatchList = new ArrayList<>();
  1068 + if (channelId == null) {
  1069 + audioBroadcastCatchList.addAll(audioBroadcastManager.get(deviceId));
  1070 + }else {
  1071 + audioBroadcastCatchList.add(audioBroadcastManager.get(deviceId, channelId));
  1072 + }
  1073 + if (audioBroadcastCatchList.size() > 0) {
  1074 + for (AudioBroadcastCatch audioBroadcastCatch : audioBroadcastCatchList) {
  1075 + Device device = deviceService.getDevice(deviceId);
  1076 + if (device == null || audioBroadcastCatch == null ) {
  1077 + return;
  1078 + }
  1079 + SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null);
  1080 + if (sendRtpItem != null) {
  1081 + redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null);
  1082 + MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
  1083 + Map<String, Object> param = new HashMap<>();
  1084 + param.put("vhost", "__defaultVhost__");
  1085 + param.put("app", sendRtpItem.getApp());
  1086 + param.put("stream", sendRtpItem.getStreamId());
  1087 + zlmresTfulUtils.stopSendRtp(mediaInfo, param);
  1088 + }
1072 1089  
1073   - Device device = deviceService.getDevice(deviceId);
1074   - if (device == null) {
1075   - return;
1076   - }
1077   - SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null);
1078   - if (sendRtpItem != null) {
1079   - redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null);
1080   - MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId());
1081   - Map<String, Object> param = new HashMap<>();
1082   - param.put("vhost", "__defaultVhost__");
1083   - param.put("app", sendRtpItem.getApp());
1084   - param.put("stream", sendRtpItem.getStreamId());
1085   - zlmresTfulUtils.stopSendRtp(mediaInfo, param);
  1090 + audioBroadcastManager.del(deviceId, channelId);
1086 1091 }
1087   -
1088   - audioBroadcastManager.del(deviceId, channelId);
1089 1092 }
1090 1093 }
1091 1094  
... ...