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 grabar audio y video usando JAVASCRIPT? (REACT JS)

He intentado pero hay un error “TypeError: No se pueden leer las propiedades de undefined (leyendo ‘stop’)”
Estoy llamando a la función al hacer clic en el botón
Aquí también está la función 🙂

const getAudio = async () => {
    let device = await navigator.mediaDevices.getUserMedia({ audio: true });
    let chunks = [];
    let recorder;
    device.then(stream => {
        recorder = new MediaRecorder(stream);
        recorder.ondataavailable = e => {
            chunks.push(e.data);
            if (recorder.state === 'inactive') {
                this.blob = new Blob(chunks, { type: 'audio/webm' });
                let testAudioRecord = URL.createObjectURL(this.blob);
                console.log(testAudioRecord)
            }
        }
        recorder.start(1000);
    });
    setTimeout(() => {
        recorder.stop();     //   No se puede leer 'stop' = error
    }, 2000);
}
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error TypeError: No se pueden leer las propiedades de indefinido (leyendo 'stop') indica que la variable recorder es indefinida al intentar acceder a su método stop(). Esto puede suceder porque la función setTimeout() se está llamando antes de que se le asigne un valor a la variable recorder.

    Para solucionar este problema, puedes mover la función setTimeout() dentro del bloque device.then(), después de asignar un valor a la variable recorder.

    const getAudio = async () => {
      let device = await navigator.mediaDevices.getUserMedia({audio: true});
      let chunks = [];
      let recorder;
    
      device.then(stream => {
        recorder = new MediaRecorder(stream);
    
        recorder.ondataavailable = e => {
          chunks.push(e.data);
          if (recorder.state === 'inactive') {
            this.blob = new Blob(chunks, {type: 'audio/webm'});
            let testAudioRecord  = URL.createObjectURL(this.blob);
            console.log(testAudioRecord)
          }
        }
    
        recorder.start(1000);
    
        setTimeout(() => {
          recorder.stop(); // debería funcionar ahora
        }, 2000);
      });
    }
    

    Al mover la función setTimeout() dentro del bloque device.then(), nos aseguramos de que se haya asignado un valor a la variable recorder antes de intentar acceder a su método stop().

Comments are closed.