Serveur multimédia NodeJS et RED 5 via RTMP

C’est plus une question conceptuelle que directe.

Est-il généralement possible d’implémenter une solution de type flash pour diffuser l’audio (indépendamment de l’endroit d’où proviennent les données du stream, par exemple webRTC ou autre) en HTML5 et nodeJS / binaryJS. Si oui, comment vous y prendriez-vous?

Il n’y a eu qu’une seule enquête sur stackoverflow trouvée ici et depuis 2010. NodeJS et HTML5 ont grandi et mûri depuis.

Ce que les gens font habituellement: Lorsque vous utilisez le streaming multimédia (vidéo ou audio) sur un serveur, rien ne vaut Flash au moment actuel de l’arrivée de getUserMedia () . % des utilisateurs du navigateur pourront l’utiliser.

La pratique générale de diffuser des données sur le serveur consiste à utiliser une application client Flash ou Flex qui se connecte ensuite à un serveur multimédia alimenté par protocole RTMP, comme RED5 , FMS ou Wowza . Par exemple, l’application cliente qui envoie le microphone via RTMP pourrait ressembler à (version simplifiée)

import flash.net.NetStream; private var myMic:Microphone; private var nc:NetConnection; private var ns:NetStream nc = new NetConnection(); ns = new NetStream(nc); nc.connect(rtmp://localhost/serverApp); myMic = Microphone.getMicrophone(); ns.attachAudio(myMic); 

Avec une application serveur, il est facile de diffuser des données sur le serveur.

Ce que je voudrais faire: avoir un serveur d’applications exécuté sur nodeJS (éventuellement implémentant socketIO et binaryJS ) qui intercepte le stream RTMP entrant. Quelque chose comme

 //require var rtmp = require('node-rtmp'), var fs = require('fs'); //rtmp server address var rtmpServer = 'rtmp://localhost'; //create a binary server listening that receives stream data var RTMPServer = rtmp.RTMPServer(); var server = RTMPServer ({port: 1935}); server.on('connection', function(client){ //check if user is allowed to do so rtmp.newStream(client.stream); }); 

Peut-être serait-il préférable d’utiliser socketIO pour différencier les interactions entre utilisateurs via eventEmitters.

Quels pourraient être les avantages: en général, il peut sembler superflu de faire ce genre d’approche, mais pour moi, il pourrait y avoir des avantages et je voudrais aussi que vous commentiez cela.

  • validation facile de l’interaction de l’utilisateur en exécutant par exemple express et socketIO
  • Implémentation hybride d’un flash (via RTMP) et getUserMedia () (via des mécanismes de transport binarys en ajoutant binaryJS et Mozilla AudioAPI)
  • Si getUserMedia () est entièrement pris en charge, les implémentations Flash peuvent être facilement supprimées
  • plus de contrôle sur le suivi rtmp et l’interaction utilisateur en général
  • une implémentation plus facile dans les frameworks de serveur

MISE À JOUR: J’ai parlé à M. Malcontenti-Wilson qui est responsable du seul paquetage node-rtmp qui a été écrit mais qui a été interrompu il y a 8 mois car il était mal écrit et il a heurté un obstacle. Quelqu’un qui a utilisé ceci ou a pu vérifier le code?

MISE À JOUR 2: M. Malcontenti-Wilson vient de m’envoyer un mail pour attirer mon attention sur node-mtrude (une sorte de nom étrange) qui fait en sorte que nous voudrions probablement. Quelqu’un at-il travaillé avec ce type de paquet?

Oui c’est possible, mais vous avez quelques problèmes.

1) Red5 est terriblement sous-documenté et bogué.

2) rtmpe / rtmps

3) performance / évolutivité

4) 1 à 3 sont des choses que vous pouvez surmonter, mais pas sans connaître intimement la dissortingbution des médias et tous les problèmes associés. Au moment où vous aurez terminé, vous serez l’une des 800 personnes qui le comprendront vraiment. Vous devrez parcourir un long chemin pour résoudre des problèmes inattendus.

Il existe maintenant une plate-forme appelée vertx available où le développement de polygot est possible. Red5 Jar peut donc être inclus sur votre serveur avec du code existant et peut exécuter un serveur de streaming rtmp. Du côté du client, vous pouvez avoir quelque chose comme video.js ou un lecteur JW pour lire le stream et avoir la politique de repli Flash. La publication côté client, je ne sais pas si une implémentation RTMP basée sur JavaScript est disponible ou non.

WCS est une implémentation hybride pour les protocoles compatibles Flash, WebRTC, SIP, Websockets et Wowza: RTSP, RTMP.

Schéma de conversion de stream: entrer la description de l'image ici

C’est une vieille question mais, je poste cette alternative pour les gens qui vont tomber dessus. Node media server est un bon serveur de médias que je l’ai utilisé dans l’un de mes poc support rtmp https://www.npmjs.com/package/node-media-server

son repo git est également très animé, en fait j’ai fait quelques changements avant de l’utiliser dans mon poc. Et le code est également bien écrit. https://github.com/illuspas/Node-Media-Server

PS il fonctionne comme un charme avec OBS pour le streaming en direct.