Compare commits

...

5 Commits

Author SHA1 Message Date
阿斌
a8ef0fece9
Pre Merge pull request !41 from 阿斌/N/A 2026-06-02 08:15:39 +00:00
lin
a9ad7cf5a8 SSRC管理-优化重建时的异常处理,避免异常导致的定时任务崩溃 2026-06-02 16:15:21 +08:00
648540858
b760458e4e
Merge pull request #2162 from ym6009/master
修复录制计划-编辑时的回显加载问题
2026-05-28 21:59:33 +08:00
ym
fd3dc4dada 修复录制计划-编辑时的回显加载问题 2026-05-28 16:42:38 +08:00
阿斌
34d1dbb399
修复两次密码不一致时,任然可以修改密码,且成功提交,密码用*代替
还有以下一处需要修改web\src\layout\components\dialog\changePassword.vue

Signed-off-by: 阿斌 <38912748@qq.com>
2025-08-23 15:03:02 +00:00
3 changed files with 63 additions and 39 deletions

View File

@ -95,43 +95,52 @@ public class SSRCFactory {
}
void rebuild() {
List<MediaServer> servers = mediaServerService.getAll();
for (MediaServer server : servers) {
if (server.isRtpEnable() && userSetting.getSsrcRandom()) {
continue;
}
synchronized (lockMap.computeIfAbsent(server.getId(), k -> new Object())) {
BitSet bits = new BitSet(10000);
int count = 0;
try {
List<MediaServer> servers = mediaServerService.getAll();
for (MediaServer server : servers) {
try {
ZLMResult<?> result = zlmresTfulUtils.getMediaList(server, null, null, "rtsp", null);
if (result != null && result.getCode() == 0 && result.getData() != null) {
List<JSONObject> list = (List<JSONObject>) result.getData();
for (JSONObject obj : list) {
if (obj.getIntValue("originType") != 3) continue;
String originUrl = obj.getString("originUrl");
if (originUrl == null) continue;
int idx = originUrl.lastIndexOf("/rtp/");
if (idx == -1) continue;
try {
int suffix = (int) (Long.parseLong(originUrl.substring(idx + 5), 16) % 10000);
bits.set(suffix);
count++;
} catch (NumberFormatException ignored) {
}
}
if (server.isRtpEnable() && userSetting.getSsrcRandom()) {
continue;
}
} catch (Exception e) {
log.warn("[SSRC重建] 查询媒体节点 {} 失败: {}", server.getId(), e.getMessage());
}
usedMap.put(server.getId(), bits);
if (count > 8000) {
log.info("[SSRC重建] 媒体节点 {} 的SSRC使用率已超过80%,请注意扩展服务提升性能", server.getId());
}
if (log.isDebugEnabled()) {
log.debug("[SSRC重建] 节点 {} 已占用 {} 个SSRC", server.getId(), count);
synchronized (lockMap.computeIfAbsent(server.getId(), k -> new Object())) {
BitSet bits = new BitSet(10000);
int count = 0;
try {
ZLMResult<?> result = zlmresTfulUtils.getMediaList(server, null, null, "rtsp", null);
if (result != null && result.getCode() == 0 && result.getData() != null) {
List<JSONObject> list = (List<JSONObject>) result.getData();
for (JSONObject obj : list) {
if (obj.getIntValue("originType") != 3) continue;
String originUrl = obj.getString("originUrl");
if (originUrl == null) continue;
int idx = originUrl.lastIndexOf("/rtp/");
if (idx == -1) continue;
try {
int suffix = (int) (Long.parseLong(originUrl.substring(idx + 5), 16) % 10000);
bits.set(suffix);
count++;
} catch (NumberFormatException ignored) {
}
}
usedMap.put(server.getId(), bits);
if (count > 8000) {
log.info("[SSRC重建] 媒体节点 {} 的SSRC使用率已超过80%,请注意扩展服务提升性能", server.getId());
}
if (log.isDebugEnabled()) {
log.debug("[SSRC重建] 节点 {} 已占用 {} 个SSRC", server.getId(), count);
}
}
} catch (Exception e) {
log.warn("[SSRC重建] 查询媒体节点 {} 失败: {}", server.getId(), e.getMessage());
}
}
}catch (Exception e) {
log.warn("[SSRC重建] 处理媒体节点 {} 失败: {}", server.getId(), e.getMessage());
}
}
}catch (Exception e) {
log.error("[SSRC] 重建SSRC失败", e);
}
}
}

View File

@ -148,10 +148,17 @@ export default {
}
},
watch: {
planArray: function(array) {
for (let i = 0; i < array.length; i++) {
this.weekData[i].data = array[i].data
}
planArray: {
handler(array) {
if (!array || !array.length) {
return
}
for (let i = 0; i < array.length; i++) {
this.weekData[i].data = array[i].data
}
},
deep: true,
immediate: true
}
},
created() {

View File

@ -13,10 +13,10 @@
<div id="shared" style="margin-right: 20px;">
<el-form ref="passwordForm" :rules="rules" status-icon label-width="80px">
<el-form-item label="新密码" prop="newPassword">
<el-input v-model="newPassword" autocomplete="off" />
<el-input v-model="newPassword" autocomplete="off" type="password" />
</el-form-item>
<el-form-item label="确认密码" prop="confirmPassword">
<el-input v-model="confirmPassword" autocomplete="off" />
<el-input v-model="confirmPassword" autocomplete="off" type="password" />
</el-form-item>
<el-form-item>
@ -88,6 +88,14 @@ export default {
}
},
onSubmit: function() {
if (this.newPassword !== this.confirmPassword) {
this.$message({
showClose: true,
message: '两次输入密码不一致!',
type: 'error'
})
return
}
this.$store.dispatch('user/changePasswordForAdmin', {
password: this.newPassword,
userId: this.form.id