重新启动ffmpeg child_process?

问题描述

我正在使用ffmpeg和child_process启动多个RTSP流。这些RTSP流中的某些流在第一次连接期间不会连接并失败,并且需要不断地重试重新连接才能启动流。

以下是ffmpeg选项:

  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秒钟,然后尝试重新启动。

正确的最佳方法是什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)