package com.ld.igds.protocol.fzmedia;
|
|
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.protocol.snap.SnapPluginService;
|
import com.ld.igds.sec.dto.SecCameraDto;
|
import com.ld.igds.camera.ApiCameraService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.http.ResponseEntity;
|
import org.springframework.stereotype.Component;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
/**
|
* 风正致远自有流媒体服务器
|
*/
|
@Slf4j
|
@Component
|
public class FzzyMediaService implements ApiCameraService {
|
|
private static String URL_PLAY = "http://ip:port/api/v1/remote/play";
|
|
public static String URL_PTZ = "http://ip:port/api/v1/remote/ptz";
|
|
// http://124.71.187.17:15080/rtp/
|
private static String URL_PLAY_FLV = "http://ip:15080/rtp/sn_channel.flv";
|
|
@Autowired
|
private SnapPluginService snapPluginService;
|
@Autowired
|
private FzzyProp prop;
|
@Autowired
|
private RestTemplate restTemplate;
|
|
@Override
|
public String getPlayType() {
|
return CameraUtil.PLAY_TYPE_FZZY_GB;
|
}
|
|
@Override
|
public ApiCameraResp getPlayAddr(ApiCameraData apiCameraDto) {
|
|
try {
|
String mediaIp = prop.getIp();
|
|
if (null == mediaIp) {
|
log.warn("-----------没有获取到多媒体服务地址-----");
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, "没有获取到多媒体服务地址");
|
}
|
String sn = apiCameraDto.getSn();
|
String ipTag = apiCameraDto.getIp();
|
|
URL_PLAY = URL_PLAY.replace("ip", mediaIp).replace("port",
|
prop.getPort() + "");
|
|
String url = URL_PLAY + "?sn={sn}&channel={channel}&ip={ip}";
|
|
|
String channel = sn;
|
if (sn.indexOf("_") > 0) {
|
channel = sn.substring(sn.indexOf("_") + 1);
|
sn = sn.substring(0, sn.indexOf("_"));
|
}
|
|
log.info("-------获取多媒体播放信息---------URL-{}", url);
|
Map<String, String> map = new HashMap<>();
|
map.put("sn", sn);
|
map.put("channel", channel);
|
map.put("ip", ipTag);
|
|
ResponseEntity<JSONObject> responseEntity = restTemplate
|
.getForEntity(url, JSONObject.class, map);
|
|
JSONObject result = responseEntity.getBody();
|
|
// 自己封装
|
String flv = URL_PLAY_FLV;
|
flv = flv.replace("ip", mediaIp)
|
.replace("port", prop.getPort()+"")
|
.replace("sn", sn).replace("channel", channel);
|
result.put("flv", flv);
|
|
log.info("-------获取多媒体播放信息---------result-{}", result);
|
|
return new ApiCameraResp((String) result.get("code"),
|
(String) result.get("flv"), (String) result.get("msg"));
|
|
} catch (Exception e) {
|
log.debug("调用流媒体服务器异常:{}", e);
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR,
|
"调用流媒体服务器异常:请联系管理员查看原因");
|
}
|
}
|
|
/**
|
* 云台控制
|
* <p>
|
* 执行命令 1=上,2=下,3=左,4=右,5=左上,6=左下,7=右上,8=右下,0=停止,9=变倍小,10 = 变倍加
|
*
|
* @param dto
|
* @return
|
*/
|
@Override
|
public ApiCameraResp ptzMedia(ApiCameraData dto) {
|
|
if (StringUtils.isEmpty(dto.getSn()) && StringUtils.isEmpty(dto.getIp())) {
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, "没有获取到当前摄像机IP/SN,不支持云台控制");
|
|
}
|
|
try {
|
String mediaIp = prop.getIp();
|
|
if (null == mediaIp) {
|
log.warn("-----------没有获取到多媒体服务地址-----");
|
return new ApiCameraResp(ApiCameraResp.CODE_ERROR, "没有获取到多媒体服务地址");
|
}
|
|
URL_PTZ = URL_PTZ.replace("ip", mediaIp).replace("port",
|
prop.getPort()+"");
|
|
String url = URL_PTZ + "?sn={sn}&channel={channel}&ip={ip}&command={command}";
|
|
log.debug("-------调用流媒体PTZ路径---------URL-{}", url);
|
|
// 命令进行转换 控制指令 允许值: left, right, up, down, upleft, upright,
|
// downleft, downright, zoomin, zoomout, stop
|
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("upleft");
|
}
|
if ("6".equals(dto.getCommand())) {
|
dto.setCommand("downleft");
|
}
|
if ("7".equals(dto.getCommand())) {
|
dto.setCommand("upright");
|
}
|
if ("8".equals(dto.getCommand())) {
|
dto.setCommand("downright");
|
}
|
if ("9".equals(dto.getCommand())) {
|
dto.setCommand("zoomin");
|
}
|
if ("10".equals(dto.getCommand())) {
|
dto.setCommand("zoomout");
|
}
|
if ("0".equals(dto.getCommand())) {
|
dto.setCommand("stop");
|
}
|
|
String sn = dto.getSn();
|
String channel = sn;
|
if (sn.indexOf("_") > 0) {
|
channel = sn.substring(sn.indexOf("_") + 1);
|
sn = sn.substring(0, sn.indexOf("_"));
|
dto.setSn(sn);
|
dto.setChannel(channel);
|
}
|
|
Map<String, String> map = new HashMap<>();
|
map.put("sn", dto.getSn());
|
map.put("channel", dto.getChannel());
|
map.put("ip", dto.getIp());
|
map.put("command", dto.getCommand());
|
|
ResponseEntity<JSONObject> responseEntity = restTemplate
|
.getForEntity(url, JSONObject.class, map);
|
|
JSONObject result = responseEntity.getBody();
|
|
log.info("-------调用流媒体PTZ路径---执行-{}--result-{}", dto.getCommand(),
|
result);
|
return new ApiCameraResp((String) result.get("code"), (String) result.get("msg"));
|
|
} 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;
|
}
|
}
|