如何使用 JAVASCRIPT 录制音频和视频? (反应 JS)

Posted

技术标签:

【中文标题】如何使用 JAVASCRIPT 录制音频和视频? (反应 JS)【英文标题】:How to record audio and video using JAVASCRIPT ? (REACT JS) 【发布时间】:2021-12-10 07:00:42 【问题描述】:

我试过了,但是有错误“TypeError: Cannot read properties of undefined (reading 'stop')” 我在按钮单击时调用函数 这里也是函数:)

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();     //   Cannot read ('stop') =error
         , 2000)
     

【问题讨论】:

【参考方案1】:

我发现在使用 async with await 和 .then 承诺处理之间存在一些混淆。

由于您使用的是异步函数,因此让我们重构为 try...catch 并使用 await 等待承诺解决。

  const getAudio = async () => 
    let chunks = [];
    let recorder;

    try 
      //wait for the stream promise to resolve
      let stream = await navigator.mediaDevices.getUserMedia( audio: true );
      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();
      , 2000);
     catch (e) 
      console.log("error getting stream", e);
    
  ;

有更好的方法来构建代码,但这应该可以让你的函数正常工作。

这是一个codesandbox,其中包含您的功能和播放选项

这是另一个音频codesandbox

【讨论】:

以上是关于如何使用 JAVASCRIPT 录制音频和视频? (反应 JS)的主要内容,如果未能解决你的问题,请参考以下文章

如何同时录制视频和播放音频(快速教程)

如何使用 React Native App 录制音频和视频(没有 Expo)

如何录制两个音频输入和一个视频输入?

如何使用 javascript 从 Audio Element 录制音频

使用 opencv 和 pyaudio 从网络摄像头录制视频和音频

如何在 javascript 中使用 audioWorklet 和 AudioWorkletProcessor 录制音频?