Audio 在录制时使用getUserMedia从麦克风获取音频?

Audio 在录制时使用getUserMedia从麦克风获取音频?,audio,webrtc,Audio,Webrtc,我正在尝试编写一个Meteor.JS应用程序,它使用点对点“无线电”通信。当用户按下按钮时,它会向人们广播其麦克风输出 我有一些代码获得了录制音频的权限,它成功地获得了一个MediaStream对象,但我不知道如何在录制时从MediaStream对象获取数据 我看到有一种方法定义在某个地方,用于获取录制音频的所有曲目。我确信我可以找到一种方法来编写某种循环,在添加音频时通知我,但似乎应该有一种本地的、事件驱动的方法来从getUserMedia检索音频。我错过什么了吗?谢谢请尝试以下代码: nav

我正在尝试编写一个Meteor.JS应用程序,它使用点对点“无线电”通信。当用户按下按钮时,它会向人们广播其麦克风输出

我有一些代码获得了录制音频的权限,它成功地获得了一个
MediaStream
对象,但我不知道如何在录制时从
MediaStream
对象获取数据


我看到有一种方法定义在某个地方,用于获取录制音频的所有曲目。我确信我可以找到一种方法来编写某种循环,在添加音频时通知我,但似乎应该有一种本地的、事件驱动的方法来从
getUserMedia
检索音频。我错过什么了吗?谢谢

请尝试以下代码:

navigator.webkitGetUserMedia({audio: true, video: false}, 
function(stream) { // Success Callback
    var audioElement = document.createElement("audio");
    document.body.appendChild(audioElement);
    audioElement.src = URL.createObjectURL(stream);
    audioElement.play();
}, function () {  // Error callback
    console.log("error") 
});
您可以使用来自成功回调的流来创建对象URL,并将其传递到HTML5音频元素中


中,您需要做的是通过AudioAPI访问流(对于录制部分)。这是在为通过
getUserMedia
(我称之为
localStream
)获取的流分配一个var之后。因此,您可以从一个流中创建任意多个MediaStreamsource节点,这样您就可以在通过不同的RTPeerConnections将其发送给多个用户的同时进行录制

var audioContext = new webkitAudioContext() || AudioContext();
var source = audioContext.createMediastreamSource(localStream);
var AudioRecorder = function (source) {
    var recording = false;
    var worker = new Worker(WORKER_PATH);
    var config = {};
    var bufferLen = 4096;
    this.context = source.context;
    this.node = (this.context.createScriptProcessor ||
                 this.context.createJavaScriptNode).call(this.context,
                                                         bufferLen, 2, 2);
    this.node.onaudioprocess = function (e) {
      var sample = e.inputBuffer.getChannelData(0);
      //do what you want with the audio Sample, push to a blob or send over a WebSocket
   }
   source.connect(this.node);
   this.node.connect(this.context.destination);
};
通过WebSocket发送音频以便在服务器上录制

要仅在音频可用时发送音频,可以使用WebSocket或webrtc对等连接。 您将通过getUserMedia success对象获取流(您应该有一个全局变量,它将成为所有连接的流)。当它可用时,您可以使用信令服务器将请求的SDP转发给音频供应商。您可以将其设置为仅接收请求SDP和您的连接


  • 有趣的是,我不确定这是否适用于我的应用程序的共享组件,但我会尝试一下。有没有关于如何通过网络共享音频的想法?我想这很难。您是否尝试过WebRTC API?它现在在浏览器中实现得非常好。例子:,这是一个很好的下一个层次的东西,我将努力解决这个问题,看看我能做些什么。非常感谢