package com.ld.igds.protocol.hikmedia.infovisionIoT.v161;
|
|
import com.alibaba.fastjson.JSONObject;
|
import com.ld.igds.camera.ApiCameraService;
|
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.*;
|
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.util.RedisUtil;
|
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.List;
|
|
/**
|
* 海康流媒体服务接口
|
*/
|
@Slf4j
|
@Component
|
public class HikMediaServiceV161 implements ApiCameraService {
|
|
@Autowired
|
private SnapPluginService snapPluginService;
|
@Autowired
|
private ConfigHikMedia configHikMedia;
|
@Autowired
|
private RedisUtil redisUtil;
|
|
@Override
|
public String getPlayType() {
|
return CameraUtil.PLAY_TYPE_MEDIA_HIK_INFOVISION_IOT_161;
|
}
|
|
@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;
|
|
//当命令为0时,表示停止,传递action为1,并获取上次开始执行的命令,赋值到command
|
String str = (String) redisUtil.get(dto.getSn());
|
if(StringUtils.isEmpty(str)){
|
str = "UP";
|
}
|
dto.setCommand(str);
|
//清除缓存
|
redisUtil.del(dto.getSn());
|
}else {
|
//将执行开始的命令存入缓存,方便下次停止使用
|
redisUtil.set(dto.getSn(), dto.getCommand());
|
}
|
|
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) {
|
//TODO
|
return null;
|
}
|
|
@Override
|
public ApiCameraResp snapImg(ApiSnapReq apiCameraDto) {
|
if (CameraUtil.SNAP_TYPE_FZZY_PLUGIN.equals(apiCameraDto.getSnapType())) {
|
return snapPluginService.snapImg(apiCameraDto);
|
}
|
return null;
|
}
|
}
|