WebRTC ограничения Firefox

В настоящее время я использую WebRTC в моей личной разработке, все работает отлично. Я получаю поток от своей веб-камеры, но теперь я хочу использовать ограничения для getUserMedia(),

var constraints = {
           audio: false,
           video: {
               mandatory : {
                     minWidth: 1280,
                     minHeight: 720 
               }
           }
};

Когда я проверяю это в Firefox, кажется, что он игнорирует ограничения. Когда я тестирую на Chrome или Opera, мои ограничения работают нормально, а качество хорошее, кто-нибудь знает почему? Проблема в Firefox?

Спасибо за ваши предложения

2 ответа

Решение

Редактировать ссылку вики кажется устаревшей, пожалуйста, обратитесь к ответу ниже.

Похоже, что Firefox еще не реализовал ограничения.

Ограничения были реализованы начиная с Chrome 24 и Opera 18. Их можно использовать для установки значений разрешения видео для вызовов getUserMedia() и RTCPeerConnection addStream().

и от: https://wiki.mozilla.org/Media/getUserMedia

Разрешение захвата [в Firefox] в настоящее время установлено на 640x480 для видео;

Поддерживает только

Поддерживаемые минимальные ограничения: (Примечание: все эти логические значения по умолчанию имеют значение "false") video: true/false audio: true/false fake: true/false picture: true/false

Firefox поддерживает подмножество ограничений с getUserMedia(), но не устаревший синтаксис, который используют Chrome и Opera. mandatory / optional синтаксис устарел много лет назад, и minWidth а также minHeight за год до этого.

Спецификация MediaCapture

Согласно спецификации, которая сейчас стабильна, ваш пример должен быть написан так:

var constraints = {
    audio: false,
    video: {
        width: { min: 1280 },
        height: { min: 720 },
    }
};

Это работает в Firefox (и Chrome с adapter.js): https://jsfiddle.net/34qxx5w1

В спецификации ключевые слова min, max, а также exact (иначе min == max) по своей природе обязательны, тогда как простые значения и ideal не. Вот более полный пример:

var constraints = {
    audio: false,
    video: {
        width: { min: 1024, ideal: 1280, max: 1920 },
        height: { min: 576, ideal: 720, max: 1080 },
    }
};

Это работает в Firefox (и Chrome с polyfill adapter.js в простых случаях).

ideal Значение, если оно используется, имеет гравитацию, что означает, что браузер попытается найти настройку (и камеру, если их больше одного) с наименьшим расстоянием пригодности от заданных идеальных значений.

Простые значения по своей природе идеальны, что означает, что:

var constraints = { video: { width: 640, height: 480 } };

такой же как:

var constraints = { video: { width: { ideal: 640 }, height: { ideal: 480 } } };

Другими словами, предпочтение, которое getUserMedia() постараюсь чтить, но никогда не перестану.

Если у вас должно быть определенное разрешение, используйте этот сокращенный вариант:

var constraints = { video: { width: { exact: 640 }, height: { exact: 480 } } };

Fire Fox

На данный момент, width, height, frameRate и (на мобильном телефоне) facingMode поддерживаются в Firefox. Также некоторые предупреждения по версии:

  • FF32-37: простые значения и ideal не поддерживаются Однако значения не являются обязательными, если вы не добавите require ключевое слово.

  • FF38 +: Реализует спецификацию для вышеуказанных ограничений. Улучшена обработка камер Mac (хотя frameRate имеет ограничения для Mac).

  • FF43 +: Инструменты MediaStreamTrack.applyConstraints() а также mediaDevices.getSupportedConstraints(),

  • FF46+: Инструменты echoCancellation,

Другие вопросы по тегам