Bonjour a toutes et à tous x)

Je suis a ce moment même entrain de développer un serveur qui recoit des trames (H264) et les retransmet en Websocket pour pouvoir décoder l'H264 sur internet avec BroadWay.

J'ai donc réussi et cela fonctionne a merveille mais pour 1 client ! (je n'ai pas fais l'architecture pour et ne sait pas comment m'y prendre)

Mon "Relay Websocket qui recoit les trames H264" :
Code :Sélectionner tout -Visualiser dans une fenêtre à part
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
 
 
"use strict";
 
const net = require('net')
const WSServer = require('uws').Server
const Split = require('stream-split')
const NALSeparator = new Buffer([0, 0, 0, 1])
const express = require('express')
const systemd = require('systemd')
const app = express()
 
var wsServer, conf = require('nconf'),
  headers = []
conf.argv().defaults({
  tcpport: 8081,
  wsport: 8082,
  limit: 150
})
 
function broadcast(data) {
  wsServer.clients.forEach((ws) => {
    if (ws.readyState === 1) {
      ws.send(data, { binary: true })
    }
  })
}
 
if (conf.get('tcpport')) {
  const tcpServer = net.createServer((socket) => {
    console.log('streamer connected')
    socket.on('end', () => {
      console.log('streamer disconnected')
    })
    headers = []
    const NALSplitter = new Split(NALSeparator)
    NALSplitter.on('data', (data) => {
      if (wsServer && wsServer.clients.length > 0) {
        if (headers.length < 3) headers.push(data)
        broadcast(data)
      }
    }).on('error', (e) => {
      console.log('splitter error ' + e)
      process.exit(0)
    })
    socket.pipe(NALSplitter)
  })
  tcpServer.listen(conf.get('tcpport'))
  if (conf.get('tcpport') == 'systemd') {
    console.log('TCP server listening on systemd socket')
  } else {
    var address = tcpServer.address()
    if (address) console.log(
      `TCP server listening on ${address.address}:${address.port}`)
  }
}
 
if (conf.get('wsport')) {
  wsServer = new WSServer({ port: conf.get('wsport') })
  console.log(
    `WS server listening on`, conf.get('wsport')
  )
  wsServer.on('connection', (ws) => {
    if (wsServer.clients.length >= conf.get('limit')) {
      console.log('client rejected, limit reached')
      ws.close()
      return
    }
    console.log('client connected, watching ' + wsServer.clients.length)
    for (let i in headers) {
      ws.send(headers[i])
    }
    ws.on('close', (ws, id) => {
      console.log('client disconnected, watching ' + wsServer.clients.length)
    })
  })
}


ici le serveur reçoit les trames envoyées par netcat avec des parametres raspistill (pour expliquer un peu) et derrière cela j'ai un decoder H264 https://github.com/mbebenita/Broadway web qui lit sur le websocket port 8082

jusqu'à la OK.

J'aimerais cependant que plusieurs clients (qui font la commande raspistill + netcat) puissent se connecter au serveur nodejs et avoir un stream de + qui s'affiche sur la page web !

J'ai pensé a recevoir tout les stream avec le serveur node juste au dessus et if il y a 2 connections alors on crée un nouveau uws avec le meme port donc 8082/quelquechose !!

Je vous remercie d'avance.

Pierre