视频监控页面逻辑更改
This commit is contained in:
parent
65b9e5cb6a
commit
bd8a8a91f8
@ -7,7 +7,14 @@ import { requestClient } from '#/api/request';
|
|||||||
* @returns 人像信息列表
|
* @returns 人像信息列表
|
||||||
*/
|
*/
|
||||||
export function addStreamProxy(params?: any) {
|
export function addStreamProxy(params?: any) {
|
||||||
return requestClient.post<AddStreamProxyResult>('sis/stream//realtime/add', {
|
return requestClient.post<AddStreamProxyResult>(
|
||||||
|
'sis/stream/realtime/add',
|
||||||
params,
|
params,
|
||||||
});
|
);
|
||||||
|
}
|
||||||
|
export function addFFmpegStreamProxy(params?: any) {
|
||||||
|
return requestClient.post<AddStreamProxyResult>(
|
||||||
|
'sis/stream/realtime/addFfmpeg',
|
||||||
|
params,
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
@ -40,7 +40,6 @@ import ChannelTree from './channel-tree.vue';
|
|||||||
import mpegts from 'mpegts.js';
|
import mpegts from 'mpegts.js';
|
||||||
import { message } from 'ant-design-vue';
|
import { message } from 'ant-design-vue';
|
||||||
import { addStreamProxy } from '#/api/sis/stream';
|
import { addStreamProxy } from '#/api/sis/stream';
|
||||||
import type { AddStreamProxyQuery } from '#/api/sis/stream/model';
|
|
||||||
|
|
||||||
const selected = 'selected';
|
const selected = 'selected';
|
||||||
|
|
||||||
@ -78,12 +77,13 @@ function playerSelect(index: number) {
|
|||||||
*/
|
*/
|
||||||
function onPlayerNumChanged(val: number) {
|
function onPlayerNumChanged(val: number) {
|
||||||
// 1个屏幕
|
// 1个屏幕
|
||||||
|
const changeBeforeNum = playerNum.value;
|
||||||
|
let changeNum = 1;
|
||||||
if (val === 1) {
|
if (val === 1) {
|
||||||
playerStyle.value = {
|
playerStyle.value = {
|
||||||
width: '100%',
|
width: '100%',
|
||||||
height: '100%',
|
height: '100%',
|
||||||
};
|
};
|
||||||
playerNum.value = 1;
|
|
||||||
}
|
}
|
||||||
// 4个屏幕 2*2
|
// 4个屏幕 2*2
|
||||||
else if (val === 2) {
|
else if (val === 2) {
|
||||||
@ -91,7 +91,7 @@ function onPlayerNumChanged(val: number) {
|
|||||||
width: '50%',
|
width: '50%',
|
||||||
height: '50%',
|
height: '50%',
|
||||||
};
|
};
|
||||||
playerNum.value = 4;
|
changeNum = 4;
|
||||||
}
|
}
|
||||||
// 9个屏幕 3*3
|
// 9个屏幕 3*3
|
||||||
else if (val === 3) {
|
else if (val === 3) {
|
||||||
@ -99,7 +99,7 @@ function onPlayerNumChanged(val: number) {
|
|||||||
width: '33.33%',
|
width: '33.33%',
|
||||||
height: '33.33%',
|
height: '33.33%',
|
||||||
};
|
};
|
||||||
playerNum.value = 9;
|
changeNum = 9;
|
||||||
}
|
}
|
||||||
// 16个屏幕 4*4
|
// 16个屏幕 4*4
|
||||||
else {
|
else {
|
||||||
@ -107,7 +107,29 @@ function onPlayerNumChanged(val: number) {
|
|||||||
width: '25%',
|
width: '25%',
|
||||||
height: '25%',
|
height: '25%',
|
||||||
};
|
};
|
||||||
playerNum.value = 16;
|
changeNum = 16;
|
||||||
|
}
|
||||||
|
playerNum.value = changeNum;
|
||||||
|
// 缩小布局
|
||||||
|
if (changeBeforeNum > changeNum) {
|
||||||
|
debugger;
|
||||||
|
const playerArr = [];
|
||||||
|
for (let i = 0; i < playerList.length; i++) {
|
||||||
|
const playerBox = playerList[i];
|
||||||
|
if (playerBox) {
|
||||||
|
playerArr.push(playerBox);
|
||||||
|
}
|
||||||
|
playerList[i] = null;
|
||||||
|
}
|
||||||
|
for (let i = 0; i < playerArr.length; i++) {
|
||||||
|
const play = playerArr[i];
|
||||||
|
if (i < changeNum) {
|
||||||
|
// 获取播放元素
|
||||||
|
changeElPlayer(play, i);
|
||||||
|
} else {
|
||||||
|
closePlayVieo(play.player);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,8 +173,12 @@ function onNodeChecked(
|
|||||||
}
|
}
|
||||||
// 新增
|
// 新增
|
||||||
if (checked) {
|
if (checked) {
|
||||||
if (currentSelectPlayerIndex.value === -1 && checkNode.length == 0) {
|
/**
|
||||||
doPlayer(checkNode[0], currentSelectPlayerIndex.value);
|
* 如果当前页面有选择播放未知,并且播放视频只有一个,则播放到制定位置
|
||||||
|
*/
|
||||||
|
debugger;
|
||||||
|
if (currentSelectPlayerIndex.value !== -1 && checkNode.length == 1) {
|
||||||
|
doPlayer(checkNode[0], currentSelectPlayerIndex.value - 1);
|
||||||
}
|
}
|
||||||
// 批量播放 currentSelectPlayerIndex 将不再生效
|
// 批量播放 currentSelectPlayerIndex 将不再生效
|
||||||
else {
|
else {
|
||||||
@ -196,6 +222,42 @@ function onNodeChecked(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function changeElPlayer(playerInfo: any, index: number) {
|
||||||
|
const playerData = playerInfo.data;
|
||||||
|
const oldPlayer = playerInfo.player;
|
||||||
|
if (oldPlayer) {
|
||||||
|
closePlayVieo(oldPlayer);
|
||||||
|
}
|
||||||
|
const videoConfig = {
|
||||||
|
type: 'flv',
|
||||||
|
url: playerData.url,
|
||||||
|
isLive: true,
|
||||||
|
hasAudio: false,
|
||||||
|
hasVideo: true,
|
||||||
|
enableWorker: true, // 启用分离的线程进行转码
|
||||||
|
enableStashBuffer: false, // 关闭IO隐藏缓冲区
|
||||||
|
stashInitialSize: 256, // 减少首帧显示等待时长
|
||||||
|
};
|
||||||
|
const playerConfig = {
|
||||||
|
enableErrorRecover: true, // 启用错误恢复
|
||||||
|
autoCleanupMaxBackwardDuration: 30,
|
||||||
|
autoCleanupMinBackwardDuration: 10,
|
||||||
|
};
|
||||||
|
const player = mpegts.createPlayer(videoConfig, playerConfig);
|
||||||
|
const videoElement = itemRefs.value[index];
|
||||||
|
if (videoElement) {
|
||||||
|
player.attachMediaElement(videoElement);
|
||||||
|
player.load();
|
||||||
|
player.play();
|
||||||
|
playerList[index] = {
|
||||||
|
player,
|
||||||
|
data: playerData,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
console.log('视频播放元素获取异常');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 开始播放视频流
|
* 开始播放视频流
|
||||||
* @param nodeData 播放的节点数据
|
* @param nodeData 播放的节点数据
|
||||||
@ -213,16 +275,18 @@ function doPlayer(nodeData: any, index: number) {
|
|||||||
};
|
};
|
||||||
addStreamProxy(params).then((res) => {
|
addStreamProxy(params).then((res) => {
|
||||||
const url = res.wsFlv;
|
const url = res.wsFlv;
|
||||||
|
// 将url 绑定到 nodeData
|
||||||
|
nodeData.url = url;
|
||||||
closePlayer(index);
|
closePlayer(index);
|
||||||
const videoConfig = {
|
const videoConfig = {
|
||||||
type: 'flv',
|
type: 'flv',
|
||||||
url: url,
|
url: url,
|
||||||
isLive: true,
|
isLive: true,
|
||||||
hasAudio: true,
|
hasAudio: false,
|
||||||
hasVideo: true,
|
hasVideo: true,
|
||||||
enableWorker: true, // 启用分离的线程进行转码
|
enableWorker: true, // 启用分离的线程进行转码
|
||||||
enableStashBuffer: false, // 关闭IO隐藏缓冲区
|
enableStashBuffer: false, // 关闭IO隐藏缓冲区
|
||||||
stashInitialSize: 128, // 减少首帧显示等待时长
|
stashInitialSize: 256, // 减少首帧显示等待时长
|
||||||
};
|
};
|
||||||
const playerConfig = {
|
const playerConfig = {
|
||||||
enableErrorRecover: true, // 启用错误恢复
|
enableErrorRecover: true, // 启用错误恢复
|
||||||
@ -248,6 +312,18 @@ function doPlayer(nodeData: any, index: number) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function closePlayVieo(plInfo: any) {
|
||||||
|
if (plInfo) {
|
||||||
|
try {
|
||||||
|
plInfo.pause(); // 暂停
|
||||||
|
plInfo.unload(); // 卸载
|
||||||
|
plInfo.destroy(); // 销毁
|
||||||
|
} catch (e) {
|
||||||
|
console.log('播放器关闭失败,e=', e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function closePlayer(index: number) {
|
function closePlayer(index: number) {
|
||||||
// 如果播放器存在,尝试关闭
|
// 如果播放器存在,尝试关闭
|
||||||
const pData = playerList[index];
|
const pData = playerList[index];
|
||||||
|
Loading…
Reference in New Issue
Block a user