添加云端录像功能

This commit is contained in:
64850858
2021-06-01 17:05:07 +08:00
parent d881cd7eb3
commit ad93be12fb
34 changed files with 16251 additions and 690 deletions

View File

@@ -26,9 +26,9 @@ import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
@CrossOrigin
@RestController
@RequestMapping("/api/gb_record")
public class RecordController {
public class GBRecordController {
private final static Logger logger = LoggerFactory.getLogger(RecordController.class);
private final static Logger logger = LoggerFactory.getLogger(GBRecordController.class);
@Autowired
private SIPCommander cmder;

View File

@@ -0,0 +1,68 @@
package com.genersoft.iot.vmp.vmanager.record;
import com.genersoft.iot.vmp.conf.MediaConfig;
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.URLDecoder;
@RestController
@RequestMapping("/record_proxy")
public class RecoderProxyController {
// private final static Logger logger = LoggerFactory.getLogger(ZLMHTTPProxyController.class);
@Autowired
private IRedisCatchStorage redisCatchStorage;
@Autowired
private MediaConfig mediaConfig;
@ResponseBody
@RequestMapping(value = "/**/**/**", produces = "application/json;charset=UTF-8")
public Object proxy(HttpServletRequest request, HttpServletResponse response){
String baseRequestURI = request.getRequestURI();
String[] split = baseRequestURI.split("/");
if (split.length <= 2) {
response.setStatus(HttpStatus.NOT_FOUND.value());
return null;
}
String mediaId = split[2];
if (StringUtils.isEmpty(mediaId)){
response.setStatus(HttpStatus.BAD_REQUEST.value());
return null;
}
// 后续改为根据Id获取对应的ZLM
ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
String requestURI = String.format("http://%s:%s%s?%s",
mediaInfo.getLocalIP(),
mediaConfig.getRecordAssistPort(),
baseRequestURI.substring(baseRequestURI.indexOf(mediaId) + mediaId.length()),
URLDecoder.decode(request.getQueryString())
);
// 发送请求
RestTemplate restTemplate = new RestTemplate();
//将指定的url返回的参数自动封装到自定义好的对应类对象中
Object result = null;
try {
result = restTemplate.getForObject(requestURI,Object.class);
}catch (HttpClientErrorException httpClientErrorException) {
response.setStatus(httpClientErrorException.getStatusCode().value());
}
return result;
}
}

View File

@@ -0,0 +1,51 @@
//package com.genersoft.iot.vmp.vmanager.record;
//
//import com.alibaba.fastjson.JSONObject;
//import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem;
//import com.genersoft.iot.vmp.service.IRecordInfoServer;
//import com.genersoft.iot.vmp.storager.dao.dto.RecordInfo;
//import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
//import com.github.pagehelper.PageInfo;
//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.web.bind.annotation.*;
//
//@Api(tags = "云端录像")
//@CrossOrigin
//@RestController
//@RequestMapping("/api/record")
//public class RecordController {
//
// @Autowired
// private IRecordInfoServer recordInfoServer;
//
// @ApiOperation("录像列表查询")
// @ApiImplicitParams({
// @ApiImplicitParam(name="page", value = "当前页", required = true, dataTypeClass = Integer.class),
// @ApiImplicitParam(name="count", value = "每页查询数量", required = true, dataTypeClass = Integer.class),
// @ApiImplicitParam(name="query", value = "查询内容", dataTypeClass = String.class),
// })
// @GetMapping(value = "/app/list")
// @ResponseBody
// public Object list(@RequestParam(required = false)Integer page,
// @RequestParam(required = false)Integer count ){
//
// PageInfo<RecordInfo> recordList = recordInfoServer.getRecordList(page - 1, page - 1 + count);
// return recordList;
// }
//
// @ApiOperation("获取录像详情")
// @ApiImplicitParams({
// @ApiImplicitParam(name="recordInfo", value = "录像记录", required = true, dataTypeClass = RecordInfo.class)
// })
// @GetMapping(value = "/detail")
// @ResponseBody
// public JSONObject list(RecordInfo recordInfo, String time ){
//
//
// return null;
// }
//}

View File

@@ -1,6 +1,9 @@
package com.genersoft.iot.vmp.vmanager.server;
import com.genersoft.iot.vmp.VManageBootstrap;
import com.genersoft.iot.vmp.media.zlm.ZLMServerConfig;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.impl.RedisCatchStorageImpl;
import com.genersoft.iot.vmp.utils.SpringBeanFactory;
import gov.nist.javax.sip.SipStackImpl;
import io.swagger.annotations.Api;
@@ -12,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
import javax.sip.ListeningPoint;
import javax.sip.ObjectInUseException;
import javax.sip.SipProvider;
import java.util.ArrayList;
import java.util.Iterator;
@SuppressWarnings("rawtypes")
@@ -24,6 +28,20 @@ public class ServerController {
@Autowired
private ConfigurableApplicationContext context;
@Autowired
private IRedisCatchStorage redisCatchStorage;
@ApiOperation("流媒体服务列表")
@GetMapping(value = "/media_server/list")
@ResponseBody
public Object getMediaServerList(){
// TODO 为后续多个zlm支持准备
ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
ArrayList<ZLMServerConfig> result = new ArrayList<>();
result.add(mediaInfo);
return result;
}
@ApiOperation("重启服务")
@GetMapping(value = "/restart")