2016-07-20 3 views
5

ここに私のコードです。ビデオ制約がまだユーザーによって許可されていないが、オーディオはすでに(起因する他のただのオーディオ録音を)許可されている、と同じのためのプロンプトが表示されたら、ユーザーが「閉じた」ここでnavigator.getUserMedia 1つの制約が許可されています。別の1つは許可されていません。ブラウザプロンプトを閉じるとコールバックが呼び出されます

captureUserMedia(mediaConstraints, successCallback, errorCallback) { 
    navigator.getUserMedia(mediaConstraints, successCallback, errorCallback); 
} 

captureUserMedia00(callback){ 
    captureUserMedia({ 
    audio: true, 
    video: true 
    }, function(stream) { 
    console.log('user media Callback', stream); 
    callback(stream); 
    }, function(error) { 
    console.log('user media Error ', JSON.stringify(error)); 
    }); 
}}); 
} 

は、プロンプトは、successCallbackがあります私はVideoStreamを取得することはありませんが、オーディオだけです。

successCallbackが呼び出されたときに、ビデオとオーディオの両方のアクセス許可が許可されるようにするにはどうすればよいですか?

答えて

2

これは実際にはChromeとFirefoxのバグです。shouldはこの場合はerrorCallbackとなります。 Firefox Developer Edition(49)で修正されています。 、

let getUserMedia = constraints => 
 
    navigator.mediaDevices.getUserMedia(constraints).then(stream => { 
 
    if (constraints.audio && !stream.getAudioTracks().length || 
 
     constraints.video && !stream.getVideoTracks().length) { 
 
     stream.getTracks().forEach(track => track.stop()); 
 
     throw new DOMException("The object can not be found here.", 
 
          "NotFoundError"); 
 
    } 
 
    return stream; 
 
    }); 
 

 
getUserMedia({ video: true, audio: true }) 
 
    .then(stream => video.srcObject = stream) 
 
    .catch(e => console.log(e.name + ": "+ e.message));
<video id="video" width="160" height="120" autoplay></video>

+1

うん:ポリフィルは(Chromeで使用https fiddle)のようになります

if (stream.getTracks().length < 2) { throw new Error("Need both"); } 

:回避策として

は、次の2つのトラックを持っていることを確認します私は 'successCallback'に' audio'と 'video'トラックの両方があるかどうかを確認しました。あなたの答えをありがとう! –

関連する問題