Поручите getUserMedia использовать лучшее доступное разрешение камеры
Я использую функцию getUserMedia для записи видео с веб-камеры. Все работает нормально, за исключением того, что это была только запись в разрешении 640x480, когда я только что указал видео: true для ограничения.
Если я установлю ограничение, как показано ниже, я получу более качественную запись на своем ноутбуке:
var mediaConstraints = {
audio: true,
video: {
width: { min: 1280 },
height: { min: 720 }
}
};
Но что, если другое устройство способно лучше, чем 1280x720, или имеет даже более низкие возможности?
Я попытался поиграть с установкой min, чтобы быть очень низким, а max, чтобы быть очень высоким; но это просто по умолчанию 640x480, или ничего не дало. Я также попытался установить желаемый размер, но, как и ожидалось, я просто получил какое-то значение. Если бы я установил желаемое значение очень высоким (чтобы он выбрал ближайший из доступных), я ничего не получал.
Итак, вопрос в том, как установить ограничения, чтобы получить максимальное разрешение, которое может обеспечить камера?
1 ответ
Обратите внимание, что min
означает "минимально допустимое значение", и, поскольку большинство браузеров по умолчанию имеют значение 640x480, значения ниже этого не будут иметь большого эффекта.
Согласно спецификации, просто попросите высокое разрешение, и вы должны получить самое близкое разрешение, которое может дать камера. Например:
var mediaConstraints = {
audio: true,
video: { width: 2880, height: 1800 }
};
Это работает в Firefox и может также работать в Edge (чего я не пробовал).
Посмотрите этот другой ответ для получения дополнительной информации о том, почему это работает.
Chrome (хотя они работают над этим) по-прежнему использует polyfill adapter.js для стандартного синтаксиса ограничений, к сожалению, и этот polyfill имеет некоторые ограничения, такие как тот, с которым вы столкнулись здесь.
Если вы используете adapter.js, вы можете заглянуть в веб-консоль в Chrome, чтобы увидеть старый нестандартный синтаксис, который он использует изначально. Используя этот синтаксис, можно построить серию последовательно более широких минимальных диапазонов, и таким образом заставить алгоритм предпочитать более высокие значения.