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