兼容性API
//判断navigator.mediaDevices是否存在
if(navigator.mediaDevices === undefined) {
navigator.mediaDevices = {};
}
//判断navigator.mediaDevices.getUserMedia是否存在
if(navigator.mediaDevices.getUserMedia === undefined) {
navigator.mediaDevices.getUserMedia = function(constraints) {
var getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
if (!getUserMedia) {
return Promise.reject(new Error('getUserMedia is not implemented in this browser'));
}
return new Promise(function(resolve, reject) {
getUserMedia.call(navigator, constraints, resolve, reject);
});
}
}
获取设备
navigator.mediaDevices.getUserMedia({
audio: true,
video: true
}).then(stream => {
let tracks = stream.getTracks();
for(let i = 0; i < tracks.length; i++) {
tracks[i].stop();
}
}).catch(err => {
switch (err.name) {
case 'NotAllowedError':
//未授权
break;
case 'NotReadableError':
//设备正在被使用
break;
case 'NotFoundError':
//未找到设备
break;
case 'OverconstrainedError':
//设备ID不正确或不可用
break;
}
});