江西航空项目前端,已搭建好的vue-electron
Satori
2022-02-17 358d29535fd9e0ab56a68acf5c72c82330fe52e1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
'use strict'
 
import {app, protocol, BrowserWindow,ipcMain} from 'electron'
import {createProtocol} from 'vue-cli-plugin-electron-builder/lib'
 
import ffmpeg from 'fluent-ffmpeg'
 
 
const path         = require('path')
// import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
const isDevelopment = process.env.NODE_ENV !== 'production'
 
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
    {scheme: 'app', privileges: {secure: true, standard: true}}
])
 
async function createWindow() {
    // Create the browser window.
    const win = new BrowserWindow({
        // fullscreen:true,
        // frame:false,
        webPreferences: {
            enableRemoteModule: true,
            nodeIntegration: true,
            contextIsolation: false  //  把这一项加上错误就会消失
        }
    })
 
    win.setMenu(null);
 
    ipcMain.on('pushStream',()=>{
 
        let outputPath = 'rtmp://127.0.0.1:1935/live/home';
 
        let ffmpegPath = "D:/ffmpeg.exe"
 
 
 
        ffmpeg()
            .input('desktop') // 推送桌面配置
            .setFfmpegPath(ffmpegPath)
            .inputFormat('gdigrab')
            .inputOptions('-offset_x 0')
            .inputOptions('-offset_y 0')
            .inputOptions('-video_size 1920x1080')
            .addOptions([
                "-vcodec libx264",
                "-preset ultrafast",
                "-acodec aac",
                "-pix_fmt yuv420p",
                "-tune zerolatency",
                "-vb 400k",
            ])
            .on('start', function(cmd) {
                console.log('Started ' + cmd);
            })
            .on('error', function(err) {
                console.log('An error occurred: ' + err.message);
            })
            .on('end', function() {
                console.log('Finished encoding');
            })
            .output(outputPath, {
                end: true
            })
            .format("flv")
            .run();
        //
        //
 
 
    })
 
 
    if (process.env.WEBPACK_DEV_SERVER_URL) {
        // Load the url of the dev server if in development mode
        if (!process.env.IS_TEST) win.webContents.openDevTools()
        await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL)
    } else {
        createProtocol('app')
        // Load the index.html when not in development
        win.loadURL('app://./index.html')
 
    }
}
 
 
// Quit when all windows are closed.
app.on('window-all-closed', () => {
    // On macOS it is common for applications and their menu bar
    // to stay active until the user quits explicitly with Cmd + Q
    if (process.platform !== 'darwin') {
        app.quit()
    }
})
 
app.on('activate', () => {
    // On macOS it's common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (BrowserWindow.getAllWindows().length === 0) createWindow()
})
 
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on('ready', async () => {
    createWindow()
})
 
ipcMain.on('close-all',((event, args) => {
 
 
    event.returnValue = 123;
    // app.quit();
}))
 
 
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
    if (process.platform === 'win32') {
        process.on('message', (data) => {
            if (data === 'graceful-exit') {
                app.quit()
            }
        })
    } else {
        process.on('SIGTERM', () => {
            app.quit()
        })
    }
}