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