From b10d4680e1f0c9b992ab2ad86c7d19a19206f144 Mon Sep 17 00:00:00 2001
From: aix <vip_xiaobin810@163.com>
Date: Tue, 13 Aug 2024 14:47:46 +0800
Subject: [PATCH] 直播

---
 src/main/java/com/dji/sample/control/controller/DockController.java |  127 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 127 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/dji/sample/control/controller/DockController.java b/src/main/java/com/dji/sample/control/controller/DockController.java
index 458f026..1fea75a 100644
--- a/src/main/java/com/dji/sample/control/controller/DockController.java
+++ b/src/main/java/com/dji/sample/control/controller/DockController.java
@@ -1,15 +1,31 @@
 package com.dji.sample.control.controller;
 
 import com.dji.sample.common.model.ResponseResult;
+import com.dji.sample.component.redis.RedisConst;
+import com.dji.sample.component.redis.RedisOpsUtils;
+import com.dji.sample.control.model.enums.CameraModeEnum;
 import com.dji.sample.control.model.enums.DroneAuthorityEnum;
+import com.dji.sample.control.model.enums.PayloadCommandsEnum;
 import com.dji.sample.control.model.param.*;
 import com.dji.sample.control.service.IControlService;
 import com.dji.sample.log.aspect.SysLogAnnotation;
+import com.dji.sample.manage.model.dto.CapacityCameraDTO;
+import com.dji.sample.manage.model.dto.DeviceDTO;
+import com.dji.sample.manage.model.enums.DeviceModeCodeEnum;
+import com.dji.sample.manage.model.param.DeviceQueryParam;
+import com.dji.sample.manage.model.receiver.OsdCameraReceiver;
+import com.dji.sample.manage.model.receiver.OsdDockReceiver;
+import com.dji.sample.manage.model.receiver.OsdSubDeviceReceiver;
+import com.dji.sample.manage.service.ICapacityCameraService;
+import com.dji.sample.manage.service.IDeviceService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
 
 /**
  * @author sean
@@ -23,6 +39,12 @@
 
     @Autowired
     private IControlService controlService;
+
+    @Autowired
+    private ICapacityCameraService capacityCameraService;
+
+    @Autowired
+    private IDeviceService deviceService;
 
     @PostMapping("/{sn}/jobs/{service_identifier}")
     @SysLogAnnotation(operModul = "机场控制", operType = "控制指令", operDesc = "控制指令")
@@ -68,5 +90,110 @@
         return controlService.payloadCommands(param);
     }
 
+    @GetMapping("/{sn}/payload/photoAndVideoCmd/{type}")
+    @SysLogAnnotation(operModul = "云台拍照录像控制", operType = "控制指令", operDesc = "云台拍照录像控制")
+    public ResponseResult photoAndVideoCmd(@PathVariable String sn, @PathVariable String type) throws Exception {
+
+        List<DeviceDTO> list = deviceService.getDevicesByParams(DeviceQueryParam.builder().deviceSn(sn).build());
+
+        if (list.isEmpty()) {
+            return ResponseResult.error("机场离线!");
+        }
+
+        DeviceDTO deviceDTO = list.get(0);
+
+        //无人机设备相机信息
+        String key = RedisConst.OSD_PREFIX + deviceDTO.getChildDeviceSn();
+        OsdSubDeviceReceiver redisData = (OsdSubDeviceReceiver) RedisOpsUtils.get(key);
+        log.info("无人机设备相机信息osd:{}",redisData);
+
+        if (null == redisData) {
+            return ResponseResult.error("无人机设备离线!");
+        }
+
+        //无人机osd信息
+        List<OsdCameraReceiver> osdCameraReceiverList = redisData.getCameras();
+        OsdCameraReceiver cameraDTO = osdCameraReceiverList.get(0);
+
+        //获取负载控制
+        ResponseResult result = getPayload(sn,cameraDTO);
+        log.info("获取负载:{}",result);
+        if (result.getCode() != 0) {
+            return result;
+        }
+
+        PayloadCommandsParam param = new PayloadCommandsParam();
+        param.setSn(sn);
+        DronePayloadParam data = new DronePayloadParam();
+        data.setPayloadIndex(cameraDTO.getPayloadIndex());
+        //拍照
+        switch (type) {
+            case "photo":
+                if (!Objects.equals(cameraDTO.getCameraMode().getMode(), CameraModeEnum.PHOTO.getMode())) {
+                    //切换模式
+                    ResponseResult swResult = switchingMode(sn, CameraModeEnum.PHOTO, cameraDTO);
+                    log.info("摄像头切换状态:{}", swResult);
+
+                }
+                param.setCmd(PayloadCommandsEnum.CAMERA_PHOTO_TAKE);
+                param.setData(data);
+                break;
+            case "video_start": {//开始录像
+                if (Objects.equals(cameraDTO.getCameraMode().getMode(), CameraModeEnum.PHOTO.getMode())) {
+                    //切换模式
+                    ResponseResult swResult = switchingMode(sn, CameraModeEnum.VIDEO, cameraDTO);
+                    log.info("摄像头切换状态:{}", swResult);
+                }
+                param.setCmd(PayloadCommandsEnum.CAMERA_RECORDING_START);
+                param.setData(data);
+                break;
+            }
+            case "video_stop": {//结束录像
+                if (Objects.equals(cameraDTO.getCameraMode().getMode(), CameraModeEnum.PHOTO.getMode())) {
+                    //切换模式
+                    ResponseResult swResult = switchingMode(sn, CameraModeEnum.VIDEO, cameraDTO);
+                    log.info("摄像头切换状态:{}", swResult);
+                }
+                param.setCmd(PayloadCommandsEnum.CAMERA_RECORDING_STOP);
+                param.setData(data);
+                break;
+            }
+            default:
+                return ResponseResult.error(-1, "未知类型!");
+        }
+
+        return controlService.payloadCommands(param);
+    }
+
+    /**
+     * 获取负载权限
+     * @param sn 无人机设备号
+     * @return
+     */
+    private ResponseResult getPayload(String sn,OsdCameraReceiver cameraDTO) {
+        DronePayloadParam param = new DronePayloadParam();
+        param.setPayloadIndex(cameraDTO.getPayloadIndex());
+        return controlService.seizeAuthority(sn, DroneAuthorityEnum.PAYLOAD, param);//获取无人机负载权限
+    }
+
+    /**
+     * 负载模式切换
+     * @param sn 无人机设备号
+     * @param mode 模式  相机或者录像模式
+     * @param cameraDTO 相机数据
+     * @return
+     * @throws Exception
+     */
+    private ResponseResult switchingMode(String sn, CameraModeEnum mode, OsdCameraReceiver cameraDTO) throws Exception {
+        PayloadCommandsParam param = new PayloadCommandsParam();
+        param.setSn(sn);
+        param.setCmd(PayloadCommandsEnum.CAMERA_MODE_SWitCH);
+        DronePayloadParam data = new DronePayloadParam();
+        data.setPayloadIndex(cameraDTO.getPayloadIndex());
+        data.setCameraMode(mode);
+        param.setData(data);
+        return controlService.payloadCommands(param);
+    }
+
 
 }

--
Gitblit v1.9.3