es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo sincronizar dos elementos de video HTML que están reproduciéndose automáticamente y en bucle?

Tengo dos elementos de video HTML que comienzan a reproducirse automáticamente al cargar la página y continúan en bucle sin fin hasta que el usuario abandone la página. Ambos videos tienen una duración de 8 segundos y necesito que siempre estén sincronizados entre sí, pero por supuesto, se desincronizan. Para el audio, el Video 1 reproduce una canción completa y el Video 2 reproduce solo un instrumento en la misma canción, por lo que, para mostrar que están relacionados, deben estar sincronizados.

<video id="first-video" autoplay="" muted="" loop="" playsinline="" loading="lazy" src="videos/video-1.mp4"></video>
<video id="second-video" autoplay="" muted="" loop="" playsinline="" loading="lazy" src="videos/video-2.mp4"></video>

Hay varias soluciones en esta pregunta de SO:
https://stackoverflow.com/questions/2654817/is-there-a-way-to-keep-two-videos-synchronized-in-a-webpage-without-plugins

Pero cuando intento implementarlas, no veo ningún cambio en la calidad de la sincronización, se desincronizan con facilidad. Soy nuevo en JS, pero supongo que hay algún método para detectar el primer y último fotograma de un vídeo, y luego podría usarlos para iniciar/detener un segundo vídeo, y con el video en “bucle”, esto podría continuar indefinidamente. Si alguien puede indicarme en la dirección correcta para eso u otra solución, ¡sería de gran ayuda!

Gracias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Solución para mantener dos videos HTML en sincronía

    Existen varias soluciones disponibles para sincronizar dos videos HTML en una página web. Un enfoque consiste en utilizar JavaScript para detectar los primeros y últimos fotogramas de un video y luego utilizar esos fotogramas para iniciar/detener el segundo video. Aquí están los pasos:

    1. Agrega los event listeners a los videos para detectar cuándo empiezan a reproducirse y cuándo terminan de reproducirse.
    const firstVideo = document.getElementById('first-video');
    const secondVideo = document.getElementById('second-video');
    
    // Detectar cuándo los videos empiezan a reproducirse
    firstVideo.addEventListener('play', function() {
      // Iniciar el segundo video al mismo tiempo que el primer video
      secondVideo.currentTime = firstVideo.currentTime;
      secondVideo.play();
    });
    
    // Detectar cuándo los videos terminan de reproducirse
    firstVideo.addEventListener('ended', function() {
      // Detener el segundo video cuando el primer video termina
      secondVideo.pause();
    });
    
    secondVideo.addEventListener('ended', function() {
      // Reiniciar el segundo video cuando termina
      secondVideo.currentTime = 0;
      secondVideo.play();
    });
    
    1. Configura los videos para que se repitan indefinidamente.
    <video id="first-video" autoplay="" muted="" loop="" src="videos/video-1.mp4" playsinline="" loading="lazy"></video>
    <video id="second-video" autoplay="" muted="" loop="" src="videos/video-2.mp4" playsinline="" loading="lazy"></video>
    

    Este método debería mantener los dos videos en sincronía siempre y cuando los videos tengan la misma duración y el navegador pueda manejar la carga. Si quieres ajustar la sincronización, puedes modificar la propiedad currentTime del segundo video en el event listener play.

    ¡Espero que esto sea de ayuda!

Comments are closed.