首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用马特钻石recorder.js同时录制两个媒体源

如何使用马特钻石recorder.js同时录制两个媒体源
EN

Stack Overflow用户
提问于 2021-08-04 11:39:29
回答 1查看 52关注 0票数 0

我正在使用马特钻石recorder.js录制音频为wav blob。我正在使用WEB RTC从浏览器中呼叫真实号码,并且我想要记录对话。其他一切都很好,但不幸的是,我一次只能从一个来源录制(从'stream‘或'recording_ms')。我之所以使用Matt的代码,是因为它可以生成具有正确RIFF头文件的有效.wav文件。

下面是我当前代码的一个工作示例,它只记录了一个源代码:

代码语言:javascript
复制
function startRecording(){
  if(isRecording){
    console.log("Already recording");
    return;
  }
  if(!inCall){
    console.log("Not in call");
    return;
  }
  if(!recording_ms){
    console.log("No mediastream");
    return;
  }
  console.log("incall:"+inCall);


  CONTEXT = new AudioContext();
  
    navigator.mediaDevices.getUserMedia({audio:true})
    .then(function(stream) {


      let mediaStreamSource = CONTEXT.createMediaStreamSource(stream); // outgoing
      let mediaStreamSource2 = CONTEXT.createMediaStreamSource(recording_ms); // incoming


      recorder = new Recorder(mediaStreamSource); // mediaStreamSource or mediaStreamSource2
      recorder.record();
      isRecording=true;
      console.log('Recording');
    })
    .catch(function(err) { 
      console.log(err);
    });
  

}

我试过了:

代码语言:javascript
复制
navigator.mediaDevices.getUserMedia({audio:true})
.then(function(stream) {


  const source1 = CONTEXT.createMediaStreamSource(recording_ms);
  const source2 = CONTEXT.createMediaStreamSource(stream);

  recordingstream = CONTEXT.createMediaStreamDestination();

  source1.connect(recordingstream);
  source2.connect(recordingstream);
  
  const outputStream= new MediaStream();

  outputStream.addTrack(recordingstream.stream.getAudioTracks()[0]);

  recorder = new Recorder(outputStream);
  recorder.record();
  isRecording=true;
  console.log('Recording');
})
.catch(function(err) { 
  console.log(err);

如果记录器对象是MediaRecorder而不是记录器,此方法将起作用,但它不起作用,错误如下:

代码语言:javascript
复制
TypeError: Cannot read property 'createScriptProcessor' of undefined
    at new Recorder (recorder.js:58)
    at recording.js:49

未定义是因为recorder.js(Matt戴蒙德的代码)不能读取this.context值,因为它不存在。(

有人能帮我解决这个问题吗?我已经坚持了几天了,我似乎找不到任何关于这个问题的其他帖子,所以它可能是一个简单的修复,我只是看不到。提前谢谢你!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-04 13:13:48

由于Recorderjs期望通过MediaStreamAudioSourceNode调用,我怀疑它的工作原理如下:

代码语言:javascript
复制
const recordingSource = CONTEXT.createMediaStreamSource(
    recordingstream.stream
);

recorder = new Recorder(recordingSource);

如果您更喜欢使用MediaRecorder接口,可以尝试一下extendable-media-recorder。它也可以扩展到录制WAV文件。在内部,它使用原生MediaRecorderAudioWorklet,这将为您提供比ScriptProcessorNode更好的性能。(完全公开:我是可扩展媒体记录器的作者。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68650605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档