Je développe une application simple, j'essaie d'accéder à la caméra et au microphone en utilisant getUserMedia
. Cela fonctionne très bien pour moi sur les ordinateurs de bureau Chrome et Android Chrome, mais pas sur les iPhone et les iPad Chrome.
navigator.getUserMedia = navigator.getUserMedia
|| navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
var constraints = "";
if (mediaType === "audio,video") {
constraints = {
audio : true,
video : true
};
} else {
constraints = {
audio : true,
video : false
};
}
navigator.getUserMedia(constraints, successCallback, errorCallback);
... mais cela ne fonctionne pas sur iPhone et iPad Chrome.
L'application Chrome sur votre iPhone ou iPad ne fonctionne pas avec une version "complète" de Chrome. Ses capacités sont limitées à la plate-forme iOS. Donc, getUserMedia
, etc., ne sera probablement pas disponible tant que Safari/Apple ne le prendra pas en charge .
La politique Apple oblige les autres navigateurs à utiliser leur version de webkit qui ne prend pas en charge webRTC. Par conséquent, vous ne bénéficierez pas de cette prise en charge dans une application Web sur iOS. L'activité dans le kit Web est un changement, mais le temps est venu pour l'atterrir.
D'après ce que je comprends (je suis un ingénieur Mozilla), Chrome sur iOS ne prend pas encore en charge webrtc ou getUserMedia.
UPDATE: Je sais que c'est un très vieux fil de discussion, mais à partir de IOS 11.4 bêta,
Je continue d'espérer!
Puisque "navigator.getUserMedia" est obsolète, vous devez utiliser "navigator.mediaDevices.getUserMedia". Cela semble (toujours) être un problème. L'accès à l'appareil photo sur iOS 11.4 fonctionne correctement tant que vous l'utilisez dans Safari. Si vous souhaitez l'utiliser dans un autre navigateur (Chrome, Firefox), il n'est pas pris en charge. Voici un exemple que vous pouvez essayer:
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
var constraints = {
audio: true,
video: true
};
navigator.mediaDevices.getUserMedia(constraints)
.then(function(stream) {
var video = document.querySelector('video');
video.srcObject = stream;
video.onloadedmetadata = function(e) {
video.play();
};
})
.catch(function(err) {
console.log (err);
});
}
else {
console.log ("navigator.mediaDevices not supported")
}
<video id="video" width="200" height="200" autoplay playsinline></video>
Ce code fonctionne très bien sur tous les appareils de bureau, sur les appareils mobiles Android et sur les appareils iPhone de Safari, mais pas avec Chrome/Firefox: vous passerez immédiatement à une autre affaire: "navigator.mediaDevices non supporté"
Étant donné qu'iOS 11.x prend en charge WebRTC, je ne sais pas trop où se situe le problème: Apple ou Google/Mozilla? De plus, s'il y a une autre solution de travail, je suis heureux de l'entendre.
WebRTC (y compris getUserMedia) doit être livré avec iOS11, mais utilisera les codecs h264/h265, c’est-à-dire sans VP8/VP9.