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

时间:2014-06-23 18:07:21

标签: audio webrtc

我试图编写一个使用点对点"无线电"的Meteor.JS应用程序。通讯。当用户按下按钮时,它会将麦克风输出广播给人。

我有一些获得录制音频权限的代码,并且它成功获得了MediaStream个对象,但我无法弄清楚如何从MediaStream对象获取数据正在录制。

我看到在某处定义了一种方法来获取录制音频的所有音轨。我确信我能找到一种方法来编写某种循环,在添加音频时通知我,但似乎应该有一种原生的,事件驱动的方式从getUserMedia检索音频。我错过了什么吗?感谢

2 个答案:

答案 0 :(得分:1)

您要做的是通过AudioAPI(用于录制部分)访问流。这是在您通过getUserMedia(我称之为localStream)抓取您的信息流的var之后。因此,您可以根据需要从一个流创建任意数量的MediaStreamsource节点,这样您就可以在通过不同的rtcpeerconnections将其发送给众多人时进行记录。

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);
};

Here is a version I wrote/modified通过websockets发送音频以便在服务器上录制。

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

  1. PeerConnection example 1
  2. PeerConnection example 2

答案 1 :(得分:0)

尝试使用以下代码:

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音频元素。

http://jsfiddle.net/veritas/2B9Pq/

中摆弄