From 2d881eae08d7430ddaf1a98bde655e48d28d17d9 Mon Sep 17 00:00:00 2001
From: zjc <1034206993@qq.com>
Date: Sat, 22 Feb 2025 12:59:47 +0800
Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=AE=8C=E5=96=84=E5=8A=9F?=
=?UTF-8?q?=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
package-lock.json | 27 +---------
package.json | 2 -
src/components/CoreVideo/index.vue | 54 ++++++++++----------
src/components/VideoDialog/index.vue | 68 +++++++++++++++++++-------
src/hooks/socket.js | 1 +
src/layout/index.vue | 8 +--
src/views/home/components/box-1.vue | 16 ------
src/views/monitor/components/box-2.vue | 44 +++++------------
8 files changed, 96 insertions(+), 124 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index 87e8056..0d0e5c3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -12,10 +12,8 @@
"echarts": "^5.5.1",
"echarts-wordcloud": "^2.0.0",
"element-plus": "^2.9.0",
- "flv.js": "^1.6.2",
"hls.js": "^1.5.18",
"lodash": "^4.17.21",
- "mitt": "^3.0.1",
"pinia": "^2.2.6",
"pubsub-js": "^1.9.5",
"vue": "^3.5.13",
@@ -1752,12 +1750,6 @@
"dev": true,
"peer": true
},
- "node_modules/es6-promise": {
- "version": "4.2.8",
- "resolved": "https://registry.npmmirror.com/es6-promise/-/es6-promise-4.2.8.tgz",
- "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==",
- "license": "MIT"
- },
"node_modules/esbuild": {
"version": "0.24.0",
"resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.24.0.tgz",
@@ -1989,16 +1981,6 @@
"node": ">=8"
}
},
- "node_modules/flv.js": {
- "version": "1.6.2",
- "resolved": "https://registry.npmmirror.com/flv.js/-/flv.js-1.6.2.tgz",
- "integrity": "sha512-xre4gUbX1MPtgQRKj2pxJENp/RnaHaxYvy3YToVVCrSmAWUu85b9mug6pTXF6zakUjNP2lFWZ1rkSX7gxhB/2A==",
- "license": "Apache-2.0",
- "dependencies": {
- "es6-promise": "^4.2.8",
- "webworkify-webpack": "^2.1.5"
- }
- },
"node_modules/follow-redirects": {
"version": "1.15.9",
"resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
@@ -2583,7 +2565,8 @@
"node_modules/mitt": {
"version": "3.0.1",
"resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz",
- "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw=="
+ "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==",
+ "dev": true
},
"node_modules/mlly": {
"version": "1.7.3",
@@ -4007,12 +3990,6 @@
"url": "https://opencollective.com/webpack"
}
},
- "node_modules/webworkify-webpack": {
- "version": "2.1.5",
- "resolved": "https://registry.npmmirror.com/webworkify-webpack/-/webworkify-webpack-2.1.5.tgz",
- "integrity": "sha512-2akF8FIyUvbiBBdD+RoHpoTbHMQF2HwjcxfDvgztAX5YwbZNyrtfUMgvfgFVsgDhDPVTlkbb5vyasqDHfIDPQw==",
- "license": "MIT"
- },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index b6af09e..70c1645 100644
--- a/package.json
+++ b/package.json
@@ -13,10 +13,8 @@
"echarts": "^5.5.1",
"echarts-wordcloud": "^2.0.0",
"element-plus": "^2.9.0",
- "flv.js": "^1.6.2",
"hls.js": "^1.5.18",
"lodash": "^4.17.21",
- "mitt": "^3.0.1",
"pinia": "^2.2.6",
"pubsub-js": "^1.9.5",
"vue": "^3.5.13",
diff --git a/src/components/CoreVideo/index.vue b/src/components/CoreVideo/index.vue
index a089ba5..037584f 100644
--- a/src/components/CoreVideo/index.vue
+++ b/src/components/CoreVideo/index.vue
@@ -22,6 +22,7 @@
:controls="false"
style="object-fit: cover"
>
+
@@ -46,45 +47,46 @@
let webRtcServerList = ref([])
const handleItem = (item) => {
- // src.value = item.hlsUrl
- src.value = item.rtspUrl
+ src.value = item.hlsUrl
+ // src.value = item.rtspUrl
cameraIndexCode.value = item.cameraIndexCode
videoShow.value = true
}
const getVideoList = async () => {
let res = await getVideoListApi({
- type: 'rtsp',
businessVideoDisplayPosition: '核心景区视频'
})
- console.log(res, '视频列表')
list.value = res.data
- nextTick(() => {
- list.value.forEach(async (item, index) => {
- let webRtcServer = new WebRtcStreamer(
- `video${index}`,
- `${mode == 'dev' ? baseUrl : proBaseUrl}/webrtc`
- )
- webRtcServer.connect(item.rtspUrl)
- webRtcServerList.value.push(webRtcServer)
- })
- })
-
// nextTick(() => {
// list.value.forEach(async (item, index) => {
- // var video = document.getElementById(`video${index}`)
- // const hls = new Hls({
- // maxBufferLength: 10, // 最大缓冲长度(秒)
- // maxMaxBufferLength: 15, // 缓冲区长度的上限
- // maxBufferSize: 20 * 1000 * 1000 // 最大缓冲大小(字节)
- // })
- // hls.loadSource(item.hlsUrl)
- // hls.attachMedia(video)
- // hls.on(Hls.Events.MANIFEST_PARSED, () => {
- // video.play()
- // })
+ // let webRtcServer = new WebRtcStreamer(
+ // `video${index}`,
+ // `${mode == 'dev' ? baseUrl : proBaseUrl}/webrtc`
+ // )
+ // webRtcServer.connect(item.rtspUrl, '', 'rtptransport=tcp')
+ // webRtcServerList.value.push(webRtcServer)
// })
// })
+
+ nextTick(() => {
+ list.value.forEach(async (item, index) => {
+ var video = document.getElementById(`video${index}`)
+ const hls = new Hls({
+ enableWorker: false, // 禁用 Worker 来避免额外的线程
+ enableSoftwareAES: true, // 使用软件解码器以避免硬件解码的额外请求
+ cache: true, // 启用缓存
+ maxBufferLength: 10, // 最大缓冲长度(秒)
+ maxMaxBufferLength: 15, // 缓冲区长度的上限
+ maxBufferSize: 20 * 1000 * 1000 // 最大缓冲大小(字节)
+ })
+ hls.loadSource(item.hlsUrl)
+ hls.attachMedia(video)
+ hls.on(Hls.Events.MANIFEST_PARSED, () => {
+ video.play()
+ })
+ })
+ })
}
onMounted(() => {
getVideoList()
diff --git a/src/components/VideoDialog/index.vue b/src/components/VideoDialog/index.vue
index ba77915..d616fec 100644
--- a/src/components/VideoDialog/index.vue
+++ b/src/components/VideoDialog/index.vue
@@ -1,11 +1,18 @@