¿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.

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

FAQ

Un sprite en desarrollo web es una imagen que contiene varias imágenes más pequeñas, permitiendo que el cliente reciba una sola imagen grande y seleccione qué partes mostrar utilizando CSS, optimizando así la carga y visualización de los elementos gráficos.

La técnica de sprites se puede aplicar en el streaming de video enviando varios videos combinados en uno solo. Los espectadores pueden entonces elegir qué parte del video combinado mostrar, similar a como se seleccionan partes de una imagen en los sprites de CSS.

El uso de video sprites en eventos en vivo permite a los espectadores elegir entre diferentes ángulos de cámara, como el baterista o el cantante, manteniendo todas las transmisiones perfectamente sincronizadas y eliminando las demoras al cambiar entre diferentes feeds.

Los sprites de video ayudan a solucionar problemas de sincronización entre diferentes feeds y eliminan las demoras en el cambio de cámaras durante la transmisión en vivo, ofreciendo una experiencia de visualización más fluida y personalizable.

El código fuente para implementar video sprites está disponible en GitHub en la dirección github.com/muxlabs/video-sprites. Allí puedes encontrar los detalles de cómo configurar y usar esta técnica en tus proyectos.

Mux es una empresa cofundada por Matt McClure que ofrece infraestructura de video para desarrolladores. Provee APIs de video que facilitan la integración y gestión de video en aplicaciones y servicios web.

Matt McClure
Matt McClure
8 min
10 Jun, 2021

Comments

Sign in or register to post your comment.

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.

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.

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.
Transmitiendo en vivo desde un navegador...con otro navegador
JSNation Live 2020JSNation Live 2020
8 min
Transmitiendo en vivo desde un navegador...con otro navegador
This Talk discusses live chat and live broadcast using WebRTC and RTMP. It explores running WebRTC on a server via Chrome and alternative approaches like using GetUserMedia and the Chrome.tabCapture API. The use of a whole Chrome instance for WebRTC and RTMP broadcast is also discussed, highlighting the pros and cons of this approach. The Talk recommends checking out Nick's talk from All Things RTC for more information.
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.

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.