javascript - MediaRecorder.ondataavailable - 数据大小始终为 0

标签 javascript html5-audio audio-recording mediarecorder

我正在尝试使用 Web API Media Recorder 在浏览器中录制用户的声音。

在此阶段,我对录制后的音频所做的就是将其添加到音频元素的源中并进行播放。

当我停止录音机时,会触发“ondataavailable”事件,但数据大小为0,并且无法播放任何内容。

这是我的代码所在的位置。我正在使用 react 。任何想法将不胜感激!

handleRecording (stream) {
 const recordedChunks = this.state.recordedChunks;
 const mediaRecorder = new MediaRecorder(stream)
 const _this = this;

 mediaRecorder.start();

 mediaRecorder.ondataavailable = function(e) {
  if (e.data.size > 0){
    recordedChunks.push(e.data);
    _this.setState({recordedChunks:recordedChunks});
  }
 }

 mediaRecorder.onstop = function(e) {
  if (recordedChunks){
    if(recordedChunks.length > 0) {
      const audio = document.querySelector('audio');
      audio.controls = true;
      const blob = new Blob(recordedChunks, { 'type' : 'audio/ogg; codecs=opus'      });
      const audioURL = window.URL.createObjectURL(blob);
      audio.src = audioURL;
    }
   }
  }

  this.setState({mediaRecorder:mediaRecorder});
},

startRecording () {
 const recording = true;
 this.setState({recording:recording});

 navigator.mediaDevices.getUserMedia({ audio: true, video: false })
    .then(this.handleRecording);
},

stopRecording () {
 const recording = false;
 const mediaRecorder = this.state.mediaRecorder;

 mediaRecorder.stop();
 this.setState({recording:recording, mediaRecorder:mediaRecorder});
}

文档链接:https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder/ondataavailable

最佳答案

好吧,我明白了!

录制失败的原因是我没有启用 Chrome 的实验性网络平台功能。

我是通过偶然发现这个 WebRTC Media Recorder 示例网站 https://webrtc.github.io/samples/src/content/getusermedia/record/ 了解到这一点的。 - 录音也不起作用。所以我知道这与我的特定代码无关。

要启用该标志,请在 Chrome 浏览器中转至 chrome://flags/,启用该标志并重新启动。

关于javascript - MediaRecorder.ondataavailable - 数据大小始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41677776/

相关文章:

java - 如何在 Android 中录制视频,仅允许横向模式并设置最长录制时间

audio - 如何使用Web Audio API在特定位置将音频记录添加到现有音频记录中?

javascript - 使用 RoR Assets 管道将样式表添加到 Javascript

javascript - 在javascript中根据价格和类别复选框隐藏和显示div

javascript - 在函数内动态创建多个函数

javascript - 获取列表项 Javascript 内列表项的值

jquery - 停止html5音频并重新开始播放的问题

javascript - 以编程方式创建涵盖特定持续时间的雷声

android - Phonegap Android HTML5 音频播放器延迟

ios - AVAssetWriter 不录制音频