From ebba316be7cc01464259122c98ca766b9c26058a Mon Sep 17 00:00:00 2001
From: wangyan <405898180@qq.com>
Date: Sat, 1 Nov 2025 20:56:11 +0800
Subject: [PATCH] =?UTF-8?q?feat(video):=20=E5=AE=9E=E7=8E=B0=E5=9F=BA?=
=?UTF-8?q?=E4=BA=8E=E8=A7=86=E9=A2=91=E6=B5=81=E6=92=AD=E6=94=BEWebSocket?=
=?UTF-8?q?=E7=9A=84FLV=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修改了Java后端代码,将视频转码服务从HLS改为FLV格式输出
- 删除了原有的HLS相关控制器和转码逻辑
- 新增了VideoWebSocketServer和VideoServerPool类来管理WebSocket连接和视频流传输- 更新了前端Vue组件,使用flv.js替代hls.js来播放视频流- 增加了WebSocket通信机制,通过二进制数据传输FLV视频流
- 移除了旧的转码状态检查和控制逻辑
- 优化了FFmpeg命令参数以适配FLV流媒体传输
- 添加了WebSocket服务器启动配置,并集成到应用启动流程中
---
.env.development | 8 +-
.env.production | 11 +-
package.json | 1 +
src/request/video_info.js | 11 +-
.../video_manager/components/playVideo.vue | 233 +++++++++---------
.../video_manager/video_manager/index.vue | 33 +--
6 files changed, 140 insertions(+), 157 deletions(-)
diff --git a/.env.development b/.env.development
index a63bf94..598b465 100644
--- a/.env.development
+++ b/.env.development
@@ -1,9 +1,9 @@
VITE_BASE=/
-# VITE_BASE_URL=http://192.168.0.25:8095/
-VITE_BASE_URL=http://192.168.0.37:8095/
+
+VITE_BASE_URL=http://192.168.4.40:8095/
#websocket t掉线
-VITE_ON_LINE_WEB_SOCKET_URL=ws://192.168.0.37:8869
+#VITE_ON_LINE_WEB_SOCKET_URL=ws://192.168.4.40:8869
#websocket 在线学习
-VITE_LEARNING_WEB_SOCKET_URL=ws://192.168.0.37:8899
+#VITE_LEARNING_WEB_SOCKET_URL=ws://192.168.4.40:8899
diff --git a/.env.production b/.env.production
index 6c5a399..ff38425 100644
--- a/.env.production
+++ b/.env.production
@@ -1,12 +1,11 @@
VITE_BASE=/dist
-#VITE_BASE_URL=http://10.199.64.27:8520/integrated_yjb/
+
VITE_BASE_URL=http://172.16.70.226:8081/sx_yjb/
-#VITE_BASE_URL=https://qaaqwh.qhdsafety.com/integrated_whb/
#websocket t掉线
-VITE_ON_LINE_WEB_SOCKET_URL=ws://183.251.104.38:10103
-# VITE_ON_LINE_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/disconnected/
+#VITE_ON_LINE_WEB_SOCKET_URL=ws://172.16.70.226:10103
+
#websocket 在线学习
-VITE_LEARNING_WEB_SOCKET_URL=ws://183.251.104.38:10102
-#VITE_LEARNING_WEB_SOCKET_URL=wss://qaaqwh.qhdsafety.com/onlinelearning/
+#VITE_LEARNING_WEB_SOCKET_URL=ws://172.16.70.226:8899
+
diff --git a/package.json b/package.json
index 4110181..f9cffc9 100644
--- a/package.json
+++ b/package.json
@@ -22,6 +22,7 @@
"dayjs": "^1.11.10",
"echarts": "^5.4.3",
"element-plus": "^2.6.1",
+ "flv.js": "^1.6.2",
"hls.js": "^1.6.13",
"html2canvas": "^1.4.1",
"jspdf": "^2.5.1",
diff --git a/src/request/video_info.js b/src/request/video_info.js
index c0070b2..f66ffdf 100644
--- a/src/request/video_info.js
+++ b/src/request/video_info.js
@@ -8,13 +8,4 @@ export const getvideoInfoView = (params) => post("/videoInfo/goEdit", params); /
export const setvideoInfoDelete = (params) => post("/videoInfo/delete", params); // 删除
export const setUpToBi = (params) => post("/videoInfo/editZhiding", params); // 删除
export const setvideoInfoEdit = (params) => post("/videoInfo/edit", params);
-export const startTransCode = (params) =>
- post("/playVideo/startTranscode", params);
-export const stopTransCode = (params) =>
- post("/playVideo/stopTranscode", params);
-export const getTranscodeStatus = (params) =>
- post("/playVideo/getTranscodeStatus", params);
-export const loginDahua = (params) =>
- post("/dahuaVideo/login", params);
-export const getDahuaSDKStatus = (params) =>
- post("/dahuaVideo/status", params);
+
diff --git a/src/views/video_manager/video_manager/components/playVideo.vue b/src/views/video_manager/video_manager/components/playVideo.vue
index 1d9cb79..698a287 100644
--- a/src/views/video_manager/video_manager/components/playVideo.vue
+++ b/src/views/video_manager/video_manager/components/playVideo.vue
@@ -1,22 +1,17 @@
-
-
+
-
-
- 关闭播放
-
+ 关闭播放
diff --git a/src/views/video_manager/video_manager/index.vue b/src/views/video_manager/video_manager/index.vue
index 8823e61..05c4863 100644
--- a/src/views/video_manager/video_manager/index.vue
+++ b/src/views/video_manager/video_manager/index.vue
@@ -18,9 +18,6 @@
重置
- 播放后台转码视频
@@ -111,7 +108,6 @@
v-model:visible="data.transcodeVideoDialog.visible"
:src="data.transcodeVideoDialog.src"
:video-id="data.transcodeVideoDialog.id"
- @on-stop="onTranscodeStopped"
/>
@@ -131,7 +127,6 @@ import SelectingPoints from "./components/selecting_points.vue";
import LayoutVideo from "@/components/video/index.vue";
import {setVideoManagerList} from "@/request/eightwork_videomanager.js";
import PlayVideo from "@/views/video_manager/video_manager/components/playVideo.vue"; // 引入新播放器组件
-import {startTransCode, stopTransCode} from "@/request/video_info.js"; // 转码接口
const data = reactive({
addDialog: {
@@ -157,26 +152,11 @@ const data = reactive({
},
transcodeVideoDialog: {
visible: false,
- src: "http://localhost:8100/api/hls/stream.m3u8", // 后端转码后HLS流的访问路径
+ src: "", // 默认为空
id: "",
},
});
-// 启动转码并显示播放器
-const handleStartTranscode = async () => {
- try {
- await startTransCode(); // 调用后端“启动转码”接口
- data.transcodeVideoDialog.visible = true; // 显示播放器弹窗
- } catch (error) {
- ElMessage.error("启动转码失败: " + (error.message || "未知错误"));
- }
-};
-
-// 转码停止后的回调
-const onTranscodeStopped = async () => {
- await stopTransCode(); // 调用后端“停止转码”接口
-};
-
// 列表数据逻辑(保持不变)
const {list, pagination, searchForm, fnGetData, fnResetPagination} =
useListData(getHkVideoManagerList);
@@ -201,13 +181,12 @@ const fnUpToBi = async (videomanagerId) => {
const fnPreviewVideo = async (row) => {
try {
- const resData = await startTransCode({url: row.url, id: row.PLS_ID}); // 调用后端“启动转码”接口
+ // 直接使用RTSP URL,不需要调用startTransCode接口
data.transcodeVideoDialog.visible = true; // 显示播放器弹窗
- data.transcodeVideoDialog.id = row.PLS_ID; // 显示播放器弹窗
- data.transcodeVideoDialog.src =
- "http://172.16.70.226:7811/" + resData.videoUrl + "stream.m3u8";
+ data.transcodeVideoDialog.id = row.PLS_ID; // 设置视频ID
+ data.transcodeVideoDialog.src = row.url; // 直接使用RTSP URL
} catch (error) {
- ElMessage.error("启动转码失败: " + (error.message || "未知错误"));
+ ElMessage.error("播放视频失败: " + (error.message || "未知错误"));
}
};
@@ -233,4 +212,4 @@ const fnDeleteVideo = async (row) => {
};
-
+
\ No newline at end of file