From 381b3d15caa30e99c75f58a366b3b75cbbf01450 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 07 十二月 2021 11:40:17 +0800 Subject: [PATCH] 修复未结束的推流无法下载 --- src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java | 48 +++++++++++++++++++++++++++++++----------------- 1 files changed, 31 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java index 8ebd8ed..70f9811 100644 --- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java +++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiStreamController.java @@ -1,18 +1,20 @@ package com.genersoft.iot.vmp.web.gb28181; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.conf.UserSetup; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; +import com.genersoft.iot.vmp.service.IPlayService; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; -import com.genersoft.iot.vmp.vmanager.gb28181.play.PlayController; +import com.genersoft.iot.vmp.vmanager.gb28181.play.bean.PlayResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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; @@ -34,15 +36,13 @@ private IVideoManagerStorager storager; @Autowired - private IRedisCatchStorage redisCatchStorage; - - - // @Autowired - // private ZLMRESTfulUtils zlmresTfulUtils; - + private UserSetup userSetup; @Autowired - private PlayController playController; + private IRedisCatchStorage redisCatchStorage; + + @Autowired + private IPlayService playService; /** * 瀹炴椂鐩存挱 - 寮�濮嬬洿鎾� @@ -69,7 +69,7 @@ @RequestParam(required = false)String timeout ){ - DeferredResult<JSONObject> resultDeferredResult = new DeferredResult<JSONObject>(); + DeferredResult<JSONObject> resultDeferredResult = new DeferredResult<>(userSetup.getPlayTimeout() + 10); Device device = storager.queryVideoDevice(serial); if (device == null ) { JSONObject result = new JSONObject(); @@ -99,11 +99,9 @@ result.put("error","channel[ " + code + " ]offline"); resultDeferredResult.setResult(result); } - DeferredResult<ResponseEntity<String>> play = playController.play(serial, code); - - play.setResultHandler((Object o)->{ - ResponseEntity<String> responseEntity = (ResponseEntity)o; - StreamInfo streamInfo = JSON.parseObject(responseEntity.getBody(), StreamInfo.class); + MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device); + PlayResult play = playService.play(newMediaServerItem, serial, code, (mediaServerItem, response)->{ + StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(serial, code); JSONObject result = new JSONObject(); result.put("StreamID", streamInfo.getStreamId()); result.put("DeviceID", device.getDeviceId()); @@ -134,7 +132,23 @@ result.put("NumOutputs", ""); result.put("CascadeSize", ""); result.put("RelaySize", ""); - result.put("ChannelPTZType", 0); + result.put("ChannelPTZType", "0"); + resultDeferredResult.setResult(result); +// Class<?> aClass = responseEntity.getClass().getSuperclass(); +// Field body = null; +// try { +// // 浣跨敤鍙嶅皠鍔ㄦ�佷慨鏀硅繑鍥炵殑body +// body = aClass.getDeclaredField("body"); +// body.setAccessible(true); +// body.set(responseEntity, result); +// } catch (NoSuchFieldException e) { +// e.printStackTrace(); +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } + }, (eventResult) -> { + JSONObject result = new JSONObject(); + result.put("error", "channel[ " + code + " ] " + eventResult.msg); resultDeferredResult.setResult(result); }); return resultDeferredResult; -- Gitblit v1.8.0