Ios13 Getusermedia Not Working On Chrome And Edge
Solution 1:
Update - 19/11/2020
WKWebView can use getUserMedia in iOS 14.3 beta 1.
- https://bugs.webkit.org/show_bug.cgi?id=208667
- https://bugs.chromium.org/p/chromium/issues/detail?id=752458
Browser compatibility
I've been following this problem for years via other posts (e.g. NotReadableError: Could not start source) . As of this date there is no access to getUserMedia outside of Safari standalone view (webapp) or the iOS Safari app.
Any browser on iOS other than Safari does not have getUserMedia access. This is because under the hood they are using WKWebView.
A bug ticket has been filed specifically for WKWebView. No support. https://bugs.webkit.org/show_bug.cgi?id=208667
Updates to standalone mode gaining getUserMedia access in iOS 13.4 https://bugs.webkit.org/show_bug.cgi?id=185448#c6
Safari freezing
You are passing in constraints which are invalid (e.g. window width and height). You need to use standard camera resolutions e.g. 640x480, 1280x720, etc. When you use an atypical resolution WebRTC spec states the browser will try emulate your desired feed however this often results in the camera freezing or looking warped.
If you are trying to capture the front camera and fullscreen it you can look at: getUserMedia (Selfie) Full Screen on Mobile
There also maybe 1 or 2 bugs with the use of async/await. Below is a demo which should work (However within stackoverflow it will error due to security permissions, but should work locally or hosted). Let me know if I can help further.
functionisMobile() {
const isAndroid = /Android/i.test(navigator.userAgent);
const isiOS = /iPhone|iPad|iPod/i.test(navigator.userAgent);
return isAndroid || isiOS;
}
asyncfunctionsetupCamera() {
const isPortrait = true; // do logic herelet video = document.getElementById('video');
console.log("Getting video");
video.setAttribute('autoplay', '');
video.setAttribute('muted', '');
video.setAttribute('playsinline', '');
console.log("Calling getUserMedia");
returnnewPromise((resolve) => {
(async() => {
await navigator.mediaDevices.getUserMedia({
'audio': false,
'video': {
facingMode: 'user',
width: isPortrait ? 480 : 640,
height: isPortrait ? 640 : 480,
},
})
.then((stream) => {
console.log("Got getUserMedia stream");
video.srcObject = stream;
video.play();
resolve(true);
})
.catch((err) => {
console.log("Encountered getUserMedia error", err);
resolve(false);
});
})();
});
}
(async() => {
const ret = awaitsetupCamera();
console.log(`Initialised camera: ${ret}`)
})();
html,
body {
height: 100%;
margin: 0;
}
div {
position: relative;
min-height: 100%;
min-width: 100%;
overflow: hidden;
object-fit: cover;
}
video {
width: 480px;
height: 640px;
background-color: black;
}
<div><videoid="video"></video></div>
Post a Comment for "Ios13 Getusermedia Not Working On Chrome And Edge"