src/main/java/com/genersoft/iot/vmp/gb28181/session/AudioBroadcastManager.java
@@ -83,4 +83,19 @@ return audioBroadcastCatch; } public List<AudioBroadcastCatch> get(String deviceId) { List<AudioBroadcastCatch> audioBroadcastCatchList= new ArrayList<>(); if (SipUtils.isFrontEnd(deviceId)) { audioBroadcastCatchList.add(data.get(deviceId)); }else { for (String key : data.keySet()) { if (key.startsWith(deviceId)) { audioBroadcastCatchList.add(data.get(key)); } } } return audioBroadcastCatchList; } } src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -3,12 +3,15 @@ import com.genersoft.iot.vmp.conf.DynamicTask; import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.session.AudioBroadcastManager; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask; import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask; import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.service.IDeviceChannelService; import com.genersoft.iot.vmp.service.IDeviceService; import com.genersoft.iot.vmp.service.IMediaServerService; @@ -32,9 +35,7 @@ import javax.sip.SipException; import java.text.ParseException; import java.time.Instant; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -88,6 +89,12 @@ @Autowired private IMediaServerService mediaServerService; @Autowired private AudioBroadcastManager audioBroadcastManager; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; @Override public void online(Device device) { @@ -183,6 +190,23 @@ // 移除订阅 removeCatalogSubscribe(device); removeMobilePositionSubscribe(device); List<AudioBroadcastCatch> audioBroadcastCatches = audioBroadcastManager.get(deviceId); if (audioBroadcastCatches.size() > 0) { for (AudioBroadcastCatch audioBroadcastCatch : audioBroadcastCatches) { SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null); if (sendRtpItem != null) { redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null); MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); Map<String, Object> param = new HashMap<>(); param.put("vhost", "__defaultVhost__"); param.put("app", sendRtpItem.getApp()); param.put("stream", sendRtpItem.getStreamId()); zlmresTfulUtils.stopSendRtp(mediaInfo, param); } audioBroadcastManager.del(deviceId, audioBroadcastCatch.getChannelId()); } } } @Override src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -58,10 +58,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.text.ParseException; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.*; @SuppressWarnings(value = {"rawtypes", "unchecked"}) @Service @@ -1067,25 +1064,31 @@ @Override public void stopAudioBroadcast(String deviceId, String channelId) { AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(deviceId, channelId); if (audioBroadcastCatch != null) { List<AudioBroadcastCatch> audioBroadcastCatchList = new ArrayList<>(); if (channelId == null) { audioBroadcastCatchList.addAll(audioBroadcastManager.get(deviceId)); }else { audioBroadcastCatchList.add(audioBroadcastManager.get(deviceId, channelId)); } if (audioBroadcastCatchList.size() > 0) { for (AudioBroadcastCatch audioBroadcastCatch : audioBroadcastCatchList) { Device device = deviceService.getDevice(deviceId); if (device == null || audioBroadcastCatch == null ) { return; } SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null); if (sendRtpItem != null) { redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null); MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); Map<String, Object> param = new HashMap<>(); param.put("vhost", "__defaultVhost__"); param.put("app", sendRtpItem.getApp()); param.put("stream", sendRtpItem.getStreamId()); zlmresTfulUtils.stopSendRtp(mediaInfo, param); } Device device = deviceService.getDevice(deviceId); if (device == null) { return; audioBroadcastManager.del(deviceId, channelId); } SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(deviceId, audioBroadcastCatch.getChannelId(), null, null); if (sendRtpItem != null) { redisCatchStorage.deleteSendRTPServer(deviceId, sendRtpItem.getChannelId(), null, null); MediaServerItem mediaInfo = mediaServerService.getOne(sendRtpItem.getMediaServerId()); Map<String, Object> param = new HashMap<>(); param.put("vhost", "__defaultVhost__"); param.put("app", sendRtpItem.getApp()); param.put("stream", sendRtpItem.getStreamId()); zlmresTfulUtils.stopSendRtp(mediaInfo, param); } audioBroadcastManager.del(deviceId, channelId); } }