Переглянути джерело

add 媒体设备云台控制

18339543638 3 роки тому
батько
коміт
60e2d7989b

+ 3 - 3
jetlinks-manager/media-manager/src/main/java/org/jetlinks/community/media/controller/MediaDeviceController.java

@@ -201,9 +201,9 @@ public class MediaDeviceController implements ReactiveServiceCrudController<Medi
        return  mediaDeviceService.findById(deviceId)
            .switchIfEmpty(Mono.error(new BusinessException("设备已注销")))
             .flatMap(device->{
-                if(device.getState()==DeviceState.offline){
-                    return Mono.error(new BusinessException("设备已下线"));
-                }
+//                if(device.getState()==DeviceState.offline){
+//                    return Mono.error(new BusinessException("设备已下线"));
+//                }
                 Integer speed=Optional.ofNullable(speedParameter).orElse(0);
                 int cmdCode = 0;
                 //orizonSpeed	水平移动速度

+ 2 - 10
jetlinks-manager/media-manager/src/main/java/org/jetlinks/community/media/transmit/callback/DeferredResultHolder.java

@@ -1,15 +1,5 @@
 package org.jetlinks.community.media.transmit.callback;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import org.jetlinks.community.media.transmit.callback.RequestMessage;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.async.DeferredResult;
 
 /**
  * @description: 异步请求处理
@@ -36,6 +26,8 @@ public class DeferredResultHolder {
 
     public static final String CALLBACK_CMD_PLAY = "CALLBACK_PLAY";
 
+    public static final String CALLBACK_RESPONSE = "CALLBACK_RESPONSE";
+
     public static final String CALLBACK_CMD_PLAYBACK = "CALLBACK_PLAY";
 
     public static final String CALLBACK_CMD_DOWNLOAD = "CALLBACK_DOWNLOAD";

+ 12 - 0
jetlinks-manager/media-manager/src/main/java/org/jetlinks/community/media/transmit/cmd/SipCommander.java

@@ -16,16 +16,19 @@ import org.jetlinks.community.media.entity.MediaDevice;
 import org.jetlinks.community.media.bean.SipServerConfig;
 import org.jetlinks.community.media.gb28181.event.SipSubscribe;
 import org.jetlinks.community.media.message.MediaMessageReply;
+import org.jetlinks.community.media.service.LocalMediaDeviceService;
 import org.jetlinks.community.media.service.LocalMediaServerItemService;
 import org.jetlinks.community.media.session.VideoStreamSessionManager;
 import org.jetlinks.community.media.sip.SipContext;
 import org.jetlinks.community.media.storage.impl.RedisCacheStorageImpl;
 import org.jetlinks.community.media.transmit.SIPRequestHeaderProvider;
+import org.jetlinks.community.media.transmit.callback.DeferredResultHolder;
 import org.jetlinks.community.media.zlm.ZLMHttpHookSubscribe;
 import org.jetlinks.community.media.zlm.dto.MediaItem;
 import org.jetlinks.community.media.zlm.entity.MediaServerItem;
 import org.jetlinks.community.utils.ZLMKeyGenerate;
 import org.jetlinks.core.device.StandaloneDeviceMessageBroker;
+import org.jetlinks.core.exception.DeviceOperationException;
 import org.springframework.stereotype.Service;
 import reactor.core.publisher.*;
 import javax.sip.*;
@@ -58,6 +61,7 @@ public class SipCommander {
     private final RedisCacheStorageImpl redisCacheStorage;
     private final DeviceGatewayMonitor gatewayMonitor;
     private final StandaloneDeviceMessageBroker messageBroker;
+//    private final LocalMediaDeviceService mediaDeviceService;
 
     public SipCommander(SIPRequestHeaderProvider headerProvider,
                         ZLMHttpHookSubscribe subscribe,
@@ -441,6 +445,14 @@ public class SipCommander {
             CallIdHeader callIdHeader = SipContext.getSipProvider().getNewCallId();
 
             Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader);
+//            String key = DeferredResultHolder.CALLBACK_RESPONSE + callIdHeader.getCallId();
+//            messageBroker.handleReply(device.getId(),key,Duration.ofSeconds(30))
+//                .onErrorResume(DeviceOperationException.class, error-> {
+//                    //设备下线
+//                    mediaDeviceService.deviceOffline(device);
+//                    return Mono.error(new BusinessException("设备响应超时"));
+//                })
+
             return transmitRequest(SipContext.getSipProvider(), request);
         } catch (SipException | ParseException | InvalidArgumentException e) {
             log.error("发送cmd命令失败,",e);