Javascript 重新启动ffmpeg子进程?
我正在使用ffmpeg和child_进程启动多个RTSP流。其中一些RTSP流在第一次连接期间未连接并失败,需要不断重试重新连接以启动流 以下是ffmpeg选项:Javascript 重新启动ffmpeg子进程?,javascript,node.js,ffmpeg,rtsp,child-process,Javascript,Node.js,Ffmpeg,Rtsp,Child Process,我正在使用ffmpeg和child_进程启动多个RTSP流。其中一些RTSP流在第一次连接期间未连接并失败,需要不断重试重新连接以启动流 以下是ffmpeg选项: setOptions() { const options = { "-rtsp_transport": "tcp", "-i": this.url, "-f": "mpegts",
setOptions() {
const options = {
"-rtsp_transport": "tcp",
"-i": this.url,
"-f": "mpegts",
"-s": "1280x720",
"-speed": "6",
"-codec:v": "mpeg1video",
"-codec:a": "mp2",
"-stats": "",
"-b:v": "1000k",
"-ar": "44100",
"-r": 30,
"-bf": 0,
"-ac": "1",
"-b:a": "128k",
"-muxdelay": "0.001",
};
let params = [];
for (let key in options) {
params.push(key);
if (String(options[key]) !== "") {
params.push(String(options[key]));
}
}
params.push("-");
return params;
}
下面是我用来启动进程的方法,以及在连接失败时重新启动进程的“尝试”:
startStream() {
const self = this;
const wss = new WebSocket.Server({ port: this.port });
const childSpawn = child_process.spawn(
"ffmpeg",
this.setOptions(this.url),
{
detached: true,
}
);
childSpawn.stdout.on("data", (data) => {
wss.clients.forEach((client) => {
client.send(data);
/// console.log(data);
if (self.retries > 0) {
console.log("-- STREAM HAS CONNECTED");
}
});
self.child = childSpawn;
});
childSpawn.on("close", (code, signal) => {
console.log("process closed");
if (code === 1) {
setTimeout(() => {
console.log("retrying stream", self.url);
self.startStream();
}, 50000);
}
});
}
我们的想法是等待X秒,然后再次尝试重新启动
这样做的正确和最好的方法是什么