From 9e1c6de09a1c078e02d267c980d0ee49003016ee Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Thu, 27 Nov 2025 11:46:20 +0800
Subject: [PATCH] 流媒体增加rtsp/rtmp/webrtc端口自定义
---
ard-vtdu/src/main/java/com/ard/vtdu/config/MediamtxConfig.java | 3 +
ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java | 27 +++++++++----
ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdArdMediaServiceImpl.java | 25 ++++++++----
ard-sample/src/main/java/com/ard/sample/manage/service/impl/LiveStreamServiceImpl.java | 20 +++++++---
4 files changed, 51 insertions(+), 24 deletions(-)
diff --git a/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java b/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
index 9a46d7f..2c9f997 100644
--- a/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
+++ b/ard-device/src/main/java/com/ard/device/channel/service/impl/ArdChannelServiceImpl.java
@@ -13,6 +13,7 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
+
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@@ -34,6 +35,7 @@
private IArdVtduService ardVtduService;
@Resource
private MediamtxConfig mediamtxConfig;
+
/**
* 查询通道管理
*
@@ -105,12 +107,13 @@
* 清空通道
*
* @author 刘苏义
- * @date 2024/8/10 11:18
+ * @date 2024/8/10 11:18
*/
@Override
- public int clearArdChannel(){
+ public int clearArdChannel() {
return ardChannelMapper.clearArdChannel();
}
+
/**
* 删除通道管理信息
*
@@ -121,6 +124,7 @@
public int deleteArdChannelByDeviceId(String deviceId) {
return ardChannelMapper.deleteArdChannelByDeviceId(deviceId);
}
+
/**
* 校验相机通道是否唯一
*
@@ -130,8 +134,7 @@
@Override
public boolean checkArdChannelUnique(ArdChannel channel) {
ArdChannel info = ardChannelMapper.checkArdChannelUnique(channel);
- if (info != null && !Objects.equals(info.getId(), channel.getId()))
- {
+ if (info != null && !Objects.equals(info.getId(), channel.getId())) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
@@ -143,7 +146,7 @@
log.debug("定时同步Vtdu任务");
List<ArdChannel> channels = this.selectArdChannelList(new ArdChannel());
if (channels == null || channels.isEmpty()) {
- // log.warn("没有获取到通道数据,退出同步");
+ // log.warn("没有获取到通道数据,退出同步");
return;
}
List<ArdVtdu> ardVtduList = ardVtduService.selectArdVtduList(new ArdVtdu());
@@ -156,10 +159,16 @@
String name = channel.getDeviceId() + "_" + channel.getChanNo(); // 生成媒体表的 name
String cameraId = channel.getDeviceId(); // cameraId 就是通道的 deviceId
String rtspSourceUrl = getRtspSource(channel);
- String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":8554" + "/" + name; // 拼接 webrtcUrl
- String rtmpUrl = "rtmp://" + mediamtxConfig.getPlayHost() + ":1935" + "/" + name; // 拼接 webrtcUrl
+ String rtspUrl =
+ "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + name; //
+ // 拼接 webrtcUrl
+ String rtmpUrl =
+ "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + name; // 拼接
+ // webrtcUrl
String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
- String webrtcUrl = protocol + mediamtxConfig.getPlayHost() + ":8889" + "/" + name; // 拼接 webrtcUrl
+ String webrtcUrl =
+ protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + name;
+ // 拼接 webrtcUrl
// 先检查媒体表是否已有此记录
Optional<ArdVtdu> existingMedia = ardVtduList.stream()
@@ -212,7 +221,7 @@
// 根据通道信息获取rtsp源地址
private String getRtspSource(ArdChannel channel) {
String rtspSource = "";
- ArdCamera ardCamera =ardCameraService.selectArdCameraById(channel.getDeviceId());
+ ArdCamera ardCamera = ardCameraService.selectArdCameraById(channel.getDeviceId());
if (ardCamera != null) {
switch (ardCamera.getFactory()) {
case "1":
diff --git a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LiveStreamServiceImpl.java b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LiveStreamServiceImpl.java
index 9a0aec7..7133276 100644
--- a/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LiveStreamServiceImpl.java
+++ b/ard-sample/src/main/java/com/ard/sample/manage/service/impl/LiveStreamServiceImpl.java
@@ -81,7 +81,7 @@
@Override
public void saveLiveCapacity(LiveCapacityReceiver liveCapacityReceiver, Long timestamp) {
// Solve timing problems
- if(liveCapacityReceiver==null){
+ if (liveCapacityReceiver == null) {
//2025-10-28 zwy,这里有个空指针异常问题,如果liveCapacityReceiver为空,则不应该执行下面的代码。
//机场设备在刚开机时,发送的state状态时,直播能力前三次发送的是空,可能是由于刚开机,等待各设备开机,第四次为正常数据。
return;
@@ -100,7 +100,8 @@
@Override
public ResponseResult liveStart(LiveTypeDTO liveParam) {
- String rtmpPublishUrl = "rtmp://" + mediamtxConfig.getApiHost() + ":1935/" + liveParam.getVideoId();
+ String rtmpPublishUrl =
+ "rtmp://" + mediamtxConfig.getApiHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + liveParam.getVideoId();
liveParam.setUrl(rtmpPublishUrl);
// Check if this lens is available live.
ResponseResult responseResult = this.checkBeforeLive(liveParam.getVideoId());
@@ -125,13 +126,20 @@
case RTMP:
String name = liveParam.getVideoId();
// 拼接地址
- String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":8554" + "/" + name; // 拼接 webrtcUrl
- String rtmpUrl = "rtmp://" + mediamtxConfig.getPlayHost() + ":1935" + "/" + name; // 拼接 webrtcUrl
+ String rtspUrl =
+ "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + name; //
+ // 拼接 webrtcUrl
+ String rtmpUrl =
+ "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + name; //
+ // 拼接 webrtcUrl
String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
- String webrtcUrl = protocol + mediamtxConfig.getPlayHost() + ":8889" + "/" + name; // 拼接 webrtcUrl
+ String webrtcUrl =
+ protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + name; // 拼接
+ // webrtcUrl
// 如果没有,插入新的记录
- ArdVtdu vtdu = ArdVtdu.builder().name(name).rtspSource("publisher").rtspUrl(rtspUrl).rtmpUrl(rtmpUrl).webrtcUrl(webrtcUrl).build();
+ ArdVtdu vtdu =
+ ArdVtdu.builder().name(name).rtspSource("publisher").rtspUrl(rtspUrl).rtmpUrl(rtmpUrl).webrtcUrl(webrtcUrl).build();
int i = ardVtduService.insertArdVtdu(vtdu); // 保存到媒体表
if (i > 0) {
live.setRtmpUrl(rtmpUrl);
diff --git a/ard-vtdu/src/main/java/com/ard/vtdu/config/MediamtxConfig.java b/ard-vtdu/src/main/java/com/ard/vtdu/config/MediamtxConfig.java
index b4b476e..fd39058 100644
--- a/ard-vtdu/src/main/java/com/ard/vtdu/config/MediamtxConfig.java
+++ b/ard-vtdu/src/main/java/com/ard/vtdu/config/MediamtxConfig.java
@@ -17,4 +17,7 @@
private String apiHost;
private String playHost;
private boolean isHttps;
+ private Integer rtmpPort;
+ private Integer rtspPort;
+ private Integer webrtcPort;
}
diff --git a/ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdArdMediaServiceImpl.java b/ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdArdMediaServiceImpl.java
index d68a004..c4e181f 100644
--- a/ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdArdMediaServiceImpl.java
+++ b/ard-vtdu/src/main/java/com/ard/vtdu/service/impl/ArdArdMediaServiceImpl.java
@@ -51,10 +51,13 @@
@Override
public ArdVtdu addPath(ArdVtdu ardVtdu) {
try {
- String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":8554/" + ardVtdu.getName();
- String rtmpUrl = "rtmp://" + mediamtxConfig.getPlayHost() + ":1935/" + ardVtdu.getName();
+ String rtspUrl =
+ "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + ardVtdu.getName();
+ String rtmpUrl =
+ "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + ardVtdu.getName();
String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
- String webrtcUrl = protocol + mediamtxConfig.getPlayHost() + ":8889/" + ardVtdu.getName();
+ String webrtcUrl =
+ protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + ardVtdu.getName();
Conf conf = new Conf();
conf.setSource(ardVtdu.getRtspSource());
@@ -82,10 +85,13 @@
@Override
public ArdVtdu editPath(ArdVtdu ardVtdu) {
try {
- String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":8554/" + ardVtdu.getName();
- String rtmpUrl = "rtmp://" + mediamtxConfig.getPlayHost() + ":1935/" + ardVtdu.getName();
+ String rtspUrl =
+ "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + ardVtdu.getName();
+ String rtmpUrl =
+ "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + ardVtdu.getName();
String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
- String webrtcUrl = protocol + mediamtxConfig.getPlayHost() + ":8889/" + ardVtdu.getName();
+ String webrtcUrl =
+ protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + ardVtdu.getName();
Conf conf = new Conf();
conf.setSource(ardVtdu.getRtspSource());
@@ -199,14 +205,15 @@
//源
info.setRtspSource(conf.getSource());
//RTMP播放地址
- String rtmpUrl = "rtmp://" + mediamtxConfig.getPlayHost() + ":1935/" + name;
+ String rtmpUrl = "rtmp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtmpPort() + "/" + name;
info.setRtmpUrl(rtmpUrl);
//RTSP播放地址
- String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":8554/" + name;
+ String rtspUrl = "rtsp://" + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getRtspPort() + "/" + name;
info.setRtspUrl(rtspUrl);
//WEBRTC播放地址
String protocol = mediamtxConfig.isHttps() ? "https://" : "http://";
- String webrtcUrl = protocol + mediamtxConfig.getPlayHost() + ":8889/" + name;
+ String webrtcUrl =
+ protocol + mediamtxConfig.getPlayHost() + ":" + mediamtxConfig.getWebrtcPort() + "/" + name;
info.setWebrtcUrl(webrtcUrl);
//上行流量
--
Gitblit v1.9.3