Created
March 23, 2021 09:39
-
-
Save Mupati/95d314c2d109c825381dc6eec9dbc492 to your computer and use it in GitHub Desktop.
Browser Compatible Helper Function to access Device Microphone and Camera
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export const getPermissions = () => { | |
// Older browsers might not implement mediaDevices at all, so we set an empty object first | |
if (navigator.mediaDevices === undefined) { | |
navigator.mediaDevices = {}; | |
} | |
// Some browsers partially implement media devices. We can't just assign an object | |
// with getUserMedia as it would overwrite existing properties. | |
// Here, we will just add the getUserMedia property if it's missing. | |
if (navigator.mediaDevices.getUserMedia === undefined) { | |
navigator.mediaDevices.getUserMedia = function(constraints) { | |
// First get ahold of the legacy getUserMedia, if present | |
const getUserMedia = | |
navigator.webkitGetUserMedia || navigator.mozGetUserMedia; | |
// Some browsers just don't implement it - return a rejected promise with an error | |
// to keep a consistent interface | |
if (!getUserMedia) { | |
return Promise.reject( | |
new Error("getUserMedia is not implemented in this browser") | |
); | |
} | |
// Otherwise, wrap the call to the old navigator.getUserMedia with a Promise | |
return new Promise((resolve, reject) => { | |
getUserMedia.call(navigator, constraints, resolve, reject); | |
}); | |
}; | |
} | |
navigator.mediaDevices.getUserMedia = | |
navigator.mediaDevices.getUserMedia || | |
navigator.webkitGetUserMedia || | |
navigator.mozGetUserMedia; | |
return new Promise((resolve, reject) => { | |
navigator.mediaDevices | |
.getUserMedia({ video: true, audio: true }) | |
.then(stream => { | |
resolve(stream); | |
}) | |
.catch(err => { | |
reject(err); | |
// throw new Error(`Unable to fetch stream ${err}`); | |
}); | |
}); | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment