Javascript 如何拥有多个websocket RTSP流?

Javascript 如何拥有多个websocket RTSP流?,javascript,node.js,websocket,ffmpeg,jsmpeg,Javascript,Node.js,Websocket,Ffmpeg,Jsmpeg,在花了一些时间阅读了关于如何开发RTSP和WebSocket流的各种开源项目之后,我几乎构建了一个简单的项目,它允许我在页面上显示多个流 我有一个只使用下面代码的一个流的工作示例。数组中的一个URL通过WebSocket发送到客户端,通过JSMPeg,它可以成功地显示它 但是,我不知道如何构建这样一个系统:我有多个套接字,每个套接字中都有一个RTSP流,以及如何为每个套接字url提供自己的id。方法是加密url,当客户端请求流列表时,将其作为套接字id发回,并使用JSMPeg请求该数据 服务器:

在花了一些时间阅读了关于如何开发RTSP和WebSocket流的各种开源项目之后,我几乎构建了一个简单的项目,它允许我在页面上显示多个流

我有一个只使用下面代码的一个流的工作示例。数组中的一个URL通过WebSocket发送到客户端,通过JSMPeg,它可以成功地显示它

但是,我不知道如何构建这样一个系统:我有多个套接字,每个套接字中都有一个RTSP流,以及如何为每个套接字url提供自己的id。方法是加密url,当客户端请求流列表时,将其作为套接字id发回,并使用JSMPeg请求该数据

服务器:

class Stream extends EventEmitter {
  constructor() {
    super();
    this.urls = ["rtsp://someIPAddress:554/1"];
    this.urls.map((url) => {
      this.start(url);
    });
  }
  start(url) {
    this.startStream(url);
  }
  setOptions(url) {
    const options = {
      "-rtsp_transport": "tcp",
      "-i": url,
      "-f": "mpegts",
      "-codec:v": "mpeg1video",
      "-codec:a": "mp2",
      "-stats": "",
      "-b:v": "1500k",
      "-ar": "44100",
      "-r": 30,
    };
    let params = [];
    for (let key in options) {
      params.push(key);
      if (String(options[key]) !== "") {
        params.push(String(options[key]));
      }
    }
    params.push("-");
    return params;
  }
  startStream(url) {
    const wss = new WebSocket.Server({ port: 8080 });
    this.child = child_process.spawn("ffmpeg", this.setOptions(url));
    this.child.stdout.on("data", (data) => {
      wss.clients.forEach((client) => {
        client.send(data);
      });
      return this.emit("data", data);
    });
  }
}

const s = new Stream();
s.on("data", (data) => {
  console.log(data);
});
在构造函数中,有一个URL数组,而我这里只有一个,我想添加多个。我创建了一个websocket并将其发回。我想做的是用
Crypto.createHash('md5').update(URL).digest('hex')
加密该URL,给它自己的ID并基于该ID创建一个websocket,将数据发送到该websocket,并将其与其他ID列表一起发送到客户端

客户:

  <canvas id="video" style="width: 100%"></canvas>
  <script type="text/javascript">
    var player = new JSMpeg.Player("ws://localhost:8080", {
      loop: true,
      autoplay: true,
      canvas: document.getElementById("video"),
    });
  </script>

var player=new JSMpeg.player(“ws://localhost:8080”{
循环:对,
自动播放:对,
画布:document.getElementById(“视频”),
});
我想在这里做的是从/api/streams请求并返回一个streams/socket id数组,然后从该数组请求它们

但是我如何用多个URL打开多个套接字呢