node.js - seguro - rtmp node js
Servidor de medios NodeJS y RED 5 a través de RTMP (3)
Esta es más una pregunta conceptual que un "cómo hacer esto" directo.
En general, es posible implementar una solución tipo flash para transmitir el audio (independientemente de donde obtenemos los datos de la transmisión, por ejemplo, webRTC u otro) en HTML5 y nodeJS / binaryJS. Si es así, ¿cómo harías con esto?
Solo se ha realizado una consulta sobre stackoverflow aquí y es de 2010. NodeJS y HTML5 han crecido y madurado desde entonces.
Lo que la gente suele hacer: cuando se usa la transmisión multimedia (es decir, video o audio) a un servidor, definitivamente no hay nada que supere a Flash en el momento actual hasta la plena llegada de getUserMedia () , lo que honestamente podría demorar hasta 99 % de los usuarios del navegador podrán usarlo en absoluto.
La práctica general de transmitir datos al servidor es mediante el uso de una aplicación Flash o Flex cliente que luego se conecta a un servidor de medios de comunicación con protocolo RTMP como RED5 , FMS o Wowza . Por ejemplo, la aplicación cliente que envía la entrada del micrófono a través de RTMP podría verse como (versión simplificada)
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);
Junto con una aplicación de servidor, uno puede fácilmente transmitir datos al servidor.
Lo que me gustaría hacer: tener un servidor de aplicaciones ejecutándose en nodeJS (posiblemente implementando socketIO y binaryJS ) que atrape la transmisión RTMP entrante. Algo como
//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);
});
Posiblemente sería mejor usar socketIO para diferenciar entre las interacciones del usuario a través de eventEmitters.
¿Cuáles podrían ser las ventajas? En términos generales, parece un poco sobrecargado hacer este tipo de acercamiento, pero para mí puede haber ventajas y también me gustaría que comenten sobre esto.
- fácil validación de la interacción del usuario ejecutando, por ejemplo, express y socketIO
- implementación híbrida de un flash (a través de RTMP) y getUserMedia () (a través de mecanismos de transporte binarios mediante la adición de binaryJS y Mozilla AudioAPI)
- si getUserMedia () es totalmente compatible, las implementaciones flash se pueden descartar fácilmente
- más control sobre el seguimiento de rtmp y la interacción del usuario en general
- implementación más fácil en marcos de servidor
ACTUALIZACIÓN: He hablado con el Sr. Malcontenti-Wilson, quien es responsable del único paquete node-rtmp que se escribió, pero se suspendió hace 8 meses, ya que estaba mal escrito y llegó a un obstáculo. ¿Alguien que usó esto o pudo verificar el código?
ACTUALIZACIÓN 2: El Sr. Malcontenti-Wilson simplemente me envía un correo electrónico para llamar mi atención sobre node-mtrude (una especie de nombre extraño) que está haciendo lo que probablemente querríamos. ¿Alguien ha trabajado con este tipo de paquete?
Ahora hay una plataforma llamada Vertx disponible donde es posible el desarrollo de los polígonos. Entonces, el contenedor rojo5 se puede incluir en su servidor con el código existente y podría ejecutar un servidor de transmisión rtmp. En el lado del cliente puedes tener algo como video.js o JW Player para reproducir la transmisión y tiene la política de flash back. La publicación del lado del cliente, no estoy seguro de si hay alguna implementación de RTMP basada en JavaScript disponible o no.
Sí, es posible, pero tienes algunos problemas.
1) Red5 está terriblemente poco documentado y con errores.
2) rtmpe / rtmps
3) rendimiento / escalabilidad
4) 1 a 3 son cosas que puedes superar, pero no sin conocer la distribución de medios y todos sus problemas asociados de manera muy íntima. Para cuando hayas terminado, serás uno de 800 personas que realmente lo entienden. Tendrá que recorrer un largo camino para resolver problemas inesperados.
WCS es una implementación híbrida para los protocolos Flash, WebRTC, SIP, Websockets y Wowza compatibles: RTSP, RTMP.