¿Recuerdas los CSS Sprites? ¡Hagámoslo con video!

Rate this content
Bookmark

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.

Matt McClure
Matt McClure
8 min
10 Jun, 2021

Video Summary and Transcription

La charla de hoy discute el uso de video sprites, que son similares a los CSS sprites y se utilizan comúnmente para la optimización. Los video sprites se pueden utilizar para sincronizar y seleccionar múltiples transmisiones de video, permitiendo a los espectadores elegir la transmisión deseada. También se mencionan las limitaciones de la transmisión suave y la difusión, destacando la necesidad de considerar las restricciones de resolución. En general, la charla proporciona información sobre los beneficios y técnicas de uso de video sprites para la sincronización y optimización de transmisiones.

Available in English

1. Introducción a los sprites de video

Short description:

Hoy hablaremos sobre el uso de sprites de video, similares a los sprites de CSS. Un sprite es una imagen con múltiples imágenes en ella, lo que permite al cliente elegir qué partes mostrar. Esta técnica se utiliza comúnmente para la optimización. Por ejemplo, los sprites de video combinan todos los estados de un personaje en una sola imagen. La misma técnica se puede aplicar a los videos, donde se combinan varios videos en uno y se muestra el deseado. Esta técnica es útil para la sincronización de feeds, como la transmisión de conciertos con diferentes ángulos de cámara. Los espectadores pueden elegir qué feed ver.

Hola a todos, hoy quiero hablar sobre algo un poco ingenioso en lo que he estado pensando últimamente, pero la idea aquí es que queremos usar sprites de video de la misma manera que muchos de ustedes podrían haber usado sprites de CSS en el pasado.

Así que hablaremos sobre lo que quiero decir con todo esto, pero hola, soy Matt McClure. Soy uno de los cofundadores de una empresa llamada Mux y dirijo el departamento de Developer Experience allí. Y en pocas palabras, construimos una infraestructura impresionante de video para desarrolladores. Así que si estás buscando una API de video, estamos aquí, así que échale un vistazo.

Entonces, tomando un paso atrás, ¿qué es un sprite? En pocas palabras, es una imagen con varias imágenes en ella. El cliente recibe esta gran imagen combinada y luego puede elegir qué partes mostrar de ella. Si eres relativamente nuevo, es posible que no hayas visto esto tan ampliamente utilizado, pero esta es una técnica de optimización muy común de principios de los años 2000.

Entonces, si tenías un botón con estados de hover, estados de presión y estados activos, entonces solo enviarías una imagen de botón y luego usarías tu fondo de CSS para decidir cuál de esa imagen mostrar. Un poco más común si comenzaste ahí. Es posible que recuerdes esto de esa época.

Pero para mostrar esto de manera más concreta, mucha gente lo conoce a partir de los sprites de video de los juegos. Todos los estados de Mario están en una sola imagen. Y luego la ventana del cliente muestra el estado de Mario que desea. Es posible que te preguntes qué tiene que ver esto con los videos. La idea aquí es que la misma técnica funciona. Puedes enviar varios videos combinados en uno y luego mostrar solo el que te interesa en el reproductor.

Es posible que te preguntes, ¿por qué demonios haríamos esto? Y yo diría, usa tu imaginación. Podría haber muchos ejemplos de esto, como, por ejemplo, deportes, eventos deportivos, conciertos. Pero el ejemplo más grande que me viene a la mente y lo que vemos más a menudo es la sincronización de feeds, especialmente la capacidad de elegir entre estos diferentes feeds de manera sincronizada. Digamos que estás transmitiendo conciertos en vivo, música en vivo. Entonces tienes varias cámaras transmitiendo diferentes ángulos. Una está en el baterista, otra en el cantante, otra en el público. Y un productor en el lugar generalmente decide qué feed mostrar en cualquier momento dado. Entonces podrían hacer una bonita transición, pasar del baterista al público, etc. Luego, ese productor envía un feed a un servicio de codificación o cualquier otra cosa. Aquí estoy usando Mux como ejemplo por razones obvias. Luego, ese servicio transmite eso a todos tus espectadores finales. Entonces esos espectadores comienzan a decir, en realidad, solo quiero ver al baterista todo el tiempo, y odio las transiciones que hace este productor. Entonces quieren poder elegir qué feed ver. Entonces decides, bien, ¿cómo podemos construir esto.

2. Sincronización y selección de feeds de video

Short description:

Para sincronizar múltiples feeds de video en vivo, combínalos en un solo video y permite a los espectadores seleccionar el feed deseado. Esto se puede lograr enviando todos los feeds de cámara a un dispositivo codificador local, que los organiza en cuadrantes y los envía al servicio de transmisión del codificador. Los espectadores pueden luego elegir qué feed ver, asegurando feeds sincronizados y un flujo de audio compartido. El proceso implica obtener las coordenadas del feed deseado, organizar las coordenadas y actualizar el lienzo con el cuadrante seleccionado del video. Para obtener más detalles y ejemplos de código, visita video-sprites.mux.dev y el repositorio de GitHub en github.com/muxlabs/video-sprites.

Entonces comienzas a pensar, bien, enviaré cada cámara directamente a ese codificador o servicio de transmisión. Y luego cada espectador puede obtener todos los feeds. En este ejemplo, tres feeds. Y aquí es donde las cosas se complican si sigues por este camino. Ahora tienes tres transmisiones en vivo diferentes que las personas pueden ver. Pero ¿cómo cambias entre ellas? ¿Las personas simplemente hacen clic en otro feed? Y luego podrías tener unos segundos de retraso en términos de audio para todos ellos. Por lo tanto, puede ser difícil sincronizar eso en el cliente, o honestamente, casi imposible hacerlo bien. Una solución sería simplemente enviar un video nuevamente. Entonces, como lo estabas haciendo antes, pero en lugar de que se produzca ese video, simplemente combinas todos los feeds en ese nivel y luego los envías. En este ejemplo, todas las cámaras van a esa caja de codificador local. Simplemente las organiza en cuatro cuadrantes, los envía al servicio de transmisión del codificador y eso se envía a todos los espectadores. Y luego, los espectadores pueden elegir cuál quieren. Ahora tienes la garantía de que tus feeds están sincronizados. Solo tienes que preocuparte por un flujo de audio que se comparte entre todos ellos por razones obvias, y solo muestras el cuadrante del video que el espectador selecciona en cualquier momento dado. ¿Cómo podría funcionar esto en detalle? Todo este código está en GitHub. Sugeriría que lo revises allí, pero a grandes rasgos, quieres obtener las coordenadas del feed que deseas mostrar. Tengo los feeds simplemente nombrados como cero a tres. Y quieres organizar esas coordenadas. Las coordenadas en este ejemplo de esta matriz son la posición X de origen, la posición Y de origen, el ancho de origen y la altura de origen, es decir, lo que quieres recortar. Entonces, cero, cero, es la esquina superior izquierda. Cero, la mitad del ancho del video es el cuadrante superior derecho, y así sucesivamente. Y dado que estos son cuadrantes, cada uno es la mitad de la altura del video y la mitad del ancho del video. Y luego usas estas coordenadas cuando actualizas el lienzo. Entonces, cuando dibujas esa imagen en el lienzo, dibujas la imagen del video o pasas la imagen del video, y luego pasas estas coordenadas que acabamos de obtener, lo que dirá, por ejemplo, solo dibuja el cuadrante superior derecho del video en el lienzo. Y luego, ya sabes, llama a la solicitud de animación de cuadro una y otra vez. Si quieres probarlo, solo ve a video-sprites.mux.dev. Y luego el código fuente está en github.com/muxlabs/video-sprites. Pero muy rápido, quería mostrarte cómo se ve esto. Esto es solo video-sprites.mux.dev. Solo tengo un elemento de bot aquí, pero esto también podría funcionar con transmisiones en vivo, cualquier otra cosa.

3. Limitaciones de Transmisión Suave y Difusión

Short description:

Aquí hay algo de música de transmisión suave. Ten en cuenta que solo puedes difundir un subconjunto de tu nivel superior. Si tu servicio de transmisión está limitado a 1080, cada cuadrante solo puede ser una cuarta parte de eso. Una vez que lleguemos a 4K, podrías hacer 1080 para cada cuadrante. Gracias por escuchar. Si decides usar nuestro servicio, avísame en Twitter a través de Matt McClure. Para contenido de video, visita mux.com.

Aquí hay algo de música de transmisión suave. Sorprendentemente, funciona muy bien. Los puntos a tener en cuenta aquí son que debes recordar que solo podrás difundir un subconjunto de tu nivel superior. Entonces, si tu servicio de transmisión está limitado a 1080, por ejemplo, cada uno solo puede ser una cuarta parte de eso, lo cual está bien para la mayoría de los ejemplos.

Una vez que lleguemos a 4K, para muchos servicios que lo admiten, podrías hacer 1080 para cada cuadrante, pero eso es lo único que debes tener en cuenta y todas las demás consideraciones para Canvas.

Pero, muchas gracias por escuchar. Si decides usar nuestro servicio, por favor avísame. Envíame un mensaje a Matt McClure en Twitter. Y si necesitas contenido de video, visita mux.com. Muy bien. Gracias a todos.

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

Video Editing in the Browser
React Summit 2023React Summit 2023
24 min
Video Editing in the Browser
Video editing is a booming market with influencers being all the rage with Reels, TikTok, Youtube. Did you know that browsers now have all the APIs to do video editing in the browser? In this talk I'm going to give you a primer on how video encoding works and how to make it work within the browser. Spoiler, it's not trivial!
Pushing the Limits of Video Encoding in Browsers With WebCodecs
JSNation 2023JSNation 2023
25 min
Pushing the Limits of Video Encoding in Browsers With WebCodecs
Top Content
High quality video encoding in browsers have traditionally been slow, low-quality and did not allow much customisation. This is because browsers never had a native way to encode videos leveraging hardware acceleration. In this talk, I’ll be going over the secrets of creating high-quality videos in-browsers efficiently with the power of WebCodecs and WebAssembly. From video containers to muxing, audio and beyond, this talk will give you everything you need to render your videos in browsers today!
Going Live from a Browser...with Another Browser
JSNation Live 2020JSNation Live 2020
8 min
Going Live from a Browser...with Another Browser
There are other ways to proxy live video from a browser to an RTMP endpoint, but what if we wanted to interact with that stream first? And not just interact writing obtuse ffmpeg filters, but just some good ol' HTML and CSS? Let's do that! We'll talk about how you can allow your streamers to go live directly from their browser using headless Chrome and ffmpeg.
Creating Videos Programmatically in React
React Summit Remote Edition 2021React Summit Remote Edition 2021
34 min
Creating Videos Programmatically in React
Introduction to Remotion, a new library with which we can turn React code into MP4 videos, create our motion graphics programmatically and server-side render them. I give an overview of the priciples, the philosophy and of course we are going to code a video!
Getting Weird with Video Manipulation and HTML5 Canvas
React Summit 2020React Summit 2020
16 min
Getting Weird with Video Manipulation and HTML5 Canvas
In this lightning talk we will be pushing the boundaries of HTMl5 Canvas browser APIs. Join us while we do some experiments with video in the browser to see what’s truly possible. DISCLAIMER: No promises of cross-browser compatibility. Not for the faint of heart. Must be this tall to ride. Attending this lightning talk may result in serious injury or death. All participants must bring a life jacket.
Going Live from your Browser without WebRTC
React Summit Remote Edition 2020React Summit Remote Edition 2020
13 min
Going Live from your Browser without WebRTC
When developers think about broadcasting live from the browser, the immediate assumption is to use WebRTC. While WebRTC is amazing technology, server-side implementations are...lacking right now. We'll talk about a (totally hacky) way to get video from the browser via technology you're using today.

Workshops on related topic

Build Your Own Live Streaming Platform
React Summit Remote Edition 2021React Summit Remote Edition 2021
138 min
Build Your Own Live Streaming Platform
Workshop
Dylan Jhaveri
Dylan Jhaveri
In this workshop we will go over the basics of streaming video over the internet including technologies like HLS and WebRTC. We will then build our own React app to play live streams and recordings of live streams.