diff --git a/electron/electron.js b/electron/electron.js
index e8b906b..15a1a85 100644
--- a/electron/electron.js
+++ b/electron/electron.js
@@ -1,9 +1,106 @@
// electron/electron.js
const path = require('path');
-const { app, BrowserWindow } = require('electron');
+const { app, BrowserWindow, ipcMain } = require('electron');
const isDev = process.env.IS_DEV == "true" ? true : false;
+// rtsp相关,ffmpeg-static会自动下载对应平台windos,linux,mac(intle),mac(M1版本)的ffmpeg二进制文件
+const ffmpegPath = require('ffmpeg-static')
+/**
+ stream相关配置及方法
+ name = options.name
+ streamUrl = options.streamUrl
+ width = options.width
+ height = options.height
+ wsPort = options.wsPort
+ nputStreamStarted = false
+ stream = undefined
+ ffmpegPath = options?.ffmpegPath ?? ffmpeg
+ stop()
+ */
+ const Stream = require('node-rtsp-stream')
+ /**
+ * rtsp列表
+ * interface {
+ * rtspUrl: {
+ * ws: websocket地址
+ * stream: stream实例
+ * }
+ * }
+ */
+ const rtspOpenders = {}
+ let addPort = 9000
+
+/**
+ * 开启rtsp
+ * @param rtsp {String} rtsp流地址
+ */
+
+
+ipcMain.on('openRtsp', (event, rtsp) => {
+ /** 判断是否已开启,若已开启,直接返回ws地址, 未开启则先开启再返回 */
+ if (rtspOpenders[rtsp]) {
+ event.returnValue = {
+ code: 200,
+ msg: '开启成功',
+ ws: rtspOpenders[rtsp].ws
+ }
+ } else {
+ addPort++
+ const stream = new Stream({
+ name: `socket-${addPort}`,
+ streamUrl: rtsp,
+ wsPort: addPort,
+ ffmpegPath: app.isPackaged ? ffmpegPath.replace('app.asar', 'app.asar.unpacked') : ffmpegPath,
+ ffmpegOptions: {
+ '-stats': '',
+ '-r': 30
+ }
+ }).on('exitWithError', () => {
+ stream.stop()
+ delete rtspOpenders[rtsp]
+ event.returnValue = {
+ code: 400,
+ msg: '开启失败'
+ }
+ })
+ rtspOpenders[rtsp] = {
+ ws: `ws://localhost:${addPort}`,
+ stream: stream
+ }
+ event.returnValue = {
+ code: 200,
+ msg: '开启成功',
+ ws: rtspOpenders[rtsp].ws
+ }
+ }
+})
+
+/**
+ * 关闭rtsp
+ */
+ipcMain.on('closeRtsp', (event, rtsp) => {
+ if (rtspOpenders[rtsp]) {
+ // 停止解析
+ rtspOpenders[rtsp].stream.stop()
+ // 删除该项
+ delete rtspOpenders[rtsp]
+ // 返回结果
+ event.returnValue = {
+ code: 200,
+ msg: '关闭成功'
+ }
+ } else {
+ event.returnValue = {
+ code: 400,
+ msg: '未找到该rtsp'
+ }
+ }
+})
+
+
+///////////////////////////////////////////
+
function createWindow() {
// Create the browser window.
const mainWindow = new BrowserWindow({
@@ -14,7 +111,11 @@ function createWindow() {
javascript: true,
plugins: true,
allowRunningInsecureContent: true,
+ // 允许web断使用node
nodeIntegration: true,
+ contextIsolation: false,
+ // 同源策略关闭
+ webSecurity: false,
},
});
diff --git a/package.json b/package.json
index 99f9d79..8130076 100644
--- a/package.json
+++ b/package.json
@@ -2,10 +2,10 @@
"name": "zgx",
"version": "3.5.1",
"author": {
- "name": "zgx",
- "email": "zgx@163.com"
+ "name": "ZGX",
+ "email": "ZGX@163.com",
+ "url": "https://github.com/jeecgboot/jeecgboot-vue3"
},
- "description":"边海防智能监控站",
"main": "electron/electron.js",
"build": {
"appId": "com.my-website.my-app",
@@ -14,6 +14,7 @@
"mac": {
"category": "public.app-category.utilities"
},
+
"nsis": {
"oneClick": false,
"allowToChangeInstallationDirectory": true
@@ -35,10 +36,11 @@
},
"scripts": {
"electron:serve": "cross-env IS_DEV=true electron .",
- "electron:start": "npm run dev & npm run electron:serve",
+ "electron:start": "npm run dev & npm run electron:serve",
"electron:dev": "concurrently \"npm run dev\" \"npm run electron:serve\" ",
"electron:build.win": "npm run build && electron-builder --win --dir",
"electron:builder": "electron-builder --win --dir",
+ "electron:builder.ia32": "electron-builder --win --ia32",
"bootstrap": "pnpm install",
"serve": "npm run dev",
"dev": "vite",
@@ -97,8 +99,10 @@
"electron-packager": "^17.1.2",
"emoji-mart-vue-fast": "^11.1.1",
"enquire.js": "^2.1.6",
+ "ffmpeg-static": "^5.2.0",
"intro.js": "^5.1.0",
"jquery": "^3.7.0",
+ "jsmpeg-player": "^3.0.3",
"lodash": "^4.17.21",
"lodash-es": "^4.17.21",
"lodash.get": "^4.4.2",
@@ -106,6 +110,7 @@
"mitt": "^3.0.1",
"mockjs": "^1.1.0",
"moment": "^2.29.4",
+ "node-rtsp-stream": "^0.0.9",
"nprogress": "^0.2.0",
"particles.vue3": "^2.11.0",
"path-to-regexp": "^6.2.0",
diff --git a/src/views/system/loginmini/ZGXLoginRTSPTest.vue b/src/views/system/loginmini/ZGXLoginRTSPTest.vue
new file mode 100644
index 0000000..aa8f458
--- /dev/null
+++ b/src/views/system/loginmini/ZGXLoginRTSPTest.vue
@@ -0,0 +1,181 @@
+
+
+
+
+
+
+
+
+
+ {{msg}}
+
+
+
+
+
+
+
+ {{msg2}}
+
+
+
+
+
+
+
+ {{msg3}}
+
+
+
+
+
+
+
+ {{msg4}}
+
+
+
+
+
+
+
+ {{msg5}}
+
+
+
+
+
+
+
+ {{msg6}}
+
+
+
+
+