Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

204
Visualizações
¿Cómo puedo resolver el problema "HTMLMediaElement ya conectado previamente a un MediaElementSourceNode diferente" usando el componente funcional React?

Estoy usando componentes funcionales de React en mi aplicación creada con create-react-app, por lo que React.StrictMode se habilita automáticamente. No quiero deshabilitarlo, ya que me está ayudando a detectar posibles problemas a medida que me desarrollo. El problema es que hace que el componente se renderice dos veces, lo que genera un error:
DOMException no detectada: no se pudo ejecutar 'createMediaElementSource' en 'AudioContext': HTMLMediaElement ya se conectó previamente a un MediaElementSourceNode diferente cuando HTMLMediaElement se conecta en el primer procesamiento. Me pregunto, ¿hay alguna forma de desconectar HTMLMediaElement del MediaElementSourceNode anterior... tal vez establecerlo en null o algo así, para que pueda obtener una nueva conexión?
A continuación, está mi código que arroja el error:

 import React, { useEffect, useRef } from "react"; const Canvas = () => { const audioRef = useRef(null); const filUploadRef = useRef(null); const canvasRef = useRef(null); let audioSource; let analyser; let dataArray; useEffect(() => { const audioElement = audioRef.current; const canvas = canvasRef.current; const fileUploadField = filUploadRef.current; fileUploadField.addEventListener("change", () => { const audioContext = new AudioContext(); const files = fileUploadField.files; audioElement.src = URL.createObjectURL(files[0]); audioElement.load(); audioElement.play(); audioSource = audioContext.createMediaElementSource(audioElement); analyser = audioContext.createAnalyser(); audioSource.connect(analyser); analyser.connect(audioContext.destination); dataArray = new Uint8Array(analyser.frequencyBinCount); }); }, []); const handleTogglePlayPause = () => { //TODO: Implement toggle Play/Pause when the button is clicked. }; return ( <> <canvas ref={canvasRef} /> <audio controls ref={audioRef} /> <input type="file" id="file-upload" accept="audio/*" ref={filUploadRef} /> <button onClick={handleTogglePlayPause} type="button"> {/* ^ This button element is related to handleTogglePlayPause function for a different stage*/} Play/Pause </button> </> ); }; export default Canvas;
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Puede verificar si audioSource ya tiene una fuente y, de ser así, puede intentar evitar la creación de una nueva fuente de elementos multimedia. Además, no necesita crear un nuevo analizador y conectarlo.

Agregue esto si verifica su código, y debería resolver el problema.

 // .. audioElement.play(); if (!audioSource) { audioSource = audioContext.createMediaElementSource(audioElement); analyser = audioContext.createAnalyser(); audioSource.connect(analyser); analyser.connect(audioContext.destination); } //..

Bueno, el modo de reacción estricta ayuda a identificar problemas, pero al mismo tiempo crea otros nuevos. Por lo tanto, podría considerar cerrar el modo estricto.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda