package com.ld.igds.protocol.hikmedia;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.ld.igds.camera.CameraUtil;
|
import com.ld.igds.camera.data.ApiCameraData;
|
import com.ld.igds.camera.data.ApiCameraResp;
|
import com.ld.igds.camera.data.ApiSnapReq;
|
import com.ld.igds.data.ConfigHikMedia;
|
import com.ld.igds.data.HikMediaProp;
|
import com.ld.igds.protocol.hikmedia.data.*;
|
import com.ld.igds.protocol.snap.SnapPluginService;
|
import com.ld.igds.sec.dto.SecCameraDto;
|
import com.ld.igds.camera.ApiCameraService;
|
import com.ld.igds.sec.service.CoreSecCameraService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Component;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* 海康流媒体服务接口
|
*/
|
@Slf4j
|
@Component
|
public class HikMediaService implements ApiCameraService {
|
|
@Autowired
|
private SnapPluginService snapPluginService;
|
@Autowired
|
private CoreSecCameraService cameraService;
|
@Autowired
|
private ConfigHikMedia configHikMedia;
|
|
@Override
|
public String getPlayType() {
|
return CameraUtil.PLAY_TYPE_MEDIA_HIK;
|
}
|
|
@Override
|
public ApiCameraResp getPlayAddr(ApiCameraData apiCameraDto) {
|
|
if(StringUtils.isEmpty(apiCameraDto.getCompanyId()) || StringUtils.isEmpty(apiCameraDto.getSn())){
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, "调用流媒体服务器异常:请联系管理员查看原因");
|
}
|
HikMediaProp prop = configHikMedia.getHikProp(apiCameraDto.getCompanyId());
|
try {
|
ApiCameraPreview apiCameraPreview = ApiCameraPreview.getInstance();
|
ApiHikParam param = new ApiHikParam();
|
param.setIp(prop.getIp());
|
param.setWanIp(prop.getWanIp());
|
param.setPort(prop.getPort() + "");
|
param.setAppKey(prop.getAppKey());
|
param.setAppSecret(prop.getAppSecret());
|
param.setArtemisPath(prop.getContextPath());
|
|
param.setDeviceCode(apiCameraDto.getSn());
|
|
HikRespData<CameraPlay> result = apiCameraPreview.apiPreview(param);
|
|
log.info("-------获取多媒体播放信息--------{}-", result);
|
|
if (HikUtil.RESP_CODE_0.equals(result.getCode())) {
|
CameraPlay cameraPlay = JSONObject.parseObject(JSONObject.toJSONString(result.getData()), CameraPlay.class);
|
String url = cameraPlay.getUrl();
|
url = url.replace(param.getIp(), param.getWanIp());
|
log.info("-------获取播放url------={}", url);
|
return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS,
|
url, result.getMsg());
|
}
|
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR,
|
null, result.getMsg());
|
|
} catch (Exception e) {
|
log.debug("调用流媒体服务器异常:{}", e);
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR,
|
"调用流媒体服务器异常:请联系管理员查看原因");
|
}
|
}
|
|
/**
|
* 云台控制
|
* 执行命令 1=上,2=下,3=左,4=右,5=左上,6=左下,7=右上,8=右下,0=停止,9=变倍小,10 = 变倍加
|
* <p>
|
* LEFT 左转
|
* RIGHT右转
|
* UP 上转
|
* DOWN 下转
|
* ZOOM_IN 焦距变大
|
* ZOOM_OUT 焦距变小
|
* LEFT_UP 左上
|
* LEFT_DOWN 左下
|
* RIGHT_UP 右上
|
* RIGHT_DOWN 右下
|
* FOCUS_NEAR 焦点前移
|
* FOCUS_FAR 焦点后移
|
* IRIS_ENLARGE 光圈扩大
|
* IRIS_REDUCE 光圈缩小
|
* WIPER_SWITCH 接通雨刷开关
|
* START_RECORD_TRACK 开始记录轨迹
|
* STOP_RECORD_TRACK 停止记录轨迹
|
* START_TRACK 开始轨迹
|
* STOP_TRACK 停止轨迹;
|
* 以下命令presetIndex不可为空:
|
* GOTO_PRESET到预置点
|
*
|
* @param dto
|
* @return
|
*/
|
@Override
|
public ApiCameraResp ptzMedia(ApiCameraData dto) {
|
if(StringUtils.isEmpty(dto.getCompanyId()) || StringUtils.isEmpty(dto.getSn())){
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, "调用流媒体服务器异常:请联系管理员查看原因");
|
}
|
HikMediaProp prop = configHikMedia.getHikProp(dto.getCompanyId());
|
try {
|
|
if ("1".equals(dto.getCommand())) {
|
dto.setCommand("UP");
|
}
|
if ("2".equals(dto.getCommand())) {
|
dto.setCommand("DOWN");
|
}
|
if ("3".equals(dto.getCommand())) {
|
dto.setCommand("LEFT");
|
}
|
if ("4".equals(dto.getCommand())) {
|
dto.setCommand("RIGHT");
|
}
|
if ("5".equals(dto.getCommand())) {
|
dto.setCommand("LEFT_UP");
|
}
|
if ("6".equals(dto.getCommand())) {
|
dto.setCommand("LEFT_DOWN");
|
}
|
if ("7".equals(dto.getCommand())) {
|
dto.setCommand("RIGHT_UP");
|
}
|
if ("8".equals(dto.getCommand())) {
|
dto.setCommand("RIGHT_DOWN");
|
}
|
if ("9".equals(dto.getCommand())) {
|
dto.setCommand("ZOOM_IN");
|
}
|
if ("10".equals(dto.getCommand())) {
|
dto.setCommand("ZOOM_OUT");
|
}
|
|
int action = 0;
|
if ("0".equals(dto.getCommand())) {
|
action = 1;
|
}
|
|
ApiHikParam param = new ApiHikParam();
|
param.setIp(prop.getIp());
|
param.setWanIp(prop.getWanIp());
|
param.setPort(prop.getPort() + "");
|
param.setAppKey(prop.getAppKey());
|
param.setAppSecret(prop.getAppSecret());
|
param.setArtemisPath(prop.getContextPath());
|
|
param.setDeviceCode(dto.getSn());
|
param.setAction(action);
|
param.setCommand(dto.getCommand());
|
|
//预置位
|
if (param.getPresetIndex() > 0) {
|
param.setPresetIndex(param.getPresetIndex());
|
param.setCommand("GOTO_PRESET");
|
}
|
|
ApiCameraControl apiCameraControl = ApiCameraControl.getInstance();
|
HikRespData<String> result = apiCameraControl.ptz(param);
|
|
if (HikUtil.RESP_CODE_0.equals(result.getCode())) {
|
|
return new ApiCameraResp(ApiCameraResp.CODE_SUCCESS, "执行成功");
|
} else {
|
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, result.getMsg());
|
}
|
|
} catch (Exception e) {
|
|
log.error("调用流媒体服务器异常:{}", e);
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, "调用流媒体服务器异常:请联系管理员查看原因");
|
}
|
}
|
|
@Override
|
public ApiCameraResp ptzPreset(ApiCameraData apiCameraDto) {
|
//TODO
|
return null;
|
}
|
|
@Override
|
public ApiCameraResp keepAlive(ApiCameraData apiCameraDto) {
|
//TODO
|
return null;
|
}
|
|
@Override
|
public List<SecCameraDto> searchCamera(ApiCameraData apiCameraDto) {
|
if(StringUtils.isEmpty(apiCameraDto.getCompanyId())){
|
return null;
|
}
|
HikMediaProp prop = configHikMedia.getHikProp(apiCameraDto.getCompanyId());
|
ApiCameraSearch apiCameraSearch = ApiCameraSearch.getInstance();
|
ApiHikParam param = new ApiHikParam();
|
param.setIp(prop.getIp());
|
param.setWanIp(prop.getWanIp());
|
param.setPort(prop.getPort() + "");
|
param.setAppKey(prop.getAppKey());
|
param.setAppSecret(prop.getAppSecret());
|
param.setArtemisPath(prop.getContextPath());
|
param.setRegionIndexCodes(prop.getRegionIndexCodes().split(","));
|
HikRespData<CameraMainDto> result = apiCameraSearch.apiSearchDevice(param);
|
|
if (!HikUtil.RESP_CODE_0.equals(result.getCode())) {
|
log.error("---------同步远程摄像头配置列表失败------{}", result.getMsg());
|
return null;
|
}
|
|
log.info("-------同步远程摄像头配置信息-----{}", result.getData());
|
|
CameraMainDto data = JSONObject.parseObject(JSONObject.toJSONString(result.getData()), CameraMainDto.class);
|
|
List<CameraDto> list = data.getList();
|
|
if (list != null && list.size() > 0) {
|
SecCameraDto dto;
|
for (CameraDto cameraDto : list) {
|
dto = new SecCameraDto();
|
dto.setId(cameraDto.getIndexCode());
|
dto.setSn(cameraDto.getIndexCode());
|
dto.setCompanyId(apiCameraDto.getCompanyId());
|
dto.setDeptId(apiCameraDto.getDeptId());
|
dto.setType(HikUtil.getCameraType(cameraDto.getCameraType()));
|
dto.setPlayType(CameraUtil.PLAY_TYPE_MEDIA_HIK);
|
dto.setName(cameraDto.getName());
|
dto.setChanNum(cameraDto.getChanNum());
|
dto.setBrand("海康");
|
cameraService.updateCamera(dto);
|
}
|
}
|
return new ArrayList<SecCameraDto>();
|
}
|
|
@Override
|
public ApiCameraResp snapImg(ApiSnapReq apiCameraDto) {
|
if (CameraUtil.SNAP_TYPE_FZZY_PLUGIN.equals(apiCameraDto.getSnapType())) {
|
return snapPluginService.snapImg(apiCameraDto);
|
}
|
return null;
|
}
|
}
|