如何处理音频流

问题描述 投票:0回答:1

我在处理数据流方面完全没有经验,想将getUserMedia作为学习项目输入到opus转换器中,然后-也许太天真了-通过socket.io发送它。我的想法-也许是错误的想法-是我不断地将流分成多个部分进行转换。

[我感谢所有对通用流处理能力更好的解释,因为我说这是一个学习项目,我知道WebRTC提供了更好的解决方案。

作为编码器,我想使用https://github.com/ImagicTheCat/libopusjs。欢迎使用替代方法,但我想坚持使用基于wasm的编码器的想法。

到目前为止,我所拥有的(作为第一步,我的想法是对流进行编码,然后再次解码并输出):

if (navigator.mediaDevices) {
      console.log('getUserMedia supported.');
      navigator.mediaDevices.getUserMedia ({audio: true, video: true})
      .then(function(stream) {
          video.srcObject = stream;
          video.onloadedmetadata = function(e) {
              video.play();
              video.muted = true;
          };

          var audioCtx = new AudioContext();
          var source = audioCtx.createMediaStreamSource(stream);


          var enc = new libopus.Encoder(1,48000,24000,20,false);
=> enc stream
          var dec = new libopus.Decoder(1,48000);

=> perspectively send this enc stream via socketio
=> dec enc stream => RESULT stream




          RESULT.connect(audioCtx.destination);

      })
      .catch(function(err) {
          console.log('The following gUM error occured: ' + err);
      });
  } else {
     console.log('getUserMedia not supported on your browser!');
  }
javascript stream webassembly opus
1个回答
2
投票

您看过这些WASM模块吗?

© www.soinside.com 2019 - 2024. All rights reserved.