diff --git a/README.md b/README.md index 7129fea1..256efc01 100644 --- a/README.md +++ b/README.md @@ -36,4 +36,5 @@ web界面系统设置 QQ群: 901799015 # 致谢 -感谢作者[夏楚](https://github.com/xiongziliang) 提供这么棒的开源流媒体服务框架 \ No newline at end of file +感谢作者[夏楚](https://github.com/xiongziliang) 提供这么棒的开源流媒体服务框架 + diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java index 3eeebef2..e991a293 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java @@ -38,21 +38,23 @@ public class OfflineEventListener implements ApplicationListener { String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDeviceId(); switch (event.getFrom()) { - // 心跳超时触发的离线事件,说明redis中已删除,无需处理 - case VideoManagerConstants.EVENT_OUTLINE_TIMEOUT: - break; - // 设备主动注销触发的离线事件,需要删除redis中的超时监听 - case VideoManagerConstants.EVENT_OUTLINE_UNREGISTER: - redis.del(key); - break; - default: - boolean exist = redis.hasKey(key); - if (exist) { + // 心跳超时触发的离线事件,说明redis中已删除,无需处理 + case VideoManagerConstants.EVENT_OUTLINE_TIMEOUT: + break; + // 设备主动注销触发的离线事件,需要删除redis中的超时监听 + case VideoManagerConstants.EVENT_OUTLINE_UNREGISTER: redis.del(key); - } + break; + default: + boolean exist = redis.hasKey(key); + if (exist) { + redis.del(key); + } } // 处理离线监听 storager.outline(event.getDeviceId()); + + // } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index f901e5ed..44467ae0 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -181,15 +181,15 @@ public class SIPCommander implements ISIPCommander { try { String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed); StringBuffer ptzXml = new StringBuffer(200); - ptzXml.append(""); - ptzXml.append(""); - ptzXml.append("DeviceControl"); - ptzXml.append("" + (int)((Math.random()*9+1)*100000) + ""); - ptzXml.append("" + channelId + ""); - ptzXml.append("" + cmdStr + ""); - ptzXml.append(""); - ptzXml.append(""); - ptzXml.append(""); + ptzXml.append("\r\n"); + ptzXml.append("\r\n"); + ptzXml.append("DeviceControl\r\n"); + ptzXml.append("" + (int)((Math.random()*9+1)*100000) + "\r\n"); + ptzXml.append("" + channelId + "\r\n"); + ptzXml.append("" + cmdStr + "\r\n"); + ptzXml.append("\r\n"); + ptzXml.append("\r\n"); + ptzXml.append("\r\n"); Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", "ToPtzTag"); @@ -458,12 +458,12 @@ public class SIPCommander implements ISIPCommander { public boolean deviceInfoQuery(Device device) { try { StringBuffer catalogXml = new StringBuffer(200); - catalogXml.append(""); - catalogXml.append(""); - catalogXml.append("DeviceInfo"); - catalogXml.append("" + (int)((Math.random()*9+1)*100000) + ""); - catalogXml.append("" + device.getDeviceId() + ""); - catalogXml.append(""); + catalogXml.append("\r\n"); + catalogXml.append("\r\n"); + catalogXml.append("DeviceInfo\r\n"); + catalogXml.append("" + (int)((Math.random()*9+1)*100000) + "\r\n"); + catalogXml.append("" + device.getDeviceId() + "\r\n"); + catalogXml.append("\r\n"); Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", "ToDeviceInfoTag"); transmitRequest(device, request); @@ -486,12 +486,12 @@ public class SIPCommander implements ISIPCommander { storager.cleanChannelsForDevice(device.getDeviceId()); try { StringBuffer catalogXml = new StringBuffer(200); - catalogXml.append(""); - catalogXml.append(""); - catalogXml.append("Catalog"); - catalogXml.append("" + (int)((Math.random()*9+1)*100000) + ""); - catalogXml.append("" + device.getDeviceId() + ""); - catalogXml.append(""); + catalogXml.append("\r\n"); + catalogXml.append("\r\n"); + catalogXml.append("Catalog\r\n"); + catalogXml.append("" + (int)((Math.random()*9+1)*100000) + "\r\n"); + catalogXml.append("" + device.getDeviceId() + "\r\n"); + catalogXml.append("\r\n"); Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", "ToCatalogTag"); transmitRequest(device, request); @@ -514,17 +514,17 @@ public class SIPCommander implements ISIPCommander { try { StringBuffer recordInfoXml = new StringBuffer(200); - recordInfoXml.append(""); - recordInfoXml.append(""); - recordInfoXml.append("RecordInfo"); - recordInfoXml.append("" + (int)((Math.random()*9+1)*100000) + ""); - recordInfoXml.append("" + channelId + ""); - recordInfoXml.append("" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + ""); - recordInfoXml.append("" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + ""); - recordInfoXml.append("0"); + recordInfoXml.append("\r\n"); + recordInfoXml.append("\r\n"); + recordInfoXml.append("RecordInfo\r\n"); + recordInfoXml.append("" + (int)((Math.random()*9+1)*100000) + "\r\n"); + recordInfoXml.append("" + channelId + "\r\n"); + recordInfoXml.append("" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "\r\n"); + recordInfoXml.append("" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "\r\n"); + recordInfoXml.append("0\\r\n"); // 大华NVR要求必须增加一个值为all的文本元素节点Type - recordInfoXml.append("all"); - recordInfoXml.append(""); + recordInfoXml.append("all\r\n"); + recordInfoXml.append("\r\n"); Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", "ToRecordInfoTag"); transmitRequest(device, request); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java index 7d7edf40..54212063 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java @@ -99,6 +99,7 @@ public class ZLMRunner implements CommandLineRunner { param.put("secret",mediaSecret); param.put("hook.enable","1"); param.put("hook.on_flow_report",""); + param.put("hook.on_play",""); param.put("hook.on_http_access",""); param.put("hook.on_publish",String.format("%s/on_publish", hookPrex)); param.put("hook.on_record_mp4",""); @@ -107,6 +108,7 @@ public class ZLMRunner implements CommandLineRunner { param.put("hook.on_rtsp_realm",""); param.put("hook.on_server_started",String.format("%s/on_server_started", hookPrex)); param.put("hook.on_shell_login",String.format("%s/on_shell_login", hookPrex)); + param.put("hook.on_stream_changed",String.format("%s/on_stream_changed", hookPrex)); param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex)); param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex)); param.put("hook.timeoutSec","20"); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java index 91b60a1f..0c58763a 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java @@ -93,7 +93,7 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { ":" + channel.getName() + "_" + (channel.getStatus() == 1 ? "on":"off") + "_" + (channelMap.get(channelId).size() > 0)+ - "_" + channel.getParentId(), + "_" + (StringUtils.isEmpty(channel.getParentId())?null:channel.getParentId()), channel); // 更新device中的通道数量 Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); @@ -113,7 +113,14 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { DeviceChannel deviceChannel = queryChannel(deviceId, parentId); if (deviceChannel != null) { deviceChannel.setSubCount(channelMap.get(parentId).size()); - redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + deviceChannel.getChannelId(), +// redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + deviceChannel.getChannelId(), +// deviceChannel); + redis.set(VideoManagerConstants.CACHEKEY_PREFIX + deviceId + + "_" + deviceChannel.getChannelId() + + ":" + deviceChannel.getName() + + "_" + (deviceChannel.getStatus() == 1 ? "on":"off") + + "_" + (channelMap.get(deviceChannel.getChannelId()).size() > 0)+ + "_" + (StringUtils.isEmpty(deviceChannel.getParentId())?null:deviceChannel.getParentId()), deviceChannel); } @@ -438,7 +445,8 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { if (subChannel == null) { subChannel = new HashSet<>(); } - if (!"null".equals(s[6])) { + System.out.println(key); + if (s.length == 7 && !"null".equals(s[6])) { subChannel.add(s[6]); } channelMap.put(channelId, subChannel);