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