GetUserMedia - FaceMode не распознается, несмотря на adapter.js

Я хочу получить видеопоток с моей задней камеры в приложении Ionic. Для этого я использую getUserMedia, который корректно работает с фронтальной камерой.

Когда я меняю режим облицовки на «окружающая среда», я получаю такую ​​ошибку:

Unknown constraint named facingMode rejected ConstraintNotSatisfiedError

В моем приложении Ionic я уже установил пакет npm «webrtc-adapter».

Вот мой код для получения потока с задней камеры:

this.constraints = { audio: true, video: {mandatory: { facingMode: 'environment'}}};
        cordova.plugins.diagnostic.requestRuntimePermission( (status) => {
            if (cordova.plugins.diagnostic.permissionStatus.GRANTED){

                navigator.getUserMedia(this.constraints, (stream) => {
                    let video = <HTMLVideoElement>document.getElementById('localVideo');
                    video.srcObject =  stream;
                }, function(err){
                    console.log("Error get stream: ", err.name);
                });
            }
        }, (error) => {
            console.error("Error during runtime permission :", error);
        }, cordova.plugins.diagnostic.permission.CAMERA);

Я думаю, это проблема совместимости. Кто-нибудь может мне помочь?

Спасибо.


person Damien LD    schedule 20.04.2017    source источник


Ответы (1)


Вы используете устаревший синтаксис нестандартных ограничений. adapter.js полифицирует спецификацию, поэтому, чтобы воспользоваться ею, вам необходимо следуйте спецификации. Например. вместо:

{audio: true, video: {mandatory: {facingMode: 'environment'}}};

использовать

{audio: true, video: {facingMode: {exact: 'environment'}}};

У меня уже есть ответ с рабочим примером этого. Он должен работать с Chrome. Не уверен, будет ли это работать с ионным или нет. Сообщите мне, если это не сработает.

person jib    schedule 20.04.2017
comment
Спасибо за ответ, но когда я использую этот синтаксис, у меня нет ошибок, но камера все еще находится в «пользовательском» режиме. - person Damien LD; 20.04.2017
comment
@DamienLD Убедитесь, что вы обновили адаптер до последней версии. Кроме того, на каком устройстве это устройство и какие камеры в нем есть? - person jib; 21.04.2017
comment
У меня последняя версия адаптера (3.3.3), и я запускаю код на двух устройствах: Huawei Honor и Huawei P9 lite. У меня две камеры на каждой, но d.label ничего не возвращает, это проблема? - person Damien LD; 21.04.2017
comment
После многих исследований я обнаружил, что у меня отсутствует разрешение на использование mediaDevices.enumerateDevices(). Вы знаете, какое разрешение мне добавить? - person Damien LD; 21.04.2017
comment
В конце концов я решил не использовать FaceMode. В моем случае я создал кнопку для переключения между каждой камерой устройства. Для этого я использую mediaDevices.enumerateDevices(), чтобы получить все доступные камеры. Спасибо за помощь ! - person Damien LD; 21.04.2017
comment
@DamienLD Если у вас нет разрешения на камеру или микрофон, то d.label будет пустым. Но моя скрипка сначала запрашивает разрешение камеры, поэтому при условии, что вы разрешили, что на ней должны отображаться ярлыки. Вам не нужно предоставлять постоянное разрешение. - person jib; 22.04.2017