Audio 在录制时使用getUserMedia从麦克风获取音频?
我正在尝试编写一个Meteor.JS应用程序,它使用点对点“无线电”通信。当用户按下按钮时,它会向人们广播其麦克风输出 我有一些代码获得了录制音频的权限,它成功地获得了一个Audio 在录制时使用getUserMedia从麦克风获取音频?,audio,webrtc,Audio,Webrtc,我正在尝试编写一个Meteor.JS应用程序,它使用点对点“无线电”通信。当用户按下按钮时,它会向人们广播其麦克风输出 我有一些代码获得了录制音频的权限,它成功地获得了一个MediaStream对象,但我不知道如何在录制时从MediaStream对象获取数据 我看到有一种方法定义在某个地方,用于获取录制音频的所有曲目。我确信我可以找到一种方法来编写某种循环,在添加音频时通知我,但似乎应该有一种本地的、事件驱动的方法来从getUserMedia检索音频。我错过什么了吗?谢谢请尝试以下代码: nav
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?它现在在浏览器中实现得非常好。例子:,这是一个很好的下一个层次的东西,我将努力解决这个问题,看看我能做些什么。非常感谢