我试图编写一个使用点对点"无线电"的Meteor.JS应用程序。通讯。当用户按下按钮时,它会将麦克风输出广播给人。
我有一些获得录制音频权限的代码,并且它成功获得了MediaStream
个对象,但我无法弄清楚如何从MediaStream
对象获取数据正在录制。
我看到在某处定义了一种方法来获取录制音频的所有音轨。我确信我能找到一种方法来编写某种循环,在添加音频时通知我,但似乎应该有一种原生的,事件驱动的方式从getUserMedia
检索音频。我错过了什么吗?感谢
答案 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 :(得分: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音频元素。
中摆弄