|
|
@@ -1,123 +0,0 @@
|
|
|
-package com.genersoft.iot.vmp.vmanager.onvif;
|
|
|
-
|
|
|
-import be.teletask.onvif.models.OnvifDevice;
|
|
|
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
|
|
|
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
|
|
|
-import com.genersoft.iot.vmp.onvif.IONVIFServer;
|
|
|
-import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
|
|
|
-import io.swagger.annotations.Api;
|
|
|
-import io.swagger.annotations.ApiImplicitParam;
|
|
|
-import io.swagger.annotations.ApiImplicitParams;
|
|
|
-import io.swagger.annotations.ApiOperation;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.http.ResponseEntity;
|
|
|
-import org.springframework.web.bind.annotation.*;
|
|
|
-import org.springframework.web.context.request.async.DeferredResult;
|
|
|
-
|
|
|
-import java.util.List;
|
|
|
-import java.util.UUID;
|
|
|
-
|
|
|
-@SuppressWarnings(value = {"rawtypes", "unchecked"})
|
|
|
-@Api(tags = "onvif设备")
|
|
|
-@CrossOrigin
|
|
|
-@RestController
|
|
|
-@RequestMapping("/api/onvif")
|
|
|
-public class ONVIFController {
|
|
|
-
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private DeferredResultHolder resultHolder;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private IONVIFServer onvifServer;
|
|
|
-
|
|
|
-
|
|
|
- @ApiOperation("搜索")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name="timeout", value = "超时时间", required = true, dataTypeClass = Integer.class),
|
|
|
- })
|
|
|
- @GetMapping(value = "/search")
|
|
|
- @ResponseBody
|
|
|
- public DeferredResult<ResponseEntity<WVPResult>> search(@RequestParam(required = false)Integer timeout){
|
|
|
- DeferredResult<ResponseEntity<WVPResult>> result = new DeferredResult<>(timeout + 10L);
|
|
|
- String uuid = UUID.randomUUID().toString();
|
|
|
- result.onTimeout(()->{
|
|
|
- RequestMessage msg = new RequestMessage();
|
|
|
- msg.setKey(DeferredResultHolder.CALLBACK_ONVIF );
|
|
|
- msg.setId(uuid);
|
|
|
- WVPResult<String> wvpResult = new WVPResult();
|
|
|
- wvpResult.setCode(0);
|
|
|
- wvpResult.setMsg("搜索超时");
|
|
|
- msg.setData(wvpResult);
|
|
|
- resultHolder.invokeResult(msg);
|
|
|
- });
|
|
|
- resultHolder.put(DeferredResultHolder.CALLBACK_ONVIF, uuid, result);
|
|
|
-
|
|
|
- onvifServer.search(timeout, (errorCode, onvifDevices) ->{
|
|
|
- RequestMessage msg = new RequestMessage();
|
|
|
- msg.setId(DeferredResultHolder.CALLBACK_ONVIF + uuid);
|
|
|
- WVPResult<List<String>> resultData = new WVPResult();
|
|
|
- resultData.setCode(errorCode);
|
|
|
- if (errorCode == 0) {
|
|
|
- resultData.setMsg("success");
|
|
|
- resultData.setData(onvifDevices);
|
|
|
- }else {
|
|
|
- resultData.setMsg("fail");
|
|
|
- }
|
|
|
- msg.setData(resultData);
|
|
|
- msg.setData(resultData);
|
|
|
- resultHolder.invokeResult(msg);
|
|
|
- });
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
- @ApiOperation("获取onvif的rtsp地址")
|
|
|
- @ApiImplicitParams({
|
|
|
- @ApiImplicitParam(name="timeout", value = "超时时间", required = true, dataTypeClass = Integer.class),
|
|
|
- @ApiImplicitParam(name="hostname", value = "onvif地址", required = true, dataTypeClass = String.class),
|
|
|
- @ApiImplicitParam(name="username", value = "用户名", required = true, dataTypeClass = String.class),
|
|
|
- @ApiImplicitParam(name="password", value = "密码", required = true, dataTypeClass = String.class),
|
|
|
- })
|
|
|
- @GetMapping(value = "/rtsp")
|
|
|
- @ResponseBody
|
|
|
- public DeferredResult<ResponseEntity<WVPResult>> getRTSPUrl(@RequestParam(value="timeout", required=false, defaultValue="3000") Integer timeout,
|
|
|
- @RequestParam(required = true) String hostname,
|
|
|
- @RequestParam(required = false) String username,
|
|
|
- @RequestParam(required = false) String password
|
|
|
- ){
|
|
|
-
|
|
|
- DeferredResult<ResponseEntity<WVPResult>> result = new DeferredResult<>(timeout + 10L);
|
|
|
- String uuid = UUID.randomUUID().toString();
|
|
|
- result.onTimeout(()->{
|
|
|
- RequestMessage msg = new RequestMessage();
|
|
|
- msg.setId(uuid);
|
|
|
- msg.setKey(DeferredResultHolder.CALLBACK_ONVIF);
|
|
|
- WVPResult<String> wvpResult = new WVPResult();
|
|
|
- wvpResult.setCode(0);
|
|
|
- wvpResult.setMsg("获取onvif的rtsp地址超时");
|
|
|
- msg.setData(wvpResult);
|
|
|
- resultHolder.invokeResult(msg);
|
|
|
- });
|
|
|
- resultHolder.put(DeferredResultHolder.CALLBACK_ONVIF, uuid, result);
|
|
|
- OnvifDevice onvifDevice = new OnvifDevice(hostname, username, password);
|
|
|
- onvifServer.getRTSPUrl(timeout, onvifDevice, (errorCode, url) ->{
|
|
|
- RequestMessage msg = new RequestMessage();
|
|
|
- msg.setId(DeferredResultHolder.CALLBACK_ONVIF + uuid);
|
|
|
- WVPResult<String> resultData = new WVPResult();
|
|
|
- resultData.setCode(errorCode);
|
|
|
- if (errorCode == 0) {
|
|
|
- resultData.setMsg("success");
|
|
|
- resultData.setData(url);
|
|
|
- }else {
|
|
|
- resultData.setMsg(url);
|
|
|
- }
|
|
|
- msg.setData(resultData);
|
|
|
-
|
|
|
- resultHolder.invokeResult(msg);
|
|
|
- });
|
|
|
-
|
|
|
- return result;
|
|
|
- }
|
|
|
-
|
|
|
-}
|