web-dev-qa-db-fra.com

Comment utiliser getUserMedia dans Chrome pour iOS

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);
9
Rao

... 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 .

Citant une autre question :

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.

15
wpp

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.

7
jesup

UPDATE: Je sais que c'est un très vieux fil de discussion, mais à partir de IOS 11.4 bêta, 

  1. getUserMedia est pris en charge, mais pas dans les applications PWA (également appelées applications Web mobiles ou autonomes) 2 FFTSize est désormais à 32768 pour un nœud d'analyseur. Cependant, il ne semble pas y avoir de moyen de transférer de l'audio en direct dans le nœud d'analyse (si environ la moitié supérieure des fréquences sont atténuées VRAIMENT dans le nœud FFT et oubliez l'installation de votre propre FFT car elle ne fera pas mieux GIGO)
  2. La dernière version de Safari pour ordinateur de bureau semble être à 11.1 et c'est encore pire puisque FFTSize est en tête à 2048 et vous ne recevez toujours pas de flux audio brut.

Je continue d'espérer!

2
Kerry Davis

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.

0
Jonny

WebRTC (y compris getUserMedia) doit être livré avec iOS11, mais utilisera les codecs h264/h265, c’est-à-dire sans VP8/VP9.

0
jlchereau