648540858
3 years ago
14 changed files with 257 additions and 22 deletions
@ -0,0 +1,32 @@ |
|||||
|
package com.genersoft.iot.vmp.gb28181.event.record; |
||||
|
|
||||
|
import com.genersoft.iot.vmp.gb28181.bean.DeviceAlarm; |
||||
|
import com.genersoft.iot.vmp.gb28181.bean.RecordInfo; |
||||
|
import org.springframework.context.ApplicationEvent; |
||||
|
|
||||
|
/** |
||||
|
* @description: 录像查询结束时间 |
||||
|
* @author: pan |
||||
|
* @data: 2022-02-23 |
||||
|
*/ |
||||
|
|
||||
|
public class RecordEndEvent extends ApplicationEvent { |
||||
|
/** |
||||
|
* |
||||
|
*/ |
||||
|
private static final long serialVersionUID = 1L; |
||||
|
|
||||
|
public RecordEndEvent(Object source) { |
||||
|
super(source); |
||||
|
} |
||||
|
|
||||
|
private RecordInfo recordInfo; |
||||
|
|
||||
|
public RecordInfo getRecordInfo() { |
||||
|
return recordInfo; |
||||
|
} |
||||
|
|
||||
|
public void setRecordInfo(RecordInfo recordInfo) { |
||||
|
this.recordInfo = recordInfo; |
||||
|
} |
||||
|
} |
@ -0,0 +1,43 @@ |
|||||
|
package com.genersoft.iot.vmp.gb28181.event.record; |
||||
|
|
||||
|
import com.genersoft.iot.vmp.gb28181.bean.RecordItem; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.context.ApplicationListener; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; |
||||
|
|
||||
|
import java.io.IOException; |
||||
|
import java.util.*; |
||||
|
|
||||
|
/** |
||||
|
* @description: 录像查询结束时间 |
||||
|
* @author: pan |
||||
|
* @data: 2022-02-23 |
||||
|
*/ |
||||
|
|
||||
|
@Component |
||||
|
public class RecordEndEventListener implements ApplicationListener<RecordEndEvent> { |
||||
|
|
||||
|
private final static Logger logger = LoggerFactory.getLogger(RecordEndEventListener.class); |
||||
|
|
||||
|
private static Map<String, SseEmitter> sseEmitters = new Hashtable<>(); |
||||
|
|
||||
|
public void addSseEmitters(String browserId, SseEmitter sseEmitter) { |
||||
|
sseEmitters.put(browserId, sseEmitter); |
||||
|
} |
||||
|
|
||||
|
public interface RecordEndEventHandler{ |
||||
|
void handler(List<RecordItem> recordItems); |
||||
|
} |
||||
|
|
||||
|
private Map<String, RecordEndEventHandler> handlerMap = new HashMap<>(); |
||||
|
@Override |
||||
|
public void onApplicationEvent(RecordEndEvent event) { |
||||
|
if (logger.isDebugEnabled()) { |
||||
|
logger.debug("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}条", event.getRecordInfo().getDeviceId(), |
||||
|
event.getRecordInfo().getChannelId(), event.getRecordInfo().getRecordList().size() ); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,113 @@ |
|||||
|
package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.cmd; |
||||
|
|
||||
|
import com.genersoft.iot.vmp.conf.SipConfig; |
||||
|
import com.genersoft.iot.vmp.gb28181.bean.*; |
||||
|
import com.genersoft.iot.vmp.gb28181.event.EventPublisher; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler; |
||||
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.query.QueryMessageHandler; |
||||
|
import com.genersoft.iot.vmp.gb28181.utils.DateUtil; |
||||
|
import com.genersoft.iot.vmp.storager.IVideoManagerStorager; |
||||
|
import com.genersoft.iot.vmp.storager.dao.dto.ChannelSourceInfo; |
||||
|
import com.genersoft.iot.vmp.vmanager.gb28181.platform.bean.ChannelReduce; |
||||
|
import org.dom4j.Element; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.InitializingBean; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Component; |
||||
|
|
||||
|
import javax.sip.InvalidArgumentException; |
||||
|
import javax.sip.RequestEvent; |
||||
|
import javax.sip.SipException; |
||||
|
import javax.sip.header.FromHeader; |
||||
|
import javax.sip.message.Response; |
||||
|
import java.text.ParseException; |
||||
|
import java.util.List; |
||||
|
|
||||
|
@Component |
||||
|
public class RecordInfoQueryMessageHandler extends SIPRequestProcessorParent implements InitializingBean, IMessageHandler { |
||||
|
|
||||
|
private Logger logger = LoggerFactory.getLogger(RecordInfoQueryMessageHandler.class); |
||||
|
private final String cmdType = "RecordInfo"; |
||||
|
|
||||
|
@Autowired |
||||
|
private QueryMessageHandler queryMessageHandler; |
||||
|
|
||||
|
@Autowired |
||||
|
private IVideoManagerStorager storager; |
||||
|
|
||||
|
@Autowired |
||||
|
private SIPCommanderFroPlatform cmderFroPlatform; |
||||
|
|
||||
|
@Autowired |
||||
|
private SIPCommander commander; |
||||
|
|
||||
|
@Autowired |
||||
|
private SipConfig config; |
||||
|
|
||||
|
@Autowired |
||||
|
private EventPublisher publisher; |
||||
|
|
||||
|
@Override |
||||
|
public void afterPropertiesSet() throws Exception { |
||||
|
queryMessageHandler.addHandler(cmdType, this); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void handForDevice(RequestEvent evt, Device device, Element element) { |
||||
|
|
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public void handForPlatform(RequestEvent evt, ParentPlatform parentPlatform, Element rootElement) { |
||||
|
|
||||
|
String key = DeferredResultHolder.CALLBACK_CMD_CATALOG + parentPlatform.getServerGBId(); |
||||
|
FromHeader fromHeader = (FromHeader) evt.getRequest().getHeader(FromHeader.NAME); |
||||
|
try { |
||||
|
// 回复200 OK
|
||||
|
responseAck(evt, Response.OK); |
||||
|
Element snElement = rootElement.element("SN"); |
||||
|
int sn = Integer.parseInt(snElement.getText()); |
||||
|
Element deviceIDElement = rootElement.element("DeviceID"); |
||||
|
String channelId = deviceIDElement.getText(); |
||||
|
Element startTimeElement = rootElement.element("StartTime"); |
||||
|
String startTime = startTimeElement.getText(); |
||||
|
Element endTimeElement = rootElement.element("EndTime"); |
||||
|
String endTime = endTimeElement.getText(); |
||||
|
Element secrecyElement = rootElement.element("Secrecy"); |
||||
|
int secrecy = Integer.parseInt(secrecyElement.getText()); |
||||
|
Element typeElement = rootElement.element("Type"); |
||||
|
String type = typeElement.getText(); |
||||
|
// 确认是直播还是国标, 国标直接请求下级,直播请求录像管理服务
|
||||
|
List<ChannelSourceInfo> channelSources = storager.getChannelSource(parentPlatform.getServerGBId(), channelId); |
||||
|
if (channelSources.get(0).getCount() > 0) { // 国标
|
||||
|
// 向国标设备请求录像数据
|
||||
|
Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId); |
||||
|
commander.recordInfoQuery(device, channelId, DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(startTime), |
||||
|
DateUtil.ISO8601Toyyyy_MM_dd_HH_mm_ss(endTime), sn, secrecy, type, (eventResult -> { |
||||
|
// 查询成功
|
||||
|
|
||||
|
}),(eventResult -> { |
||||
|
// 查询失败
|
||||
|
|
||||
|
})); |
||||
|
|
||||
|
}else if (channelSources.get(0).getCount() > 0) { // 直播流
|
||||
|
// TODO
|
||||
|
}else { // 错误的请求
|
||||
|
|
||||
|
} |
||||
|
} catch (SipException e) { |
||||
|
e.printStackTrace(); |
||||
|
} catch (InvalidArgumentException e) { |
||||
|
e.printStackTrace(); |
||||
|
} catch (ParseException e) { |
||||
|
e.printStackTrace(); |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,22 @@ |
|||||
|
package com.genersoft.iot.vmp.storager.dao.dto; |
||||
|
|
||||
|
public class ChannelSourceInfo { |
||||
|
private String name; |
||||
|
private int count; |
||||
|
|
||||
|
public String getName() { |
||||
|
return name; |
||||
|
} |
||||
|
|
||||
|
public void setName(String name) { |
||||
|
this.name = name; |
||||
|
} |
||||
|
|
||||
|
public int getCount() { |
||||
|
return count; |
||||
|
} |
||||
|
|
||||
|
public void setCount(int count) { |
||||
|
this.count = count; |
||||
|
} |
||||
|
} |
Loading…
Reference in new issue