From 76817b8c752b12030ab285bcb5b2effebfa9a248 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 26 八月 2023 17:29:14 +0800
Subject: [PATCH] 流媒体增加webrtc和rtmp协议推拉流

---
 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java |  157 ++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 115 insertions(+), 42 deletions(-)

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 578291c..090961e 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
@@ -130,9 +130,7 @@
         if (matcher.find()) {
             info.setRtspSource(matcher.group());
             info.setIsCode("1");
-        }
-        else
-        {
+        } else {
             info.setRtspSource(item.getConf().getSource());
             info.setIsCode("0");
         }
@@ -212,6 +210,20 @@
     }
 
     @Override
+    public WebrtcSession getWebrtcSessionById(String sessionId) {
+        String list = mediaClient.getWebrtcsessionById(sessionId);
+        WebrtcSession webrtcSession = JSONObject.parseObject(list, WebrtcSession.class);
+        return webrtcSession;
+    }
+
+    @Override
+    public RtmpSession getRtmpSessionById(String sessionId) {
+        String list = mediaClient.getRtmpsessionById(sessionId);
+        RtmpSession rtmpSession = JSONObject.parseObject(list, RtmpSession.class);
+        return rtmpSession;
+    }
+
+    @Override
     public List<RtspSession> getPushStreams() {
         List<RtspSession> rtspSessions = new ArrayList<>();
 
@@ -255,11 +267,17 @@
             //ID
             String name = item.getName();
             info.setName(name);
+            //RTMP鎾斁鍦板潃
+            String rtmpUrl = "rtmp://" + mediamtxHost + ":1935/" + name;
+            info.setRtmpUrl(rtmpUrl);
             //RTSP鎾斁鍦板潃
             String rtspUrl = "rtsp://" + mediamtxHost + ":7554/" + name;
             info.setRtspUrl(rtspUrl);
+            //WEBRTC鎾斁鍦板潃
+            String webrtcUrl = "http://" + mediamtxHost + ":8889/" + name;
+            info.setWebrtcUrl(webrtcUrl);
             Source source = item.getSource();
-            if (source==null||source.getId().equals("")) {
+            if (source == null || source.getId().equals("")) {
                 //浼氳瘽ID
                 info.setId("0");
                 //涓婅娴侀噺
@@ -296,18 +314,10 @@
             Matcher matcher = pattern.matcher(runoninit);
             if (matcher.find()) {
                 info.setRtspSource(matcher.group());
-            }
-            else
-            {
+            } else {
                 info.setRtspSource(item.getConf().getSource());
             }
             //浼犺緭鍗忚
-//            regex = "-rtsp_transport\\s+(\\w+)";
-//            pattern = Pattern.compile(regex);
-//            matcher = pattern.matcher(runoninit);
-//            if (matcher.find()) {
-//                info.setProtocol(matcher.group(1));
-//            }
             info.setProtocol(item.getConf().getSourceprotocol());
             //鎷夋祦鏁伴噺
             List<Readers> readers = item.getReaders();
@@ -332,38 +342,81 @@
                 //ID
                 String name = item.getName();
                 info.setName(name);
-                //RTSP鎾斁鍦板潃
-                String rtspUrl = "rtsp://" + mediamtxHost + ":8554/" + name;
-                info.setRtspUrl(rtspUrl);
-                RtspSession rtspSession = getRtspSessionById(reader.getId());
-                //浼氳瘽ID
-                info.setId(rtspSession.getId());
-                //寮�濮嬫媺娴佹椂闂�
-                info.setBeginTime(rtspSession.getCreated());
-                //涓婅娴侀噺
-                long bytesReceived = rtspSession.getBytesReceived();
-                String formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
-                info.setUpTraffic(formatReceivedSize);
-                //涓嬭娴侀噺
-                long bytesSent = rtspSession.getBytesSent();
-                String formatSentSize = ArdTool.formatFileSize(bytesSent);
-                info.setDownTraffic(formatSentSize);
-
                 //浼犺緭鍗忚
-//                String runoninit = item.getConf().getRunondemand();
-//                String regex = "-rtsp_transport\\s+(\\w+)";
-//                Pattern pattern = Pattern.compile(regex);
-//                Matcher matcher = pattern.matcher(runoninit);
-//                if (matcher.find()) {
-//                    info.setProtocol(matcher.group(1));
-//                }
                 info.setProtocol(item.getConf().getSourceprotocol());
-                //鎷夋祦鏈嶅姟鍣�
-                info.setRemoteAddr(rtspSession.getRemoteAddr());
-                PullStreamInfoList.add(info);
+
+                String type = reader.getType();
+                switch (type) {
+                    case "rtmpConn":
+                        info.setSessionType("rtmp");
+                        //webrtc鎾斁鍦板潃
+                        String url = "rtmp://" + mediamtxHost + ":1935/" + name;
+                        info.setRtspUrl(url);
+                        RtmpSession rtmpSession = getRtmpSessionById(reader.getId());
+                        //浼氳瘽ID
+                        info.setId(rtmpSession.getId());
+                        //寮�濮嬫媺娴佹椂闂�
+                        info.setBeginTime(rtmpSession.getCreated());
+                        //涓婅娴侀噺
+                        long bytesReceived = rtmpSession.getBytesReceived();
+                        String formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
+                        info.setUpTraffic(formatReceivedSize);
+                        //涓嬭娴侀噺
+                        long bytesSent = rtmpSession.getBytesSent();
+                        String formatSentSize = ArdTool.formatFileSize(bytesSent);
+                        info.setDownTraffic(formatSentSize);
+                        //鎷夋祦鏈嶅姟鍣�
+                        info.setRemoteAddr(rtmpSession.getRemoteAddr());
+                        PullStreamInfoList.add(info);
+                        break;
+                    case "webRTCSession":
+                        info.setSessionType("webrtc");
+                        //webrtc鎾斁鍦板潃
+                        url = "http://" + mediamtxHost + ":8889/" + name;
+                        info.setRtspUrl(url);
+                        WebrtcSession webrtcSession = getWebrtcSessionById(reader.getId());
+                        //浼氳瘽ID
+                        info.setId(webrtcSession.getId());
+                        //寮�濮嬫媺娴佹椂闂�
+                        info.setBeginTime(webrtcSession.getCreated());
+                        //涓婅娴侀噺
+                         bytesReceived = webrtcSession.getBytesReceived();
+                         formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
+                        info.setUpTraffic(formatReceivedSize);
+                        //涓嬭娴侀噺
+                         bytesSent = webrtcSession.getBytesSent();
+                         formatSentSize = ArdTool.formatFileSize(bytesSent);
+                        info.setDownTraffic(formatSentSize);
+                        //鎷夋祦鏈嶅姟鍣�
+                        info.setRemoteAddr(webrtcSession.getRemoteAddr());
+                        PullStreamInfoList.add(info);
+                        break;
+                    case "rtspSession":
+                        info.setSessionType("rtsp");
+                        //RTSP鎾斁鍦板潃
+                        String rtspUrl = "rtsp://" + mediamtxHost + ":8554/" + name;
+                        info.setRtspUrl(rtspUrl);
+                        RtspSession rtspSession = getRtspSessionById(reader.getId());
+                        //浼氳瘽ID
+                        info.setId(rtspSession.getId());
+                        //寮�濮嬫媺娴佹椂闂�
+                        info.setBeginTime(rtspSession.getCreated());
+                        //涓婅娴侀噺
+                        bytesReceived = rtspSession.getBytesReceived();
+                        formatReceivedSize = ArdTool.formatFileSize(bytesReceived);
+                        info.setUpTraffic(formatReceivedSize);
+                        //涓嬭娴侀噺
+                        bytesSent = rtspSession.getBytesSent();
+                        formatSentSize = ArdTool.formatFileSize(bytesSent);
+                        info.setDownTraffic(formatSentSize);
+                        //鎷夋祦鏈嶅姟鍣�
+                        info.setRemoteAddr(rtspSession.getRemoteAddr());
+                        PullStreamInfoList.add(info);
+                        break;
+                }
             }
         }
-        Comparator<StreamInfo> comparator = Comparator.comparing(streamInfo ->streamInfo.getBeginTime() ); // 浣跨敤Collections.sort鏂规硶杩涜鎺掑簭 Collections.sort(personList, comparator);
+        Comparator<StreamInfo> comparator = Comparator.comparing(streamInfo -> streamInfo.getBeginTime()); // 浣跨敤Collections.sort鏂规硶杩涜鎺掑簭 Collections.sort(personList, comparator);
         Collections.sort(PullStreamInfoList, comparator.reversed());
         return PullStreamInfoList;
     }
@@ -371,7 +424,27 @@
     @Override
     public Boolean kickRtspSession(String sessionId) {
         try {
-            mediaClient.kick(sessionId);
+            mediaClient.kickRtspSessions(sessionId);
+            return true;
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+    @Override
+    public Boolean kickRtmpSession(String sessionId) {
+        try {
+            mediaClient.kickRtmpSessions(sessionId);
+            return true;
+        } catch (Exception ex) {
+            return false;
+        }
+    }
+
+    @Override
+    public Boolean kickWebrtcSession(String sessionId) {
+        try {
+            mediaClient.kickWebrtcSessions(sessionId);
             return true;
         } catch (Exception ex) {
             return false;

--
Gitblit v1.9.3