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
,