This commit is contained in:
Orange
2025-04-11 15:07:21 +08:00
parent 05aac6a13a
commit f25b93fdd2
5 changed files with 80 additions and 50 deletions

View File

@@ -159,24 +159,24 @@ sip:
alarm: false
##zlm 默认服务器配置
#media:
# id: haoxin-zlm-1
# # [必须修改] zlm服务器的内网IP
# ip: 192.168.158.199
# # [必须修改] zlm服务器的http.port
# http-port: 8092
# # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
# hook-ip: 192.168.158.199
# # [必选选] zlm服务器的hook.admin_params=secret
# secret: haoxin
# # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分 点播超时建议使用多端口测试
# rtp:
# # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
# enable: true
# # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性不然自动配置此属性可能不成功
# port-range: 30000,30500 # 端口范围
# # [可选] 国标级联在此范围内选择端口发送媒体流,
# send-port-range: 30000,30500 # 端口范围
media:
id: haoxin-zlm-1
# [必须修改] zlm服务器的内网IP
ip: 192.168.158.199
# [必须修改] zlm服务器的http.port
http-port: 8092
# [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
hook-ip: 192.168.158.199
# [必选选] zlm服务器的hook.admin_params=secret
secret: haoxin
# 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分 点播超时建议使用多端口测试
rtp:
# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
enable: true
# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性不然自动配置此属性可能不成功
port-range: 40000,40300 # 端口范围
# [可选] 国标级联在此范围内选择端口发送媒体流,
send-port-range: 40000,40300 # 端口范围
##zlm 默认服务器配置
#media:
@@ -199,24 +199,24 @@ sip:
# send-port-range: 30000,30500 # 端口范围
#zlm 默认服务器配置
media:
id: hxkj_zlm
# [必须修改] zlm服务器的内网IP
ip: 192.168.158.39
# [必须修改] zlm服务器的http.port
http-port: 8092
# [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
hook-ip: 192.168.158.39
# [必选选] zlm服务器的hook.admin_params=secret
secret: hxkj_zlm
# 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分 点播超时建议使用多端口测试
rtp:
# [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
enable: true
# [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性不然自动配置此属性可能不成功
port-range: 30000,30500 # 端口范围
# [可选] 国标级联在此范围内选择端口发送媒体流,
send-port-range: 30000,30500 # 端口范围
#media:
# id: hxkj_zlm
# # [必须修改] zlm服务器的内网IP
# ip: 192.168.158.39
# # [必须修改] zlm服务器的http.port
# http-port: 8092
# # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip
# hook-ip: 192.168.158.39
# # [必选选] zlm服务器的hook.admin_params=secret
# secret: hxkj_zlm
# # 启用多端口模式, 多端口模式使用端口区分每路流,兼容性更好。 单端口使用流的ssrc区分 点播超时建议使用多端口测试
# rtp:
# # [可选] 是否启用多端口模式, 开启后会在portRange范围内选择端口用于媒体流传输
# enable: true
# # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性不然自动配置此属性可能不成功
# port-range: 30000,30500 # 端口范围
# # [可选] 国标级联在此范围内选择端口发送媒体流,
# send-port-range: 30000,30500 # 端口范围
# [根据业务需求配置]

View File

@@ -23,7 +23,7 @@ import com.ruoyi.framework.security.handle.LogoutSuccessHandlerImpl;
/**
* spring security配置
*
*
* @author ruoyi
*/
@EnableMethodSecurity(prePostEnabled = true, securedEnabled = true)
@@ -35,7 +35,7 @@ public class SecurityConfig
*/
@Autowired
private UserDetailsService userDetailsService;
/**
* 认证失败处理类
*/
@@ -53,7 +53,7 @@ public class SecurityConfig
*/
@Autowired
private JwtAuthenticationTokenFilter authenticationTokenFilter;
/**
* 跨域过滤器
*/
@@ -111,7 +111,7 @@ public class SecurityConfig
.authorizeHttpRequests((requests) -> {
permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
requests.antMatchers("/login", "/register", "/captchaImage", "/api/**").permitAll()
// 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

View File

@@ -49,3 +49,11 @@ export function updateChannelData(data) {
data: data,
})
}
// 通知设备上传媒体流
export function sendDevicePush(params) {
return request({
url: `/api/play/start/${params.deviceId}/${params.channelId}`,
method: 'get',
})
}

View File

@@ -92,9 +92,9 @@
</el-table-column>
<el-table-column label="操作" align="center" width="150" class-name="small-padding fixed-width" fixed="right">
<template #default="scope">
<!-- <el-button v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play"-->
<!-- type="text" @click="sendDevicePush(scope.row)">播放-->
<!-- </el-button>-->
<el-button v-bind:disabled="device == null || device.online === 0" icon="el-icon-video-play"
type="text" @click="start(scope.row)">播放
</el-button>
<el-button v-bind:disabled="device == null || device.online === 0"
icon="el-icon-switch-button"
type="text" style="color: #f56c6c" v-if="!!scope.row.streamId"
@@ -477,6 +477,12 @@
<ChooseCivilCode ref="chooseCivilCodeRef" @onSubmit="gbCivilCodeOnSubmit"></ChooseCivilCode>
<ChooseGroup ref="chooseGroupRef" @onSubmit="gbParentOnSubmit"></ChooseGroup>
<el-dialog title="播放视频" v-model="openPlay" width="1000px" append-to-body>
<div style="width: 100%; height: 600px">
<easy-player class="player" :video-url="vUrl" autoplay :live="true"></easy-player>
</div>
</el-dialog>
</div>
</template>
@@ -493,7 +499,7 @@ import {
subChannels,
updateChannelStreamIdentification
} from "../../../api/wvp/device.js";
import {getCommonChannel, resetChannel, updateChannelData} from "../../../api/wvp/channel.js";
import {getCommonChannel, resetChannel, updateChannelData, sendDevicePush} from "../../../api/wvp/channel.js";
import {recordApi} from "../../../api/wvp/control.js";
import router from "@/router";
const route = useRoute();
@@ -506,6 +512,7 @@ const parentChannelId = ref('');
const device = ref({});
const showTree = ref(false);
const open = ref(false);
const openPlay = ref(false);
const deviceChannelList = ref([])
const showSearch = ref(true);
const loadSnap = ref({});
@@ -513,6 +520,7 @@ const channelListTable = ref(null);
const channelCode = ref(null);
const chooseCivilCodeRef = ref(null);
const chooseGroupRef = ref(null);
const vUrl = ref('');
const data = reactive({
form: {},
@@ -528,6 +536,16 @@ const data = reactive({
const {queryParams, form, rules} = toRefs(data);
async function start(itemData){
const params = {
deviceId: deviceId.value,
channelId: itemData.deviceId
}
const res = await sendDevicePush(params);
console.log(res);
}
/** 搜索按钮操作 */
function handleQuery() {
queryParams.value.pageNum = 1;
@@ -689,7 +707,6 @@ function getDeviceChannelList() {
channelType: queryParams.value.channelType,
}
).then(response => {
console.log(response)
channelList.value = response.rows;
total.value = response.total;
loading.value = false;
@@ -866,4 +883,9 @@ onMounted(() => {
display: flex;
align-items: center;
}
.player {
width: 1000px;
height: 600px;
}
</style>

View File

@@ -110,16 +110,16 @@
</el-table-column>
<el-table-column label="操作" align="center" width="200" class-name="small-padding fixed-width" fixed="right">
<template #default="scope">
<!-- <el-button link type="primary" :disabled="scope.row.online===0" icon="Edit"-->
<!-- @click="refDevice(scope.row)"-->
<!-- @mouseover="getTooltipContent(scope.row.deviceId)">刷新-->
<!-- </el-button>-->
<!-- <el-button link type="primary" :disabled="scope.row.online===0" icon="Edit"-->
<!-- @click="refDevice(scope.row)"-->
<!-- @mouseover="getTooltipContent(scope.row.deviceId)">刷新-->
<!-- </el-button>-->
<el-button type="text" icon="Edit"
@click="showChannelList(scope.row)">通道
</el-button>
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
>修改
>修改
</el-button>
<el-dropdown @command="(command)=>{moreClick(command, scope.row)}">