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