2014-05-22 5 views
0

JavaScript를 처음 사용하고 getUserMedia API를 사용하여 온라인 오디오 레코더를 만들려고합니다. 문제는 navigator.getUserMedia를 호출 할 때마다 성공 콜백 함수가 정의되지 않았으므로 함수가 아니라는 오류가 발생한다는 것입니다. 그것은 콜백 후에 괄호를 추가 할 때 작동하지만 createMediaStreamSource를 호출 할 때 잘못된 MediaStream 소스에 대한 오류가 발생합니다.GetUserMedia 콜백 정의되지 않음

온라인으로 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

첫째, 당신이 준 코드에서, 당신은 네비게이터 컨텍스트 (navigator.getUserMedia)에 getUserMedia를 호출하지만, this 상황에되지 않습니다. 둘째, navigator.getUserMedia을 호출하는 것은 브라우저별로 다르므로 충분하지 않습니다. 부울을 반환하는 대신 실제 getUserMedia 함수를 hasGetUserMedia에서 반환하는 것이 좋습니다.

그러나이 두 가지 문제를 해결하면 코드에 아무런 문제가 없습니다. 괜찮 았어. 간단한 테스트, 난 그냥 변경 :

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

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

에 ::

크롬 37에서 실행