From 653471f1df709ade123006b662d81fc33d84ea9c Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期五, 14 七月 2023 17:27:22 +0800
Subject: [PATCH] 优化流媒体编解码业务
---
ard-work/src/main/java/com/ruoyi/media/domain/Items.java | 16 +++++++-
ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java | 22 ++++++++---
ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java | 5 +-
ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java | 34 +++++++++++++++--
ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java | 5 ++
ard-work/src/main/java/com/ruoyi/media/domain/MediaInfo.java | 4 +-
ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java | 34 ++++++++++++-----
7 files changed, 93 insertions(+), 27 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java b/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
index 83bdeea..910cd71 100644
--- a/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
+++ b/ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
@@ -32,19 +32,29 @@
@PostMapping("/add")
@ApiOperation("澧炲姞杞爜")
public AjaxResult addPath(@RequestBody MediaInfo mediaInfo) {
- String rtsp = mediaService.addPath(mediaInfo.getName(), mediaInfo.getRtspPath());
+ String rtsp = mediaService.addPath(mediaInfo.getCameraId(), mediaInfo.getRtspPath());
return AjaxResult.success(rtsp);
}
@PostMapping("/remove")
@ApiOperation("绉婚櫎杞爜")
- @ApiOperationSupport(includeParameters={"mediaInfo.name"})
+ @ApiOperationSupport(includeParameters={"mediaInfo.cameraId"})
public AjaxResult removePath(@RequestBody MediaInfo mediaInfo) {
- mediaService.removePath(mediaInfo.getName());
+ mediaService.removePath(mediaInfo.getCameraId());
return AjaxResult.success();
}
- @GetMapping("/getList")
+ @GetMapping("/getPaths")
@ApiOperation("鑾峰彇褰撳墠杞爜鍒楄〃")
- public AjaxResult getList() {
- return AjaxResult.success(mediaService.list());
+ public AjaxResult getPaths() {
+ return AjaxResult.success(mediaService.paths());
+ }
+ @GetMapping("/getRtspSessions")
+ @ApiOperation("鑾峰彇rtsp浼氳瘽鍒楄〃")
+ public AjaxResult getRtspSessions() {
+ return AjaxResult.success(mediaService.rtspsessions());
+ }
+ @GetMapping("/getRtspConns")
+ @ApiOperation("鑾峰彇rtsp杩炴帴鍒楄〃")
+ public AjaxResult getRtspConns() {
+ return AjaxResult.success(mediaService.rtspconns());
}
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/Items.java b/ard-work/src/main/java/com/ruoyi/media/domain/Items.java
index bb933cd..96b5c2e 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/Items.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/Items.java
@@ -1,8 +1,10 @@
package com.ruoyi.media.domain;
+import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
+import java.util.Date;
import java.util.List;
/**
@@ -13,11 +15,21 @@
* @Version: 1.0
**/
@Data
+@JsonInclude(value = JsonInclude.Include.NON_NULL)
public class Items {
private String name;
- private String confname;
+ private String confName;
private Conf conf;
private Source source;
- private boolean sourceready;
+ private boolean sourceReady;
private List<String> tracks;
+
+
+ private String id;
+ private Date created;
+ private String remoteAddr;
+ private String state;
+ private long bytesReceived;
+ private long bytesSent;
+
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java b/ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java
index 0c8808d..08fb974 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/JsonsRoot.java
@@ -1,5 +1,6 @@
package com.ruoyi.media.domain;
+import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.util.List;
@@ -14,9 +15,9 @@
@Data
public class JsonsRoot {
- private int itemcount;
+ private int itemCount;
- private int pagecount;
+ private int pageCount;
private List<Items> items;
diff --git a/ard-work/src/main/java/com/ruoyi/media/domain/MediaInfo.java b/ard-work/src/main/java/com/ruoyi/media/domain/MediaInfo.java
index 8def810..6f06f1e 100644
--- a/ard-work/src/main/java/com/ruoyi/media/domain/MediaInfo.java
+++ b/ard-work/src/main/java/com/ruoyi/media/domain/MediaInfo.java
@@ -3,7 +3,7 @@
import lombok.Data;
/**
- * @Description:
+ * @Description: 娴佸獟浣撲俊鎭疄浣�
* @ClassName: MediaInfo
* @Author: 鍒樿嫃涔�
* @Date: 2023骞�07鏈�13鏃�10:11
@@ -11,6 +11,6 @@
**/
@Data
public class MediaInfo {
- String name;
+ String cameraId;
String rtspPath;
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
index b23fff6..37ac942 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/IMediaService.java
@@ -1,10 +1,13 @@
package com.ruoyi.media.service;
import com.ruoyi.media.domain.Items;
+
import java.util.List;
public interface IMediaService {
public String addPath(String name, String rtspPath);
public void removePath(String name);
- public List<Items>list();
+ public List<Items>paths();
+ public List<Items> rtspconns();
+ public List<Items> rtspsessions();
}
diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
index b360b82..73a8650 100644
--- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
+++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java
@@ -1,9 +1,7 @@
package com.ruoyi.media.service.impl;
import com.alibaba.fastjson2.JSONObject;
-import com.ruoyi.media.domain.Conf;
-import com.ruoyi.media.domain.Items;
-import com.ruoyi.media.domain.JsonsRoot;
+import com.ruoyi.media.domain.*;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.utils.forest.MediaClient;
import org.springframework.beans.factory.annotation.Value;
@@ -41,25 +39,41 @@
// -i //鐢ㄤ簬鎸囧畾杈撳叆濯掍綋鏂囦欢鎴栬緭鍏ユ祦鐨勫湴鍧�
//-f rtsp //杩欎釜閫夐」鍛婅瘔 FFmpeg 杈撳嚭涓� RTSP 鏍煎紡銆�
//CPU杞В鐮佺紪鐮�
- //String cmd = "ffmpeg -rtsp_transport udp -i \"" + rtspPath + "\" -vcodec libx264 -preset:v veryfast -r 25 -threads 4 -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
- //GPU纭В鐮佺紪鐮�
- String cmd = "ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport udp -i \"" + rtspPath + "\" -c:v h264_nvenc -r 25 -threads 4 -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
+ String cmd = "ffmpeg -rtsp_transport tcp -i \"" + rtspPath + "\" -vcodec libx264 -preset:v ultrafast -r 25 -threads 4 -b:v 4096k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
+ //GPU纭В鐮佺紪鐮� -hwaccel cuvid -c:v h264_cuvid 浣跨敤cuda瑙g爜 -c:v h264_nvenc 浣跨敤cuda缂栫爜
+ //String cmd = "ffmpeg -hwaccel cuvid -c:v h264_cuvid -rtsp_transport udp -i \"" + rtspPath + "\" -c:v h264_nvenc -r 25 -threads 4 -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH";
mediaInfo.setRunoninit(cmd);
mediaInfo.setRunoninitrestart(true);
- mediaClient.add(apiUrl, name, mediaInfo);
+ mediaClient.addPath(apiUrl, name, mediaInfo);
return rtspUrl + name;
}
@Override
public void removePath(String name) {
String apiUrl="http://"+mediamtxHost+":9997/v2";
- mediaClient.remove(apiUrl, name);
+ mediaClient.removePath(apiUrl, name);
}
@Override
- public List<Items> list() {
+ public List<Items> paths() {
String apiUrl="http://"+mediamtxHost+":9997/v2";
- String list = mediaClient.list(apiUrl);
+ String list = mediaClient.paths(apiUrl);
+ JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
+ return jsonsRoot.getItems();
+ }
+
+ @Override
+ public List<Items> rtspconns() {
+ String apiUrl="http://"+mediamtxHost+":9997/v2";
+ String list = mediaClient.rtspconns(apiUrl);
+ JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
+ return jsonsRoot.getItems();
+ }
+
+ @Override
+ public List<Items> rtspsessions() {
+ String apiUrl="http://"+mediamtxHost+":9997/v2";
+ String list = mediaClient.rtspsessions(apiUrl);
JsonsRoot jsonsRoot = JSONObject.parseObject(list, JsonsRoot.class);
return jsonsRoot.getItems();
}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java b/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
index 0f8adfc..d0a9725 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
+++ b/ard-work/src/main/java/com/ruoyi/utils/forest/MediaClient.java
@@ -14,13 +14,39 @@
* @Version: 1.0
**/
public interface MediaClient {
-
+ /**
+ * 澧炲姞璺緞
+ */
@Post("{apiUrl}/config/paths/add/{name}")
- String add(@Var("apiUrl") String apiUrl,@Var("name") String name, @JSONBody Conf body);
+ String addPath(@Var("apiUrl") String apiUrl, @Var("name") String name, @JSONBody Conf body);
+ /**
+ * 绉婚櫎璺緞
+ */
@Post("{apiUrl}/config/paths/remove/{name}")
- String remove(@Var("apiUrl") String apiUrl,@Var("name") String name);
+ String removePath(@Var("apiUrl") String apiUrl, @Var("name") String name);
+ /**
+ * 鏌ヨ鎵�鏈夎矾寰�
+ */
@Get("{apiUrl}/paths/list")
- String list(@Var("apiUrl") String apiUrl);
+ String paths(@Var("apiUrl") String apiUrl);
+
+ /**
+ * 鏌ヨ鎵�鏈塺tsp浼氳瘽
+ */
+ @Get("{apiUrl}/rtspsessions/list")
+ String rtspsessions(@Var("apiUrl") String apiUrl);
+
+ /**
+ * 鏌ヨ鎵�鏈塺tsp杩炴帴
+ */
+ @Get("{apiUrl}/rtspconns/list")
+ String rtspconns(@Var("apiUrl") String apiUrl);
+
+ /**
+ * 鎸塱d鏌ヨrtsp浼氳瘽
+ */
+ @Get("{apiUrl}/rtspsessions/get/{id}")
+ String rtspsessionsById(@Var("apiUrl") String apiUrl, @Var("id") String id);
}
--
Gitblit v1.9.3