Simplemente no podrás llegar de un navegador a RTMP sin involucrar de alguna manera a un servidor. Por lo tanto, las implementaciones de WebRTC en el lado del servidor, se pueden hacer, es un poco complicado, la especificación de WebRTC es grande e intimidante. Esto ha mejorado mucho recientemente, hay proyectos como Pyon que realmente facilitan esto mucho más, pero aún es bastante intimidante.
Entonces, estás pensando en una implementación de WebRTC en el lado del servidor, pero ahora esa implementación es simplemente Chrome sin cabeza, y esto se puede hacer. En realidad, se hace muy bien, una vez que básicamente puedes tener un chat, la instancia de Chrome sin cabeza simplemente puede unirse a ese chat y grabarlo. Y lo bueno aquí es que estás utilizando tecnologías de navegador, puedes hacer superposiciones, puedes hacer lo que harías en el navegador, y luego está en la transmisión. Es realmente genial. El problema es que ahora tienes que ejecutar Chrome a gran escala para cada persona que quiera hacer una transmisión en vivo, lo que puede ser complicado.
Ok, ¿y si solo usamos una parte de esa especificación de WebRTC, obtener medios del usuario, que es el proceso de obtener el micrófono y la cámara del navegador, y luego simplemente enviaremos eso a través de WebSockets. Los WebSockets son comprensibles. Las limitaciones del lado del servidor son comunes, y son cosas con las que todos hemos trabajado, o muchos de nosotros hemos trabajado en el pasado, así que intentemos eso. Puede que estés pensando, ¿cómo funcionaría eso? Primero, solicitaríamos los medios del navegador, así que me refería a obtener medios del usuario anteriormente. Puedes establecer diferentes restricciones. Simplemente estableceremos audio y video en verdadero, pero podrías ajustarlo si quisieras. Estableceremos ese flujo, lo agregaremos a un elemento video para poder verlo, luego capturaremos ese flujo y luego pasaremos ese flujo al grabador de medios, a una instancia del grabador de medios, o crearemos una nueva instancia de la API del grabador de medios, que simplemente te permite grabar contenido desde un navegador. Y luego, ese grabador expondrá este evento data disponible, por lo que cada vez que ese evento se active, tendremos un fragmento de video, así que simplemente enviaremos ese fragmento de video a través de una conexión WebSocket . Ahora, eso cumplirá con todo el proceso de creación de esa conexión WebSocket, pero suponiendo que tenemos una conexión WebSocket, ahora podemos simplemente enviar ese video a través de esa conexión WebSocket, lo cual es genial. Y luego, el lado del servidor también es bastante simple y directo. Tenemos este WebSocket, y cada vez que recibimos una nueva conexión, iniciaremos un proceso FFmpeg . Aquí, estoy usando un punto final RTMP de MUX, pero podría ser cualquier cosa. Haremos alguna limpieza si el proceso FFmpeg muere, o si el WebSocket se cierra, pero de lo contrario, cada vez que recibamos un nuevo mensaje y sea un búfer, simplemente lo escribiremos en FFmpeg y luego FFmpeg lo entregará a través de RTMP. Entonces esto funciona bastante bien. Si quieres ver una demostración de esto, puedes echar un vistazo a Glitch. Todo está funcionando. Puedes verlo funcionando en el navegador. Es bastante genial. Funciona bastante bien. Aquí, solo tienes que poner una clave de transmisión. Si quieres remixar el Glitch y usar un punto final RTMP diferente, está bien. También escribí una publicación de blog sobre todo esto.
Comments