Commit 676a722241116fd53e9f6063484a966dcabe5b48

Authored by 648540858
1 parent 91e49745

修复心跳异常,支持通道列表,推流列表,拉流代理列表直接查看对应的云端录像,兼容大于INT的ssrc的格式化

src/main/java/com/genersoft/iot/vmp/vmanager/bean/PageInfo.java 0 → 100755
  1 +package com.genersoft.iot.vmp.vmanager.bean;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.List;
  5 +
  6 +public class PageInfo<T> {
  7 + //当前页
  8 + private int pageNum;
  9 + //每页的数量
  10 + private int pageSize;
  11 + //当前页的数量
  12 + private int size;
  13 + //总页数
  14 + private int pages;
  15 + //总数
  16 + private int total;
  17 +
  18 + private List<T> resultData;
  19 +
  20 + private List<T> list;
  21 +
  22 + public PageInfo(List<T> resultData) {
  23 + this.resultData = resultData;
  24 + }
  25 +
  26 + public PageInfo() {
  27 + }
  28 +
  29 + public void startPage(int page, int count) {
  30 + if (count <= 0) count = 10;
  31 + if (page <= 0) page = 1;
  32 + this.pageNum = page;
  33 + this.pageSize = count;
  34 + this.total = resultData.size();
  35 +
  36 + this.pages = total % count == 0 ? total / count : total / count + 1;
  37 + int fromIndx = (page - 1) * count;
  38 + if (fromIndx > this.total - 1) {
  39 + this.list = new ArrayList<>();
  40 + this.size = 0;
  41 + return;
  42 + }
  43 +
  44 + int toIndx = page * count;
  45 + if (toIndx > this.total) {
  46 + toIndx = this.total;
  47 + }
  48 + this.list = this.resultData.subList(fromIndx, toIndx);
  49 + this.size = this.list.size();
  50 + }
  51 +
  52 + public int getPageNum() {
  53 + return pageNum;
  54 + }
  55 +
  56 + public void setPageNum(int pageNum) {
  57 + this.pageNum = pageNum;
  58 + }
  59 +
  60 + public int getPageSize() {
  61 + return pageSize;
  62 + }
  63 +
  64 + public void setPageSize(int pageSize) {
  65 + this.pageSize = pageSize;
  66 + }
  67 +
  68 + public int getSize() {
  69 + return size;
  70 + }
  71 +
  72 + public void setSize(int size) {
  73 + this.size = size;
  74 + }
  75 +
  76 + public int getPages() {
  77 + return pages;
  78 + }
  79 +
  80 + public void setPages(int pages) {
  81 + this.pages = pages;
  82 + }
  83 +
  84 + public int getTotal() {
  85 + return total;
  86 + }
  87 +
  88 + public void setTotal(int total) {
  89 + this.total = total;
  90 + }
  91 +
  92 + public List<T> getList() {
  93 + return list;
  94 + }
  95 +
  96 + public void setList(List<T> list) {
  97 + this.list = list;
  98 + }
  99 +}
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/bean/RecordFile.java 0 → 100755
  1 +package com.genersoft.iot.vmp.vmanager.bean;
  2 +
  3 +public class RecordFile {
  4 + private String app;
  5 + private String stream;
  6 +
  7 + private String fileName;
  8 +
  9 + private String mediaServerId;
  10 +
  11 + private String date;
  12 +
  13 +
  14 + public String getApp() {
  15 + return app;
  16 + }
  17 +
  18 + public void setApp(String app) {
  19 + this.app = app;
  20 + }
  21 +
  22 + public String getStream() {
  23 + return stream;
  24 + }
  25 +
  26 + public void setStream(String stream) {
  27 + this.stream = stream;
  28 + }
  29 +
  30 + public String getFileName() {
  31 + return fileName;
  32 + }
  33 +
  34 + public void setFileName(String fileName) {
  35 + this.fileName = fileName;
  36 + }
  37 +
  38 + public String getMediaServerId() {
  39 + return mediaServerId;
  40 + }
  41 +
  42 + public void setMediaServerId(String mediaServerId) {
  43 + this.mediaServerId = mediaServerId;
  44 + }
  45 +
  46 + public String getDate() {
  47 + return date;
  48 + }
  49 +
  50 + public void setDate(String date) {
  51 + this.date = date;
  52 + }
  53 +}
... ...
src/main/java/com/genersoft/iot/vmp/vmanager/cloudRecord/CloudRecordController.java 0 → 100755
  1 +package com.genersoft.iot.vmp.vmanager.cloudRecord;
  2 +
  3 +import com.genersoft.iot.vmp.conf.DynamicTask;
  4 +import com.genersoft.iot.vmp.conf.UserSetting;
  5 +import com.genersoft.iot.vmp.conf.exception.ControllerException;
  6 +import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager;
  7 +import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory;
  8 +import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
  9 +import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
  10 +import com.genersoft.iot.vmp.service.IMediaServerService;
  11 +import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
  12 +import com.genersoft.iot.vmp.vmanager.bean.PageInfo;
  13 +import com.genersoft.iot.vmp.vmanager.bean.RecordFile;
  14 +import io.swagger.v3.oas.annotations.Operation;
  15 +import io.swagger.v3.oas.annotations.Parameter;
  16 +import io.swagger.v3.oas.annotations.tags.Tag;
  17 +import org.apache.commons.lang3.ObjectUtils;
  18 +import org.slf4j.Logger;
  19 +import org.slf4j.LoggerFactory;
  20 +import org.springframework.beans.factory.annotation.Autowired;
  21 +import org.springframework.data.redis.core.RedisTemplate;
  22 +import org.springframework.web.bind.annotation.*;
  23 +
  24 +import java.util.ArrayList;
  25 +import java.util.Calendar;
  26 +import java.util.List;
  27 +
  28 +@SuppressWarnings("rawtypes")
  29 +@Tag(name = "云端录像接口")
  30 +
  31 +@RestController
  32 +@RequestMapping("/api/cloud/record")
  33 +public class CloudRecordController {
  34 +
  35 + @Autowired
  36 + private ZLMServerFactory zlmServerFactory;
  37 +
  38 + @Autowired
  39 + private SendRtpPortManager sendRtpPortManager;
  40 +
  41 + private final static Logger logger = LoggerFactory.getLogger(CloudRecordController.class);
  42 +
  43 + @Autowired
  44 + private ZlmHttpHookSubscribe hookSubscribe;
  45 +
  46 + @Autowired
  47 + private IMediaServerService mediaServerService;
  48 +
  49 + @Autowired
  50 + private UserSetting userSetting;
  51 +
  52 + @Autowired
  53 + private DynamicTask dynamicTask;
  54 +
  55 + @Autowired
  56 + private RedisTemplate<Object, Object> redisTemplate;
  57 +
  58 + @ResponseBody
  59 + @GetMapping("/date/list")
  60 + @Operation(summary = "查询存在云端录像的日期")
  61 + @Parameter(name = "app", description = "应用名", required = true)
  62 + @Parameter(name = "stream", description = "流ID", required = true)
  63 + @Parameter(name = "year", description = "年,置空则查询当年", required = false)
  64 + @Parameter(name = "month", description = "月,置空则查询当月", required = false)
  65 + @Parameter(name = "mediaServerId", description = "流媒体ID,置空则查询全部", required = false)
  66 + public List<String> openRtpServer(
  67 + @RequestParam String app,
  68 + @RequestParam String stream,
  69 + @RequestParam(required = false) int year,
  70 + @RequestParam(required = false) int month,
  71 + @RequestParam(required = false) String mediaServerId
  72 +
  73 + ) {
  74 + logger.info("[云端录像] 查询存在云端录像的日期 app->{}, stream->{}, mediaServerId->{}, year->{}, month->{}",
  75 + app, stream, mediaServerId, year, month);
  76 + Calendar calendar = Calendar.getInstance();
  77 + if (ObjectUtils.isEmpty(year)) {
  78 + year = calendar.get(Calendar.YEAR);
  79 + }
  80 + if (ObjectUtils.isEmpty(month)) {
  81 + month = calendar.get(Calendar.MONTH) + 1;
  82 + }
  83 + List<MediaServerItem> mediaServerItems;
  84 + if (!ObjectUtils.isEmpty(mediaServerId)) {
  85 + mediaServerItems = new ArrayList<>();
  86 + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
  87 + if (mediaServerItem == null) {
  88 + throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到流媒体: " + mediaServerId);
  89 + }
  90 + mediaServerItems.add(mediaServerItem);
  91 + } else {
  92 + mediaServerItems = mediaServerService.getAll();
  93 + }
  94 + if (mediaServerItems.isEmpty()) {
  95 + return new ArrayList<>();
  96 + }
  97 +
  98 + return mediaServerService.getRecordDates(app, stream, year, month, mediaServerItems);
  99 + }
  100 +
  101 + @ResponseBody
  102 + @GetMapping("/list")
  103 + @Operation(summary = "分页查询云端录像")
  104 + @Parameter(name = "app", description = "应用名", required = true)
  105 + @Parameter(name = "stream", description = "流ID", required = true)
  106 + @Parameter(name = "page", description = "当前页", required = false)
  107 + @Parameter(name = "count", description = "每页查询数量", required = false)
  108 + @Parameter(name = "startTime", description = "开始时间(yyyy-MM-dd HH:mm:ss)", required = true)
  109 + @Parameter(name = "endTime", description = "结束时间(yyyy-MM-dd HH:mm:ss)", required = true)
  110 + @Parameter(name = "mediaServerId", description = "流媒体ID,置空则查询全部流媒体", required = false)
  111 + public PageInfo<RecordFile> openRtpServer(
  112 + @RequestParam String app,
  113 + @RequestParam String stream,
  114 + @RequestParam int page,
  115 + @RequestParam int count,
  116 + @RequestParam String startTime,
  117 + @RequestParam String endTime,
  118 + @RequestParam(required = false) String mediaServerId
  119 +
  120 + ) {
  121 + logger.info("[云端录像] 查询 app->{}, stream->{}, mediaServerId->{}, page->{}, count->{}, startTime->{}, endTime->{}",
  122 + app, stream, mediaServerId, page, count, startTime, endTime);
  123 +
  124 + List<MediaServerItem> mediaServerItems;
  125 + if (!ObjectUtils.isEmpty(mediaServerId)) {
  126 + mediaServerItems = new ArrayList<>();
  127 + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
  128 + if (mediaServerItem == null) {
  129 + throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到流媒体: " + mediaServerId);
  130 + }
  131 + mediaServerItems.add(mediaServerItem);
  132 + } else {
  133 + mediaServerItems = mediaServerService.getAll();
  134 + }
  135 + if (mediaServerItems.isEmpty()) {
  136 + return new PageInfo<>();
  137 + }
  138 + List<RecordFile> records = mediaServerService.getRecords(app, stream, startTime, endTime, mediaServerItems);
  139 + PageInfo<RecordFile> pageInfo = new PageInfo<>(records);
  140 + pageInfo.startPage(page, count);
  141 + return pageInfo;
  142 + }
  143 +
  144 +
  145 +}
... ...