GetUserMedia回调未定义

时间:2014-05-22 15:07:40

标签: callback getusermedia mediastreamsource

我是JavaScript的新手,我正在尝试使用getUserMedia API制作在线录音机。我遇到的问题是,每当我尝试调用navigator.getUserMedia时,我都会收到一个错误,即成功回调函数未定义,因此不是函数。它在回调后添加括号时有效,但是当我调用createMediaStreamSource时,我得到一个关于无效MediaStream源的错误。

我找到了一些在线使用getUserMedia的示例,但是当我尝试从我的计算机上运行它们时遇到了同样的问题,即使它们显然在线工作。

以下是我的代码。谢谢!

window.AudioContext = window.AudioContext || window.webkitAudioContext;
var context = new AudioContext();


//tests if browser is compatible with getUserMedia API
function hasGetUserMedia()
{
return !!(navigator.getUserMedia || navigator.webkitGetUserMedia ||      navigator.mozGetUserMedia || navigator.msGetUserMedia);
}

//successful callback for getUserMedia
function gotStream(stream)
{    
console.log('Compatible')

//set up microphone input to Web Audio API
var mic = context.createMediaStreamSource(stream);
var filter = context.createBiquadFilter();

//connect
mic.connect(filter);
filter.connect(context.destination);

console.log('Here')
}

//error Callback for getUserMedia
function errorCallback()
{
alert('Error capturing audio');
}

//initial function
function testGetUserMedia()
{
if (!hasGetUserMedia())
{
    alert("getUserMedia() is not supported in your browser");
    window.close();
}

//if Compatible
getUserMedia({audio:true}, gotStream, errorCallback);

}

window.addEventListener('load', testGetUserMedia);

1 个答案:

答案 0 :(得分:1)

首先,在您提供的代码中,您不是在导航器上下文(getUserMedia)上调用navigator.getUserMedia,而是在this上下文中调用navigator.getUserMedia。其次,调用getUserMedia是不够的,因为这不是特定于浏览器的。我建议从hasGetUserMedia返回实际的getUserMedia({audio:true}, gotStream, errorCallback); 函数,而不是返回布尔值。

然而,当我修复这两个问题时,我的代码没有问题。它运行得很好。作为一个简单的测试,我刚刚改变了:

navigator.webkitGetUserMedia({audio:true}, gotStream, errorCallback);

{{1}}

::在Chrome 37上运行