Merge branch 'wvp-28181-2.0' into 结构优化

# Conflicts:
#	src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
结构优化
648540858 2024-01-31 17:26:00 +08:00
commit 09d610830f
10 changed files with 33 additions and 17 deletions

View File

@ -25,6 +25,7 @@ import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
/** /**
* Spring Security * Spring Security
@ -139,8 +140,14 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
corsConfiguration.setAllowedHeaders(Arrays.asList("*")); corsConfiguration.setAllowedHeaders(Arrays.asList("*"));
corsConfiguration.setAllowedMethods(Arrays.asList("*")); corsConfiguration.setAllowedMethods(Arrays.asList("*"));
corsConfiguration.setMaxAge(3600L); corsConfiguration.setMaxAge(3600L);
if (userSetting.getAllowedOrigins() != null && !userSetting.getAllowedOrigins().isEmpty()) {
corsConfiguration.setAllowCredentials(true); corsConfiguration.setAllowCredentials(true);
corsConfiguration.setAllowedOrigins(userSetting.getAllowedOrigins()); corsConfiguration.setAllowedOrigins(userSetting.getAllowedOrigins());
}else {
corsConfiguration.setAllowCredentials(false);
corsConfiguration.setAllowedOrigins(Collections.singletonList(CorsConfiguration.ALL));
}
corsConfiguration.setExposedHeaders(Arrays.asList(JwtUtils.getHeader())); corsConfiguration.setExposedHeaders(Arrays.asList(JwtUtils.getHeader()));
UrlBasedCorsConfigurationSource url = new UrlBasedCorsConfigurationSource(); UrlBasedCorsConfigurationSource url = new UrlBasedCorsConfigurationSource();

View File

@ -38,7 +38,8 @@ public class SSRCFactory {
public void initMediaServerSSRC(String mediaServerId, Set<String> usedSet) { public void initMediaServerSSRC(String mediaServerId, Set<String> usedSet) {
String ssrcPrefix = sipConfig.getDomain().substring(3, 8); String sipDomain = sipConfig.getDomain();
String ssrcPrefix = sipDomain.length() >= 8 ? sipDomain.substring(3, 8) : sipDomain;
String redisKey = SSRC_INFO_KEY + userSetting.getServerId() + "_" + mediaServerId; String redisKey = SSRC_INFO_KEY + userSetting.getServerId() + "_" + mediaServerId;
List<String> ssrcList = new ArrayList<>(); List<String> ssrcList = new ArrayList<>();
for (int i = 1; i < MAX_STREAM_COUNT; i++) { for (int i = 1; i < MAX_STREAM_COUNT; i++) {

View File

@ -474,6 +474,10 @@ public class SIPCommander implements ISIPCommander {
*/ */
@Override @Override
public void streamByeCmd(Device device, String channelId, String stream, String callId, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException, SsrcTransactionNotFoundException { public void streamByeCmd(Device device, String channelId, String stream, String callId, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException, SsrcTransactionNotFoundException {
if (device == null) {
logger.warn("[发送BYE] device为null");
return;
}
List<SsrcTransaction> ssrcTransactionList = streamSession.getSsrcTransactionForAll(device.getDeviceId(), channelId, callId, stream); List<SsrcTransaction> ssrcTransactionList = streamSession.getSsrcTransactionForAll(device.getDeviceId(), channelId, callId, stream);
if (ssrcTransactionList == null || ssrcTransactionList.isEmpty()) { if (ssrcTransactionList == null || ssrcTransactionList.isEmpty()) {
logger.info("[发送BYE] 未找到事务信息,设备: device: {}, channel: {}", device.getDeviceId(), channelId); logger.info("[发送BYE] 未找到事务信息,设备: device: {}, channel: {}", device.getDeviceId(), channelId);

View File

@ -588,7 +588,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
// 发送redis消息 // 发送redis消息
redisGbPlayMsgListener.sendMsg(streamPushItem.getServerId(), streamPushItem.getMediaServerId(), redisGbPlayMsgListener.sendMsg(streamPushItem.getServerId(), streamPushItem.getMediaServerId(),
streamPushItem.getApp(), streamPushItem.getStream(), addressStr, port, ssrc, requesterId, streamPushItem.getApp(), streamPushItem.getStream(), addressStr, port, ssrc, requesterId,
channelId, mediaTransmissionTCP, platform.isRtcp(),null, responseSendItemMsg -> { channelId, mediaTransmissionTCP, platform.isRtcp(),platform.getName(), responseSendItemMsg -> {
SendRtpItem sendRtpItem = responseSendItemMsg.getSendRtpItem(); SendRtpItem sendRtpItem = responseSendItemMsg.getSendRtpItem();
if (sendRtpItem == null || responseSendItemMsg.getMediaServerItem() == null) { if (sendRtpItem == null || responseSendItemMsg.getMediaServerItem() == null) {
logger.warn("服务器端口资源不足"); logger.warn("服务器端口资源不足");

View File

@ -161,6 +161,7 @@ public class AssistRESTfulUtils {
if (mediaServerItem == null) { if (mediaServerItem == null) {
return null; return null;
} }
logger.info("[访问assist] {}, 参数: {}", url, param);
JSONObject responseJSON = new JSONObject(); JSONObject responseJSON = new JSONObject();
//-2自定义流媒体 调用错误码 //-2自定义流媒体 调用错误码
responseJSON.put("code",-2); responseJSON.put("code",-2);

View File

@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.storager.impl; package com.genersoft.iot.vmp.storager.impl;
import com.baomidou.dynamic.datasource.annotation.DS;
import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.conf.SipConfig;
import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.bean.*;
@ -29,6 +30,7 @@ import java.util.*;
*/ */
@SuppressWarnings("rawtypes") @SuppressWarnings("rawtypes")
@Component @Component
@DS("master")
public class VideoManagerStorageImpl implements IVideoManagerStorage { public class VideoManagerStorageImpl implements IVideoManagerStorage {
private final Logger logger = LoggerFactory.getLogger(VideoManagerStorageImpl.class); private final Logger logger = LoggerFactory.getLogger(VideoManagerStorageImpl.class);

View File

@ -237,7 +237,7 @@ user-settings:
register-again-after-time: 60 register-again-after-time: 60
# 国标续订方式true为续订每次注册在同一个会话里false为重新注册每次使用新的会话 # 国标续订方式true为续订每次注册在同一个会话里false为重新注册每次使用新的会话
register-keep-int-dialog: false register-keep-int-dialog: false
# 跨域配置,配置你访问前端页面的地址即可 可以配置多个 # 跨域配置,不配置此项则允许所有跨域请求,配置后则只允许配置的页面的地址请求 可以配置多个
allowed-origins: allowed-origins:
- http://localhost:8008 - http://localhost:8008
- http://192.168.1.3:8008 - http://192.168.1.3:8008

View File

@ -110,8 +110,7 @@ user-settings:
auto-apply-play: true auto-apply-play: true
# 设备/通道状态变化时发送消息 # 设备/通道状态变化时发送消息
device-status-notify: true device-status-notify: true
# 跨域配置,配置你访问前端页面的地址即可, 可以配置多个 # [可选] 日志配置, 一般不需要改
allowed-origins: logging:
- http://localhost:8080 config: classpath:logback-spring-local.xml
- http://127.0.0.1:8080

View File

@ -264,14 +264,16 @@ export default {
}); });
}, },
formatTime(time) { formatTime(time) {
const h = parseInt(time / 3600) const h = parseInt(time / 3600 / 1000)
const minute = parseInt(time / 60 % 60) const minute = parseInt((time - h * 3600 * 1000) / 60 / 1000)
const second = Math.ceil(time % 60) let second = Math.ceil((time - h * 3600 * 1000 - minute * 60 * 1000) / 1000)
if (second < 0) {
return (h > 0 ? h + `小时` : '') + (minute > 0 ? minute + '分' : '') + second + '秒' second = 0;
}
return (h > 0 ? h + `小时` : '') + (minute > 0 ? minute + '分' : '') + (second > 0 ? second + '秒' : '')
}, },
formatTimeStamp(time) { formatTimeStamp(time) {
return moment.unix(time).format('yyyy-MM-DD HH:mm:ss') return moment.unix(time/1000).format('yyyy-MM-DD HH:mm:ss')
} }
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<div ref="container" @dblclick="fullscreenSwich" <div ref="container" @dblclick="fullscreenSwich"
style="width:100%;height:100%;min-height: 200px;background-color: #000000;margin:0 auto;position: relative;"> style="width:100%;height:518px; min-height: 200px;background-color: #000000;margin:0 auto;position: relative;">
<div class="buttons-box" id="buttonsBox"> <div class="buttons-box" id="buttonsBox">
<div class="buttons-box-left"> <div class="buttons-box-left">
<i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i> <i v-if="!playing" class="iconfont icon-play jessibuca-btn" @click="playBtnClick"></i>
@ -46,7 +46,7 @@ export default {
}; };
}, },
props: ['videoUrl', 'error', 'hasAudio', 'height'], props: ['videoUrl', 'error', 'hasAudio', 'height'],
mounted() { created() {
let paramUrl = decodeURIComponent(this.$route.params.url) let paramUrl = decodeURIComponent(this.$route.params.url)
this.$nextTick(() => { this.$nextTick(() => {
this.updatePlayerDomSize() this.updatePlayerDomSize()