【发布时间】:2019-05-30 19:26:52
【问题描述】:
我在 node.js 中打开一个子进程以使用 VLC 启动 RTSP 流。然后,我想在电子应用程序发送命令后终止该进程。
这是我编写的代码。有什么我做错了,因为即使代码运行,子进程也不会被杀死。我检查了 cam 不是未定义的,它实际上进入了那个代码块。
const { dialog, ipcMain, BrowserWindow} = require('electron');
const {url} = require('url');
var net = require('net');
var spawn = require('child_process').exec;
var cam;
class streamHandler {
constructor(){
this.sendAndReceiveMessageListener();
}
sendAndReceiveMessageListener(){
ipcMain.on('http-request', (event)=>{
let message = "Starting the video stream";
cam = spawn('"C:\\Program Files (x86)\\VideoLAN\\VLC\\vlc.exe" --qt-start-minimized rtsp://192.168.0.75/live --sout "#transcode{acodec=vorb, vcodec=theo}:standard{access=http, mux=ogg, dst=localhost:8090/}"', function(error, stdout, stderr){});
event.sender.send('http-response', (message));
});
ipcMain.on('http-end-stream-request', (event)=>{
let message = "Video stream ended.";
if (typeof cam !== 'undefined' && cam !== null){
cam.kill('');
}
event.sender.send('http-end-stream-response', (message));
});
}
spawnVLC(){
console.log()
}
}
module.exports = new streamHandler();
【问题讨论】:
-
“即使代码运行通过”。只是为了确保我理解,您是否确认正在调用
cam.kill('')?其次,你为什么将一个空字符串传递给kill?只需致电cam.kill() -
嗨,我尝试使用 cam.kill(),仍然无法正常工作。我已经验证了 cam.kill() 确实被调用它只是没有做任何事情,我试图理解为什么。我已经尝试了 kill() 函数也可以采用的所有不同的字符串参数,但没有任何运气。
-
当您生成进程时,您是否还可以为
close事件和error事件添加处理程序,并查看在调用kill()时是否有任何处理程序被命中?