UNPKG

enumerate-devices

Version:

A small project to normalize browser differences for enumerating media devices

54 lines (51 loc) 2.13 kB
module.exports = function (cb) { if (typeof Promise !== 'function') { var err = new Error('Device enumeration not supported.'); err.kind = 'METHOD_NOT_AVAILABLE'; if (cb) { console.warn('module now uses promise based api - callback is deprecated'); return cb(err); } throw err; } return new Promise(function(resolve, reject) { var processDevices = function (devices) { var normalizedDevices = []; for (var i = 0; i < devices.length; i++) { var device = devices[i]; //make chrome values match spec var kind = device.kind || null; if (kind && kind.toLowerCase() === 'audio') { kind = 'audioinput'; } else if (kind && kind.toLowerCase() === 'video') { kind = 'videoinput'; } normalizedDevices.push({ facing: device.facing || null, deviceId: device.id || device.deviceId || null, label: device.label || null, kind: kind, groupId: device.groupId || null }); } resolve(normalizedDevices); if (cb) { console.warn('module now uses promise based api - callback is deprecated'); cb(null, normalizedDevices); } }; if (window.navigator && window.navigator.mediaDevices && window.navigator.mediaDevices.enumerateDevices) { window.navigator.mediaDevices.enumerateDevices().then(processDevices); } else if (window.MediaStreamTrack && window.MediaStreamTrack.getSources) { window.MediaStreamTrack.getSources(processDevices); } else { var err = new Error('Device enumeration not supported.'); err.kind = 'METHOD_NOT_AVAILABLE'; reject(err); if (cb) { console.warn('module now uses promise based api - callback is deprecated'); cb(err); } } }); };