2016-07-20 5 views
5

Hier ist mein Code.navigator.getUserMedia eine Einschränkung erlaubt, eine andere nicht, Erfolg Rückruf beim Schließen der Browser-Eingabeaufforderung

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)); 
    }); 
}}); 
} 

Wenn hier Video-Einschränkung noch nicht durch den Benutzer erlaubt, aber Audio ist bereits erlaubt (aufgrund anderer nur Audio-Aufnahmen), und wenn für die gleiche Aufforderung und Benutzer ‚schließt‘ die Aufforderung, successCallback ist genannt, und ich werde nicht den VideoStream bekommen, sondern nur Audio.

Wie kann ich sicherstellen, dass sowohl die Video- als auch die Audioberechtigungen zulässig sind, wenn successCallback aufgerufen wird?

Antwort

2

Dies ist eigentlich ein Bug in Chrome und Firefox, wie es in diesem Fall shoulderrorCallback aufrufen. Es wurde in Firefox Developer Edition (49) behoben.

Als Abhilfe können Sie sicher, dass Sie zwei Tracks bekam:

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

A polyfill etwas könnte wie folgt aussehen (verwenden https fiddle in Chrome):

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

Yup, Am Ende habe ich nachgesehen, ob ich 'audio' und' video' Titel in 'successCallback' gefunden habe. Danke für deine Antwort! –

Verwandte Themen