Transmitiendo en vivo desde un navegador...con otro navegador

Rate this content
Bookmark

Existen otras formas de transmitir video en vivo desde un navegador a un punto final RTMP, pero ¿qué pasa si queremos interactuar con ese flujo primero? Y no solo interactuar escribiendo filtros oscuros de ffmpeg, sino simplemente con buen HTML y CSS. ¡Hagámoslo! Hablaremos sobre cómo permitir que tus transmisores vayan en vivo directamente desde su navegador utilizando Chrome sin cabeza y ffmpeg.

FAQ

Mux es una empresa que se dedica a la infraestructura de video en línea para desarrolladores, ofreciendo soluciones como APIs para transmisión en vivo.

Sí, Mux permite la transmisión en vivo directamente desde el navegador sin necesidad de descargar software de terceros como OBS.

El chat en vivo involucra comunicación directa y sincrónica entre dos o más navegadores con baja latencia, mientras que la transmisión en vivo es de uno a muchos espectadores con una latencia mayor, generalmente sin expectativa de comunicación bidireccional.

Para el chat en vivo se utiliza WebRTC que permite baja latencia en la comunicación directa, mientras que la transmisión en vivo utiliza RTMP y HLS para manejar grandes volúmenes de espectadores.

No, actualmente no es posible llegar lo suficientemente bajo en la pila de red del navegador para convertir WebRTC a RTMP directamente.

Una de las técnicas incluye usar WebRTC en un servidor, y otra involucra ejecutar una instancia de Chrome en modo sin cabeza en el servidor para manejar y transmitir el contenido en vivo.

El uso de Chrome en modo sin cabeza consume significativamente muchos recursos del servidor y requiere una orquestación compleja para manejar múltiples flujos de entrada y salida.

Puedes encontrar más detalles y explicaciones en la charla de Nick en All Things RTC sobre la demostración de transmisión / difusión de multiplexación de cromo, disponible en YouTube.

Matt McClure
Matt McClure
8 min
18 Jun, 2021

Comments

Sign in or register to post your comment.

Video Summary and Transcription

Esta charla discute el chat en vivo y la transmisión en vivo utilizando WebRTC y RTMP. Explora cómo ejecutar WebRTC en un servidor a través de Chrome y enfoques alternativos como el uso de GetUserMedia y la API Chrome.tabCapture. También se discute el uso de una instancia completa de Chrome para la transmisión en vivo de WebRTC y RTMP, destacando los pros y los contras de este enfoque. La charla recomienda consultar la charla de Nick en All Things RTC para obtener más información.

1. Introducción a la Transmisión en Vivo y WebRTC

Short description:

Hola a todos, mi nombre es Matthew McClure. Soy uno de los cofundadores de Mux, y nos dedicamos a la infraestructura de video en línea para desarrolladores. Hoy hablaremos sobre cómo transmitir en vivo desde el navegador a través de otro navegador. El chat en vivo y la transmisión en vivo son diferentes en términos de comunicación y tecnología. El chat en vivo utiliza WebRTC para una comunicación síncrona de baja latencia entre navegadores, mientras que la transmisión en vivo utiliza RTMP y HLS para la transmisión de uno a muchos. No podemos convertir WebRTC en RTMP en el navegador, pero podemos utilizar una implementación de WebRTC en el lado del servidor. Sin embargo, este enfoque puede no ser el más fácil o flexible para el procesamiento de video en el lado del servidor.

Soy uno de los cofundadores de Mux, y nos dedicamos a la infraestructura de video en línea para desarrolladores. Una de nuestras características es una API para transmisión en vivo, y es ahí donde recibimos muchas preguntas de los desarrolladores sobre cómo ayudar a sus clientes a transmitir en vivo. Estamos en un mundo en el que quieren construir una aplicación en el navegador, permitir que el usuario inicie sesión y transmita en vivo de inmediato sin necesidad de descargar software de terceros como OBS o algo así para poder hacerlo. Tiene total sentido.

Pero hoy no estamos hablando solo de transmitir en vivo desde el navegador, estamos hablando de transmitir en vivo desde el navegador a través de otro navegador. Esto también probablemente no sea una buena idea para la mayoría de los casos de uso, pero cuando necesitas este tipo de cosas, puede ser un buen camino a seguir. Ya cubrimos algo similar, o otra forma de hacer esto, en la React Summit. Así que vamos a recapitular rápidamente algunos de estos conceptos de alto nivel, solo para estar en la misma página. Pero si quieres más información, también puedes ver esa charla. Puedes encontrarla en YouTube.

Un error común es pensar que la transmisión en vivo es lo mismo que el chat en vivo. En el chat en vivo, tienes dos navegadores que pueden comunicarse, o varios navegadores, que pueden comunicarse directamente entre sí, con una latencia inferior a 500 milisegundos para que puedan hablar de forma sincrónica. En cambio, la transmisión en vivo es de uno a muchos. Tienes una entrada de transmisión para muchos espectadores, y eso puede ser de 50 a un millón de espectadores. La latencia puede ser de 10 segundos o más, está bien, porque no hay realmente una expectativa de poder comunicarse de vuelta con ese transmisor. Debido a esas limitaciones, la misma tecnología no funciona muy bien para ambos casos. Para un chat en vivo, generalmente se utiliza tecnología de navegador como WebRTC o implementaciones propietarias que permiten comunicarse directamente entre los transmisores para tener la menor latencia posible. En cambio, la transmisión en vivo utiliza tecnologías como RTMP y HLS. RTMP es una implementación antigua de Flash que se ha convertido en el estándar de facto para poder ingresar contenido en vivo directamente en un servidor, que luego transcodificará ese contenido y lo transmitirá a través de HLS. No entraremos en los detalles de HLS, pero para nuestros propósitos, nos permite descargar video a través de solicitudes GET en el navegador, y puedes escalarlo como cualquier otra transferencia de archivos, lo cual es muy bueno.

Ok, entonces vamos a tomar WebRTC y convertirlo en RTMP en el navegador, es probablemente lo que estás pensando. Desafortunadamente, no, no podemos llegar lo suficientemente bajo en la pila de red en un navegador para poder hacerlo, así que incluso en nuestro mundo moderno actual de WASM y todas estas otras cosas buenas, simplemente no podemos llegar allí. Pero hablemos de las tecnologías a las que podemos acceder. Así que todo lo que estamos hablando aquí implica un servidor de alguna manera, pero la primera forma es tomar WebRTC y utilizar una implementación de WebRTC en el lado del servidor. Si me hubieras preguntado hace un año, habría dicho, Esto es una locura, ha mejorado mucho. Proyectos como Pyon han avanzado mucho. Es una implementación de hace un año. Así que esto ya no es tan loco, pero aún no es, ciertamente no es la forma más fácil de hacerlo. Y si quieres hacer algo interesante con el video en el lado del servidor, a través de tecnologías del lado del cliente, esto te dejaría un poco en la estacada.

2. Ejecutando WebRTC en un servidor a través de Chrome

Short description:

Para solucionar el problema de ejecutar WebRTC en un servidor a través de Chrome, un enfoque alternativo es utilizar GetUserMedia para capturar el micrófono y la cámara, transmitirlo a un servidor a través de WebSockets y codificarlo en RTMP. Esto implica ejecutar un Chrome por cada flujo de entrada o salida, lo cual puede consumir muchos recursos. Sin embargo, proyectos de código abierto como Jitsi han implementado este método para transmisiones de uno a muchos o de pocos a muchos. Otro enfoque es utilizar la API Chrome.tabCapture, que tiene internamente características similares a la API MediaRecorder. Esto permite ejecutar Chrome en modo sin cabeza, lo que proporciona un acceso multiinquilino más fácil y funciones del navegador, pero aún depende de la API MediaRecorder.

Entonces, para solucionar ese último problema, ¿qué tal si simplemente tomamos WebRTC y lo ejecutamos en un servidor a través de Chrome? Se puede hacer, pero el problema es que ahora estás ejecutando Chrome. O podemos utilizar GetUserMedia, que es solo una parte de las API de WebRTC que te permiten obtener el micrófono y la cámara. Transmitiremos eso a un servidor a través de WebSockets y luego lo codificaremos en RTMP.

Entonces, es posible que estés pensando, ¿cómo funciona eso? Volvamos a este tema de Chrome sin cabeza. Si quieres más información sobre eso, puedes consultar la otra charla que mencioné. O puedes ver la otra charla que mencioné. Así que WebRTC a un WebRTC del lado del servidor a través de Chrome sin cabeza. Bastante interesante. Puedes tener un chat uno a uno, pocos a pocos. Haz que Chrome sin cabeza se una a ese chat y transmita eso a través de RTMP. Muy interesante. Quieres ocultar ese Chrome en el cliente de los otros participantes del chat, pero ese Chrome puede diseñar la interfaz del chat como quiera, agregar superposiciones, cualquier cosa, justo allí.

Entonces, ¿qué hay de estos inconvenientes? Debes ejecutar un Chrome por cada flujo de entrada o salida. Por lo tanto, tienes toda la orquestación que conlleva eso. Si usas Chrome como tu navegador normal, es posible que notes que consume muchos recursos. Eso también se aplica en el servidor. El problema más grande, sin embargo, es que no es el camino más común. Muchas personas lo están haciendo, simplemente no lo están mencionando. La excepción son proyectos de código abierto como Jitsi, que si no estás familiarizado, es como un competidor de Zoom de código abierto. Así es como hacen transmisiones de uno a muchos o de pocos a muchos.

Entonces, hay algunas formas de hacer esto, cada una con sus ventajas y desventajas. Una es utilizar el enfoque estilo getUserMedia y luego transmitir eso a un servidor a través de WebSockets. Es posible que estés pensando, espera, ¿por qué estamos hablando de esto de nuevo? En realidad no es getUserMedia. Ahora vamos a utilizar Chrome.tabCapture, pero utiliza una API muy similar en el fondo. Son las mismas características internas que la API MediaRecorder, que es lo que usaríamos en esa implementación. Aquí tomamos WebRTC, el mismo proceso en el que lo tenemos en el navegador, que se une, llama a la API TabCapture, transmite eso a través de WebSocket a un servidor que lo codifica en RTP y continúa con el resto del flujo de trabajo. Esos pueden estar en el mismo servidor, pero esa es la idea general. Las ventajas son que realmente puedes ejecutar Chrome en modo sin cabeza, lo que significa que obtienes un acceso multiinquilino mucho más fácil, obtienes todas estas funciones del navegador, podemos utilizar el flujo de trabajo WebSocket sofisticado. La desventaja es que aún utiliza la API MediaRecorder, que es un desastre.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Edición de video en el navegador
React Summit 2023React Summit 2023
24 min
Edición de video en el navegador
Top Content
La edición de video es un mercado en auge con influencers siendo toda la rabia con Reels, TikTok, Youtube. ¿Sabías que los navegadores ahora tienen todas las APIs para hacer edición de video en el navegador? En esta charla voy a darte una introducción sobre cómo funciona la codificación de video y cómo hacerla funcionar dentro del navegador. Spoiler, ¡no es trivial!
Ampliando los límites de la codificación de video en navegadores con WebCodecs
JSNation 2023JSNation 2023
25 min
Ampliando los límites de la codificación de video en navegadores con WebCodecs
Top Content
La codificación de video de alta calidad en los navegadores ha sido tradicionalmente lenta, de baja calidad y no permitía mucha personalización. Esto se debe a que los navegadores nunca tuvieron una forma nativa de codificar videos aprovechando la aceleración de hardware. En esta charla, repasaré los secretos de la creación de videos de alta calidad en los navegadores de manera eficiente con el poder de WebCodecs y WebAssembly. Desde contenedores de video hasta muxing, audio y más allá, esta charla te dará todo lo que necesitas para renderizar tus videos en los navegadores hoy en día!
Creando Videos Programáticamente en React
React Summit Remote Edition 2021React Summit Remote Edition 2021
34 min
Creando Videos Programáticamente en React
Introducción a ReMotion, una nueva biblioteca con la que podemos convertir código React en videos MP4, crear nuestros gráficos en movimiento de forma programática y renderizarlos en el servidor. Daré una visión general de los principios, la filosofía y, por supuesto, vamos a codificar un video.
Explorando la manipulación de video y el lienzo HTML5
React Summit 2020React Summit 2020
16 min
Explorando la manipulación de video y el lienzo HTML5
En esta charla relámpago estaremos empujando los límites de las API del navegador HTMl5 Canvas. Únete a nosotros mientras hacemos algunos experimentos con video en el navegador para ver qué es realmente posible. DESCARGO DE RESPONSABILIDAD: No se garantiza la compatibilidad entre navegadores. No apto para personas sensibles. Debes tener esta altura para subir. Asistir a esta charla relámpago puede resultar en lesiones graves o la muerte. Todos los participantes deben traer un chaleco salvavidas.
Realizar transmisiones en vivo desde tu navegador sin WebRTC
React Summit Remote Edition 2020React Summit Remote Edition 2020
13 min
Realizar transmisiones en vivo desde tu navegador sin WebRTC
Cuando los desarrolladores piensan en transmitir en vivo desde el navegador, la suposición inmediata es utilizar WebRTC. Si bien WebRTC es una tecnología increíble, las implementaciones del lado del servidor son... deficientes en este momento. Hablaremos sobre una forma (totalmente chapucera) de obtener video desde el navegador a través de la tecnología que estás utilizando hoy.
¿Recuerdas los CSS Sprites? ¡Hagamos eso con video!
React Summit Remote Edition 2021React Summit Remote Edition 2021
7 min
¿Recuerdas los CSS Sprites? ¡Hagamos eso con video!
Sincronizar múltiples transmisiones, especialmente múltiples transmisiones en vivo, y especialmente cuando el audio también es crítico, puede ser increíblemente difícil. ¿Cómo podrías construir una experiencia en la que tengas algunas ángulos de cámara y quieras que un espectador pueda elegir uno sin problemas? Te mostraremos una técnica de hackeo que te permite hacer exactamente eso sin tener que preocuparte por la sincronización.

Workshops on related topic

Construye tu propia plataforma de transmisión en vivo
React Summit Remote Edition 2021React Summit Remote Edition 2021
138 min
Construye tu propia plataforma de transmisión en vivo
Workshop
Dylan Jhaveri
Dylan Jhaveri
En este masterclass repasaremos los conceptos básicos de la transmisión de video por internet, incluyendo tecnologías como HLS y WebRTC. Luego construiremos nuestra propia aplicación React para reproducir transmisiones en vivo y grabaciones de transmisiones en vivo.