2016-07-20 13 views
5

Đây là mã của tôi.navigator.getUserMột trong những hạn chế được phép, một số khác không, gọi lại thành công được gọi khi đóng dấu nhắc trình duyệt

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

Ở đây, khi chế video chưa được phép của người dùng, nhưng âm thanh đã được cho phép (do ghi chỉ âm thanh khác), và khi được nhắc cho cùng, và người sử dụng 'đóng' dấu nhắc, successCallback là được gọi và tôi sẽ không nhận được VideoStream, nhưng chỉ là Âm thanh.

Làm cách nào để đảm bảo rằng cả quyền đối với video và âm thanh đều được cho phép khi successCallback được gọi?

Trả lời

2

Đây thực sự là lỗi trong Chrome và Firefox, vì nó should gọi số errorCallback trong trường hợp này. Nó đã được sửa trong phiên bản phát triển Firefox (49).

Là một workaround, kiểm tra xem bạn có hai bài hát:

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

Một polyfill có thể giống như thế này (sử dụng https fiddle trong 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, Tôi đã kết thúc kiểm tra xem tôi có cả hai bản nhạc 'audio' và' video' trong 'successCallback' hay không. Cảm ơn câu trả lời của bạn mặc dù! –

Các vấn đề liên quan