Transmitiendo en Vivo desde un Navegador...con Otro Navegador

This ad is not shown to multipass and full ticket holders
JS Nation
JSNation 2026
June 11 - 15, 2026
Amsterdam & Online
The main JavaScript conference of the year
Upcoming event
JSNation 2026
JSNation 2026
June 11 - 15, 2026. Amsterdam & Online
Learn more
Bookmark
Rate this content

Hay otras formas de hacer proxy de video en vivo desde un navegador a un endpoint RTMP, pero ¿qué pasa si queremos interactuar con ese stream primero? Y no solo interactuar escribiendo filtros ffmpeg obtusos, sino simplemente con un buen HTML y CSS. ¡Hagámoslo! Hablaremos sobre cómo puedes permitir que tus streamers transmitan en vivo directamente desde su navegador usando headless Chrome y ffmpeg.

This talk has been presented at JSNation Live 2020, check out the latest edition of this JavaScript Conference.

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.

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.

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.

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 usando WebRTC y RTMP. Explora ejecutar WebRTC en un servidor a través de Chrome y enfoques alternativos como usar GetUserMedia y la API Chrome.tabCapture. También se discute el uso de una instancia completa de Chrome para la transmisión WebRTC y RTMP, destacando los pros y los contras de este enfoque. La charla recomienda ver la charla de Nick de All Things RTC para 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 hacemos infraestructura de video en línea para desarrolladores. Hoy estamos hablando sobre 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 comunicación sincrónica de baja latencia entre navegadores, mientras que la transmisión en vivo utiliza RTMP y HLS para transmisión de uno a muchos. No podemos convertir WebRTC en RTMP en el navegador, pero podemos usar una implementación de WebRTC del 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.

Hola a todos, mi nombre es Matthew McClure. Soy uno de los cofundadores de Mux, y hacemos infraestructura de video en línea para desarrolladores. Así que una de nuestras características es una API para transmisión en vivo, y ahí es donde recibimos un montón de preguntas de los desarrolladores sobre cómo ayudar a sus clientes a transmitir en vivo. Están en un mundo donde quieren simplemente construir una aplicación en el navegador, permitir que el usuario simplemente inicie sesión e inmediatamente transmita en vivo sin necesidad de descargar software de terceros como OBS o algo así para poder hacerlo. Totalmente tiene 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 probablemente también sea una mala idea para la mayoría de los casos de uso, pero cuando necesitas este tipo de cosas, esto puede ser un gran camino a seguir. Así que cubrimos algo similar, u otro camino para hacer esto en 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 podrías querer ver esa charla. Puedes encontrarla en YouTube.

Una idea errónea común es que la transmisión en vivo es lo mismo que el chat en vivo. Así que en el chat en vivo, tienes dos navegadores que pueden comunicarse, o algunos navegadores, que pueden comunicarse directamente entre sí, con menos de 500 milisegundos de latencia para que puedan hablar sincrónicamente. La transmisión en vivo, por otro lado, es de uno a muchos. Así que tienes un flujo de entrada hacia 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 realmente no hay una expectativa de poder comunicarse de vuelta con ese transmisor. Así que debido a esas limitaciones, la misma tecnología realmente no funciona muy bien para ambos. Para un chat en vivo, generalmente está impulsado por tecnologías de navegador como WebRTC o implementaciones propietarias que te permiten comunicarte directamente entre los transmisores para que tengas la menor latencia posible. La transmisión en vivo, por otro lado, está impulsada por tecnologías como RTMP y HLS. RTMP es una especie de implementación antigua de flash que se ha convertido en el estándar de facto para poder ingerir 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, te permite descargar video a través de solicitudes git en el navegador, y puedes escalarlo como lo harías con cualquier otra transferencia de archivos, lo cual es realmente agradable.

Bien, así que simplemente tomemos WebRTC y luego convirtámoslo en RTMP en el navegador, probablemente es 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 qué tecnologías podemos acceder. Así que todo lo que estamos hablando aquí, involucra un servidor de alguna manera, pero la primera forma es que podemos tomar WebRTC y luego usar una implementación de WebRTC del lado del servidor. Así que si me hubieras preguntado hace un año, habría dicho, Esto es una locura, esto ha mejorado mucho. Proyectos como Pyon han avanzado mucho. Es una implementación de hace un año. Así que esto en realidad ya no es tan loco, pero aún no, ciertamente no es la forma más fácil de lograr esto. Y si quieres poder 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 el frío.

2. Running WebRTC on a Server via Chrome

Short description:

Para solucionar el problema de ejecutar WebRTC en un servidor a través de Chrome, un enfoque alternativo es usar 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 ser intensivo en 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 usar la API de Chrome.tabCapture, que tiene internamente similitudes con la API de MediaRecorder. Esto permite ejecutar Chrome en modo headless, proporcionando un acceso más fácil a múltiples inquilinos y características del navegador, pero aún depende de la API de MediaRecorder.

Entonces, para solucionar eso último, ¿qué tal si simplemente tomamos WebRTC, 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 tomar GetUserMedia, que es solo algunas de las APIs de WebRTC que te permiten obtener como el micrófono y la cámara. Transmitiremos eso a un servidor a través de WebSockets, y luego lo codificaremos en RTMP.

Entonces, podrías estar pensando, ¿cómo funciona eso? Volvamos a esto de Chrome en modo headless. Si quieres más información sobre eso, puedes hablar sobre la otra charla que mencioné. O puedes ir a ver la otra charla que mencioné. Así que WebRTC a un WebRTC del lado del servidor a través de Chrome en modo headless. Bastante genial. Puedes simplemente tener un chat, uno a uno, pocos a pocos. Hacer que Chrome en modo headless se una a ese chat, transmitir eso vía RTMP. Realmente interesante. Quieres ocultar ese Chrome en el cliente de los otros participantes del chat, pero ese Chrome puede entonces diseñar la interfaz del chat como quiera, agregar superposiciones, cualquier cosa así, justo ahí.

Entonces, ¿qué pasa con estos inconvenientes? Tienes que ejecutar un Chrome por cada flujo de entrada o por cada flujo de salida. Y así tienes toda la orquestación que viene con eso. Así que si usas Chrome como tu navegador normal, podrías notar que es intensivo en recursos. Eso también se aplica en el servidor. El problema más grande, sin embargo, es que no es el camino más transitado. Mucha gente está haciendo esto. Simplemente no están hablando de ello. 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 la transmisión de uno a muchos, o de pocos a muchos.

Así que hay algunos caminos para lograr esto, que vienen con algunos compromisos. Uno es hacer este enfoque estilo getUserMedia y luego transmitir eso a un servidor de web sockets. Podrías estar pensando como, espera, ¿por qué estamos hablando de esto de nuevo? En realidad no es getUserMedia. Ahora vamos a usar el Chrome.tabCapture, pero usa una API muy similar internamente. Es el mismo interno que la API de MediaRecorder, que es lo que usaríamos en esa implementación. Así que aquí tomamos WebRTC, el mismo proceso donde lo tenemos en el navegador, que se une, llama a la API de TabCapture, transmite eso vía WebSocket a un servidor que lo codifica en RTP y va al resto del flujo de trabajo. Esos pueden estar en el mismo servidor, pero eso es más o menos el nivel alto. Los pros son que puedes ejecutar Chrome en modo headless, lo que significa que obtienes mucho más multi-inquilino, mucho más fácil acceso multi-inquilino, obtienes todas estas características del navegador, podemos usar el flujo de trabajo elegante de WebSocket. La desventaja es que todavía usa la API de MediaRecorder, que es un poco 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
23 min
Edición de video en el navegador
Top Content
This Talk discusses the challenges of video editing in the browser and the limitations of existing tools. It explores image compression techniques, including Fourier transform and Huffman encoding, to reduce file sizes. The video codec and frame decoding process are explained, highlighting the importance of keyframes and delta frames. The performance bottleneck is identified as the codec, and the need for specialized hardware for efficient video editing is emphasized. The Talk concludes with a call to create a simplified API for video editing in the browser and the potential for AI-powered video editing.
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
This Talk explores the challenges and solutions in video encoding with web codecs. It discusses drawing and recording video on the web, capturing and encoding video frames, and introduces the WebCodecs API. The Talk also covers configuring the video encoder, understanding codecs and containers, and the video encoding process with muxing using ffmpeg. The speaker shares their experience in building a video editing tool on the browser and showcases Slantit, a tool for making product videos.
Creando Videos Programáticamente en React
React Summit Remote Edition 2021React Summit Remote Edition 2021
34 min
Creando Videos Programáticamente en React
The Talk discusses the use of ReMotion, a library that allows for declarative video creation in React. It covers the process of creating videos, animating elements, and rendering multiple compositions. The Talk also mentions the features of ReMotion, such as audio support and server-side rendering. ReMotion 2.0 introduces audio support and the possibility of live streaming. The Talk concludes by highlighting the frustration with existing video editing tools and the integration of existing videos into ReMotion projects.
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
Today's Talk at React Summit focused on the Canvas and HTML5 video APIs, showcasing the capabilities and possibilities they offer for video manipulation and interactivity. The speaker demonstrated how to use the HTML5 video element and canvas to manipulate and draw images, apply filters, and add real-time text overlays. They also showcased real-time object detection on video frames using machine learning. The Talk concluded with an example of enhancing a marketing website with interactive video using the canvas element. Overall, the Talk highlighted the power and potential of these APIs for video development.
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
Mux provides an API for live streaming and aims to keep users in their own applications. Live broadcast and live chat are different, with live chat using WebRTC and live broadcast using RTMP and HLS. WebRTC can be implemented using headless Chrome or the getUserMedia process. Mux targets developers building platforms and suggests using semantic HTML. Ionic supports native apps and custom native views.
Gaming the System: Cómo los videojuegos pueden ayudarnos a crear equipos virtuales más efectivos
DevOps.js Conf 2022DevOps.js Conf 2022
7 min
Gaming the System: Cómo los videojuegos pueden ayudarnos a crear equipos virtuales más efectivos
Today's Talk explores the lessons that video games can teach us about building virtual teams. The impact of communication on software development is discussed, highlighting the importance of understanding software for successful deployment. The concept of collective intelligence is introduced, emphasizing the role of social perceptiveness, cognitive diversity, and equal distribution of communication. The Talk also emphasizes the need to optimize team performance with key metrics and suggests keeping teams small and cross-functional to enable easy communication and lower cognitive loads.

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.