Commit 002782569d323c8a9def230cd561ffb15b1f3f3a

Authored by 648540858
1 parent b55374c7

修改bug

README.md
@@ -36,4 +36,5 @@ web界面系统设置 @@ -36,4 +36,5 @@ web界面系统设置
36 QQ群: 901799015 36 QQ群: 901799015
37 37
38 # 致谢 38 # 致谢
39 -感谢作者[夏楚](https://github.com/xiongziliang) 提供这么棒的开源流媒体服务框架  
40 \ No newline at end of file 39 \ No newline at end of file
  40 +感谢作者[夏楚](https://github.com/xiongziliang) 提供这么棒的开源流媒体服务框架
  41 +
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
@@ -38,21 +38,23 @@ public class OfflineEventListener implements ApplicationListener<OfflineEvent> { @@ -38,21 +38,23 @@ public class OfflineEventListener implements ApplicationListener<OfflineEvent> {
38 String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDeviceId(); 38 String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + event.getDeviceId();
39 39
40 switch (event.getFrom()) { 40 switch (event.getFrom()) {
41 - // 心跳超时触发的离线事件,说明redis中已删除,无需处理  
42 - case VideoManagerConstants.EVENT_OUTLINE_TIMEOUT:  
43 - break;  
44 - // 设备主动注销触发的离线事件,需要删除redis中的超时监听  
45 - case VideoManagerConstants.EVENT_OUTLINE_UNREGISTER:  
46 - redis.del(key);  
47 - break;  
48 - default:  
49 - boolean exist = redis.hasKey(key);  
50 - if (exist) { 41 + // 心跳超时触发的离线事件,说明redis中已删除,无需处理
  42 + case VideoManagerConstants.EVENT_OUTLINE_TIMEOUT:
  43 + break;
  44 + // 设备主动注销触发的离线事件,需要删除redis中的超时监听
  45 + case VideoManagerConstants.EVENT_OUTLINE_UNREGISTER:
51 redis.del(key); 46 redis.del(key);
52 - } 47 + break;
  48 + default:
  49 + boolean exist = redis.hasKey(key);
  50 + if (exist) {
  51 + redis.del(key);
  52 + }
53 } 53 }
54 54
55 // 处理离线监听 55 // 处理离线监听
56 storager.outline(event.getDeviceId()); 56 storager.outline(event.getDeviceId());
  57 +
  58 + //
57 } 59 }
58 } 60 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -181,15 +181,15 @@ public class SIPCommander implements ISIPCommander { @@ -181,15 +181,15 @@ public class SIPCommander implements ISIPCommander {
181 try { 181 try {
182 String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed); 182 String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
183 StringBuffer ptzXml = new StringBuffer(200); 183 StringBuffer ptzXml = new StringBuffer(200);
184 - ptzXml.append("<?xml version=\"1.0\" ?>");  
185 - ptzXml.append("<Control>");  
186 - ptzXml.append("<CmdType>DeviceControl</CmdType>");  
187 - ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");  
188 - ptzXml.append("<DeviceID>" + channelId + "</DeviceID>");  
189 - ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>");  
190 - ptzXml.append("<Info>");  
191 - ptzXml.append("</Info>");  
192 - ptzXml.append("</Control>"); 184 + ptzXml.append("<?xml version=\"1.0\" ?>\r\n");
  185 + ptzXml.append("<Control>\r\n");
  186 + ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
  187 + ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
  188 + ptzXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
  189 + ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>\r\n");
  190 + ptzXml.append("<Info>\r\n");
  191 + ptzXml.append("</Info>\r\n");
  192 + ptzXml.append("</Control>\r\n");
193 193
194 Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", "ToPtzTag"); 194 Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", "ToPtzTag");
195 195
@@ -458,12 +458,12 @@ public class SIPCommander implements ISIPCommander { @@ -458,12 +458,12 @@ public class SIPCommander implements ISIPCommander {
458 public boolean deviceInfoQuery(Device device) { 458 public boolean deviceInfoQuery(Device device) {
459 try { 459 try {
460 StringBuffer catalogXml = new StringBuffer(200); 460 StringBuffer catalogXml = new StringBuffer(200);
461 - catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");  
462 - catalogXml.append("<Query>");  
463 - catalogXml.append("<CmdType>DeviceInfo</CmdType>");  
464 - catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");  
465 - catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>");  
466 - catalogXml.append("</Query>"); 461 + catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
  462 + catalogXml.append("<Query>\r\n");
  463 + catalogXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
  464 + catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
  465 + catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
  466 + catalogXml.append("</Query>\r\n");
467 467
468 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", "ToDeviceInfoTag"); 468 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", "ToDeviceInfoTag");
469 transmitRequest(device, request); 469 transmitRequest(device, request);
@@ -486,12 +486,12 @@ public class SIPCommander implements ISIPCommander { @@ -486,12 +486,12 @@ public class SIPCommander implements ISIPCommander {
486 storager.cleanChannelsForDevice(device.getDeviceId()); 486 storager.cleanChannelsForDevice(device.getDeviceId());
487 try { 487 try {
488 StringBuffer catalogXml = new StringBuffer(200); 488 StringBuffer catalogXml = new StringBuffer(200);
489 - catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");  
490 - catalogXml.append("<Query>");  
491 - catalogXml.append("<CmdType>Catalog</CmdType>");  
492 - catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");  
493 - catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>");  
494 - catalogXml.append("</Query>"); 489 + catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
  490 + catalogXml.append("<Query>\r\n");
  491 + catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
  492 + catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
  493 + catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
  494 + catalogXml.append("</Query>\r\n");
495 495
496 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", "ToCatalogTag"); 496 Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", "ToCatalogTag");
497 transmitRequest(device, request); 497 transmitRequest(device, request);
@@ -514,17 +514,17 @@ public class SIPCommander implements ISIPCommander { @@ -514,17 +514,17 @@ public class SIPCommander implements ISIPCommander {
514 514
515 try { 515 try {
516 StringBuffer recordInfoXml = new StringBuffer(200); 516 StringBuffer recordInfoXml = new StringBuffer(200);
517 - recordInfoXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");  
518 - recordInfoXml.append("<Query>");  
519 - recordInfoXml.append("<CmdType>RecordInfo</CmdType>");  
520 - recordInfoXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");  
521 - recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>");  
522 - recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>");  
523 - recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>");  
524 - recordInfoXml.append("<Secrecy>0</Secrecy>"); 517 + recordInfoXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
  518 + recordInfoXml.append("<Query>\r\n");
  519 + recordInfoXml.append("<CmdType>RecordInfo</CmdType>\r\n");
  520 + recordInfoXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
  521 + recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
  522 + recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>\r\n");
  523 + recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>\r\n");
  524 + recordInfoXml.append("<Secrecy>0</Secrecy>\\r\n");
525 // 大华NVR要求必须增加一个值为all的文本元素节点Type 525 // 大华NVR要求必须增加一个值为all的文本元素节点Type
526 - recordInfoXml.append("<Type>all</Type>");  
527 - recordInfoXml.append("</Query>"); 526 + recordInfoXml.append("<Type>all</Type>\r\n");
  527 + recordInfoXml.append("</Query>\r\n");
528 528
529 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", "ToRecordInfoTag"); 529 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", "ToRecordInfoTag");
530 transmitRequest(device, request); 530 transmitRequest(device, request);
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
@@ -99,6 +99,7 @@ public class ZLMRunner implements CommandLineRunner { @@ -99,6 +99,7 @@ public class ZLMRunner implements CommandLineRunner {
99 param.put("secret",mediaSecret); 99 param.put("secret",mediaSecret);
100 param.put("hook.enable","1"); 100 param.put("hook.enable","1");
101 param.put("hook.on_flow_report",""); 101 param.put("hook.on_flow_report","");
  102 + param.put("hook.on_play","");
102 param.put("hook.on_http_access",""); 103 param.put("hook.on_http_access","");
103 param.put("hook.on_publish",String.format("%s/on_publish", hookPrex)); 104 param.put("hook.on_publish",String.format("%s/on_publish", hookPrex));
104 param.put("hook.on_record_mp4",""); 105 param.put("hook.on_record_mp4","");
@@ -107,6 +108,7 @@ public class ZLMRunner implements CommandLineRunner { @@ -107,6 +108,7 @@ public class ZLMRunner implements CommandLineRunner {
107 param.put("hook.on_rtsp_realm",""); 108 param.put("hook.on_rtsp_realm","");
108 param.put("hook.on_server_started",String.format("%s/on_server_started", hookPrex)); 109 param.put("hook.on_server_started",String.format("%s/on_server_started", hookPrex));
109 param.put("hook.on_shell_login",String.format("%s/on_shell_login", hookPrex)); 110 param.put("hook.on_shell_login",String.format("%s/on_shell_login", hookPrex));
  111 + param.put("hook.on_stream_changed",String.format("%s/on_stream_changed", hookPrex));
110 param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex)); 112 param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex));
111 param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex)); 113 param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex));
112 param.put("hook.timeoutSec","20"); 114 param.put("hook.timeoutSec","20");
src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -93,7 +93,7 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { @@ -93,7 +93,7 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager {
93 ":" + channel.getName() + 93 ":" + channel.getName() +
94 "_" + (channel.getStatus() == 1 ? "on":"off") + 94 "_" + (channel.getStatus() == 1 ? "on":"off") +
95 "_" + (channelMap.get(channelId).size() > 0)+ 95 "_" + (channelMap.get(channelId).size() > 0)+
96 - "_" + channel.getParentId(), 96 + "_" + (StringUtils.isEmpty(channel.getParentId())?null:channel.getParentId()),
97 channel); 97 channel);
98 // 更新device中的通道数量 98 // 更新device中的通道数量
99 Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId); 99 Device device = (Device)redis.get(VideoManagerConstants.DEVICE_PREFIX+deviceId);
@@ -113,7 +113,14 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { @@ -113,7 +113,14 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager {
113 DeviceChannel deviceChannel = queryChannel(deviceId, parentId); 113 DeviceChannel deviceChannel = queryChannel(deviceId, parentId);
114 if (deviceChannel != null) { 114 if (deviceChannel != null) {
115 deviceChannel.setSubCount(channelMap.get(parentId).size()); 115 deviceChannel.setSubCount(channelMap.get(parentId).size());
116 - redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + deviceChannel.getChannelId(), 116 +// redis.set(VideoManagerConstants.CACHEKEY_PREFIX+deviceId + "_" + deviceChannel.getChannelId(),
  117 +// deviceChannel);
  118 + redis.set(VideoManagerConstants.CACHEKEY_PREFIX + deviceId +
  119 + "_" + deviceChannel.getChannelId() +
  120 + ":" + deviceChannel.getName() +
  121 + "_" + (deviceChannel.getStatus() == 1 ? "on":"off") +
  122 + "_" + (channelMap.get(deviceChannel.getChannelId()).size() > 0)+
  123 + "_" + (StringUtils.isEmpty(deviceChannel.getParentId())?null:deviceChannel.getParentId()),
117 deviceChannel); 124 deviceChannel);
118 125
119 } 126 }
@@ -438,7 +445,8 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager { @@ -438,7 +445,8 @@ public class VideoManagerRedisStoragerImpl implements IVideoManagerStorager {
438 if (subChannel == null) { 445 if (subChannel == null) {
439 subChannel = new HashSet<>(); 446 subChannel = new HashSet<>();
440 } 447 }
441 - if (!"null".equals(s[6])) { 448 + System.out.println(key);
  449 + if (s.length == 7 && !"null".equals(s[6])) {
442 subChannel.add(s[6]); 450 subChannel.add(s[6]);
443 } 451 }
444 channelMap.put(channelId, subChannel); 452 channelMap.put(channelId, subChannel);