NodeJS et Red 5 media server via RTMP

C'est plus conceptuel question plutôt qu'un "comment faire".

est-il généralement possible de mettre en œuvre une solution de type flash pour diffuser l'audio (indépendamment de l'endroit où nous obtenons les données de flux, par exemple webRTC ou autre) dans HTML5 et nodeJS/binaryJS. Si oui, comment voulez-vous aller à ce sujet?

il n'y a eu qu'une seule enquête sur stackoverflow trouvé ici et its de 2010. NodeJS et HTML5 ont poussé et mûri depuis lors.

Ce que les gens font d'habitude: Lors de l'utilisation de streaming multimédia (vidéo ou audio) à un serveur, il n'y a certainement rien qui bat Flash à l'heure actuelle jusqu'à l'arrivée complète de getUserMedia() - qui pourrait très honnêtement prendre un certain temps jusqu'à ce que 99% des utilisateurs du navigateur pourront l'utiliser à tous.

La pratique générale pour streamer des données vers le serveur est en utilisant un client Flash ou Flex application qui se connecte alors à un serveur multimédia alimenté par le protocole RTMP comme RED5 , FMS ou Wowza . Par exemple, l'application client qui envoie le microphone sur 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 de serveur On est facilement capable de streamer des données vers le serveur.

Ce que je voudrais faire: Avoir un serveur d'applications tournant sur nodeJS (implémentant éventuellement socketIO et binaryJS ) qui capte le flux 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 utilisateur via les eventEmitters.

What peut-être les avantages: en général, il semble comme un peu au-dessus de la tête pour faire ce genre d'approche, mais pour moi, il pourrait y avoir des avantages et je voudrais aussi que vous commentez sur ce point.

  • 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 binaires en ajoutant binaryJS et Mozilla AudioAPI)
  • si getUserMedia () est entièrement supporté, les implémentations flash peuvent être abandonnées facilement
  • plus de contrôle sur le suivi rtmp et l'interaction de l'utilisateur en général
  • mise en œuvre plus facile dans les cadres de serveur

mise à JOUR: J'ai parlé à M. Malcontenti-Wilson qui est responsable du seulement noeud-paquet rtmp qui a été écrit mais abandonné il y a 8 mois car il était mal écrit et il a frappé un barrage. Quelqu'un qui a utilisé ça ou qui 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 (sorte de nom bizarre) qui fait un peu ce que nous voudrions probablement. Quelqu'un a travailler avec ce type de forfait?

57
demandé sur Community 2012-10-24 19:33:50

4 réponses

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

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

2) rtmpe/rtmps

3) la performance/évolutivité

4) 1 à 3 sont des choses que vous pouvez surmonter, mais pas sans apprendre à connaître la distribution des médias et toutes les questions qui y sont associées très intimement. Quand tu auras fini, tu seras l'une des 800 personnes qui seront vraiment la comprendre. Vous devrez suivre un long chemin pour résoudre des problèmes inattendus.

2
répondu Steve Kallestad 2013-04-13 13:31:56

il y a maintenant une plate-forme appelée vertx disponible où le développement de polygot est possible. Ainsi, red5 jar peut être inclus du côté de votre serveur avec du code existant et peut exécuter un serveur de streaming rtmp. Du côté client, vous pouvez avoir quelque chose comme la vidéo.js ou JW player pour jouer le stream back et a la Politique de flashfall back. En ce qui concerne la publication côté client, Je ne suis pas sûr qu'il y ait une implémentation RTMP basée sur javascript disponible ou non.

1
répondu Vivek 2013-12-31 12:15:35

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

conversion de Flux régime: enter image description here

1
répondu John Doe 2015-09-11 21:29:37

c'est une vieille question mais, je poste cette alternative pour les gens qui vont trébucher là-dessus. Nœud de serveur de médias est plutôt une bonne media server je l'ai utilisé dans un de mes poc c'soutien rtmp https://www.npmjs.com/package/node-media-server

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

PS. ses travaux comme un charme avec OBS pour le streaming en direct.

0
répondu ashish shiwalkar 2018-07-18 06:59:02