Я использую navigator.mediaDevices.getUserMedia()
на Chrome 80 на Linux. Чтобы получить наивысшее качество, я пробегаю через ряд ограничений, проверяю ошибки или поток, который на самом деле не имеет желаемого размера. По крайней мере, для одной из моих камер она часто получает только размер 640x480, а не 1280x720, на который она способна. Если я позвоню getUserMedia()
для другого устройства, а затем go вернусь и вызову его для исходного устройства, оно, как правило, но не всегда, получает версию 1280x720. Я не уверен, как заставить Chrome использовать правильные размеры.
Вот ограничения, которые я использую (последовательно):
// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"min":1920,"ideal":1920,"max":1920},"height":{"min":1080,"ideal":1080,"max":1080}}}
// succeeds, but returns 640x480
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"ideal":1920},"height":{"ideal":1080}}}
// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"min":1920},"height":{"min":1080}}}
// OverconstrainedError (deviceId)
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":{"exact":1920},"height":{"exact":1080}}}
// succeeds, but returns 640x480
{"audio":false,"video":{"deviceId":{"exact":"cd059d931e1c4554faee7a5722ab8db810cec27316cc085512fcf5815dac3a98"},"frameRate":30,"width":1920,"height":1080}}
А затем один и тот же шаблон для 1600x1200, 1280x720, 800x600 и 640x480. Последнее успешно в конечном итоге, потому что оно соответствует единственному измерению, когда-либо возвращенному из getUserMedia()
.
. Это прекрасно работает на Firefox. Работает нормально для некоторых устройств. Иногда это работает, если я выбрал другое устройство после того, как первое было загружено с низкими размерами.
Тот факт, что OverconstrainedError
говорит о том, что ограничение нарушителя - deviceId
, немного касается, но основано на том, что Я прочитал, он просто возвращает первое ограничение, не обязательно то, которое не удалось. В любом случае, трудно понять, как идентификатор устройства может вызвать сбой, когда другие варианты не дают сбоя.
Что мне нужно сделать, чтобы эта работа работала?