Тест камеры
Тестирование устройства камеры, предпросмотр в реальном времени, фотографирование, информация об устройстве
Предпросмотр в реальном времени
Что такое тест камеры?
Тест камеры проверяет, может ли браузер получить доступ к веб-камере, внешней USB-камере или встроенной камере ноутбука и показать живой предпросмотр. Он полезен перед видеовстречами, онлайн-занятиями, собеседованиями, трансляциями, записью и любыми ситуациями, где неправильная камера, заблокированное разрешение, черный экран, низкое разрешение или плохой свет могут создать проблему. Инструмент использует разрешение браузера на доступ к камере, показывает поток, который страница реально может открыть, и позволяет сделать локальный снимок для проверки кадра и четкости. Он помогает проверить устройство, разрешение, частоту кадров, соотношение сторон и базовое качество без загрузки видео. Он не исправляет драйверы или аппаратные поломки; если изображения нет, проверьте настройки приватности, другие приложения, кабели и драйверы.
Как использовать
Как использовать
- Нажмите «Начать тест» и разрешите браузеру доступ к камере
- Следите за превью камеры в реальном времени
- Нажмите «Сделать снимок», чтобы сфотографировать
- Можно переключаться между камерами или тестировать разные разрешения
Советы
- Если превью не появляется, проверьте, предоставил ли браузер разрешение на использование камеры
- Проверьте, не занята ли камера другим приложением
- Проверьте, выбрано ли нужное устройство камеры
- Проверьте, не отключена ли камера в системных настройках
Применение
Технический принцип
Инструмент тестирования камеры построен на спецификации W3C Media Capture and Streams, используя navigator.mediaDevices.getUserMedia(constraints) для доступа к камере. Параметр constraints — это JSON-подобный объект, задающий ideal, exact, min и max значения для разрешения (ширина, высота), частоты кадров, направления и идентификатора устройства. Решатель ограничений браузера согласовывает их с дескрипторами UVC (USB Video Class), сообщаемыми прошивкой камеры; когда точное ограничение не может быть выполнено, вызов отклоняется с ошибкой OverconstrainedError — именно этот механизм лежит в основе проверки поддержки разрешений, которая зондирует каждое разрешение с ограничениями { exact } и отмечает неудачи. После получения потока видеодорожка предоставляет getSettings() (фактически применённые значения после согласования), getCapabilities() (полные поддерживаемые диапазоны оборудования) и getConstraints() (изначально запрошенные). Применённое разрешение, частота кадров, соотношение сторон и направление считываются из getSettings() и отображаются. Живой предпросмотр рендерится путём установки srcObject видеоэлемента на MediaStream; медиаконвейер браузера обрабатывает декодирование, конверсию цветового пространства и рендеринг с ускорением на GPU без манипуляции пикселями через JavaScript. Для фотоснимков CanvasRenderingContext2D.drawImage(videoElement, 0, 0) делает снимок текущего декодированного видеокадра на скрытый canvas, а toDataURL('image/png') сериализует его как PNG data URL. enumerateDevices() перечисляет все доступные устройства ввода мультимедиа — обратите внимание, что метки устройств — пустые строки до тех пор, пока пользователь не предоставил разрешение на камеру хотя бы раз, что является мерой против фингерпринтинга. Вызов track.stop() освобождает аппаратное обеспечение камеры и выключает индикатор; установка videoElement.srcObject = null отсоединяет конвейер рендеринга. getUserMedia требует безопасного контекста (HTTPS или localhost) и запрашивает разрешение для каждого источника; индикатор камеры обеспечивается на уровне ОС и не может быть обойдён страницей.
- Согласование ограничений: решатель браузера сопоставляет значения ideal/exact/min/max с дескрипторами оборудования UVC — зондирования с { exact } завершаются ошибкой OverconstrainedError, когда сенсор не может обеспечить запрошенное разрешение, именно так заполняется таблица поддержки разрешений.
- Интроспекция дорожки: getSettings() возвращает фактически применённое разрешение, частоту кадров, соотношение сторон и facingMode после согласования — они могут отличаться от запрошенных ideal-значений, когда ограничены пропускная способность USB или возможности сенсора.
- Приватность enumerateDevices: метки устройств — пустые строки до тех пор, пока разрешение getUserMedia не предоставлено хотя бы раз для источника — мера против фингерпринтинга, предписанная спецификацией, из-за которой селектор устройств показывает общие названия при первом посещении.
- Фотоснимок через Canvas: drawImage() копирует декодированный видеокадр из GPU-композитора в 2D-пиксельный буфер без перекодирования; toDataURL('image/png') сериализует его как без потерь PNG — кадр никогда не покидает память браузера.
- Направление: VideoFacingModeEnum считывается из track.getSettings().facingMode ('user' для фронтальной, 'environment' для задней, 'left'/'right' для внешних) — не все настольные USB-камеры сообщают ориентацию, поэтому поле может показывать 'unknown'.
- Жизненный цикл потока: track.stop() освобождает аппаратное обеспечение камеры и выключает индикатор на уровне ОС; srcObject = null отсоединяет конвейер рендеринга — оба действия необходимы для полного освобождения устройства, чтобы другие приложения могли его использовать.
- Модель безопасности: getUserMedia требует безопасного контекста (HTTPS или localhost), запрашивает разрешение для каждого источника, а индикатор камеры обеспечивается на уровне ОС/ядра — страница не может обойти ни один из этих трёх барьеров.
Примеры
Базовый сценарий проверки
1. Нажмите «Начать тест» и предоставьте разрешение на камеру
2. Оцените качество изображения, фокус и частоту кадров
3. Нажмите кнопку «Фото», чтобы сделать тестовый снимок
4. Проверьте сведения об устройстве (разрешение, направление камеры, частоту кадров)
Применение: запускайте перед видеовстречей, собеседованием или прямой трансляциейПроверка разрешений
1. Раскройте панель «Поддерживаемые разрешения»
2. Нажмите «Тест» рядом с каждым разрешением (например, 1080p, 720p, 480p)
3. Проверьте, какие из них реально поддерживаются вашим оборудованием
4. Выберите максимально стабильное разрешение для своих задачПереключение между несколькими камерами
1. Откройте выпадающий список устройств вверху
2. Выберите другую камеру (фронтальная/задняя, внешняя веб-камера)
3. Сравните качество видео, цветовой баланс и работу при слабом освещении
4. Перед началом звонка убедитесь, что выбрано нужное устройствоЧасто задаваемые вопросы
Что проверяет тест камеры?
Может ли браузер получить доступ к камере, какое разрешение она поддерживает, как выглядит превью в реальном времени и работает ли базовый захват кадра (снимок в изображение). Полезно перед видеозвонком, чтобы убедиться, что выбрана нужная камера, картинка не перевёрнута и экспозиция нормальная.
Почему моя камера не отображается?
Частые причины: браузер не получил разрешение на камеру (проверьте значок разрешений в адресной строке); камеру удерживает другое приложение (закройте Zoom, Teams, OBS); ОС блокирует доступ браузера к камере (проверьте настройки конфиденциальности Windows / разрешения камеры в macOS); аппаратный переключатель отключает камеру.
Может ли тест переключаться между фронтальной и основной камерой?
Да, если на устройстве есть обе. Страница перечисляет доступные камеры через navigator.mediaDevices.enumerateDevices(); выберите нужную из выпадающего списка. На телефонах «user» — это фронтальная, «environment» — основная.
Какие разрешения поддерживаются?
Любые, которые предоставляет камера и браузер. Распространённые варианты: 320×240, 640×480, 1280×720, 1920×1080. Более высокие разрешения требуют больше пропускной способности (для онлайн-использования) и нагрузки на процессор. По умолчанию страница берёт максимальное; выберите ниже, если интернет медленный.
Загружается ли видео с камеры куда-либо?
Нет. Видеопоток отображается локально, захваченные кадры остаются в браузере. Учтите, что разрешение на камеру выдаётся на уровне источника, поэтому любая открытая вкладка этого сайта имеет доступ к ней, пока вы не отзовёте разрешение. Закрывайте вкладку после использования.
Почему видео отзеркалено?
Браузеры зеркалят фронтальную камеру в превью, чтобы соответствовать привычному «зеркальному» виду. Захваченные снимки могут быть как зеркальными, так и нет — проверяйте оба варианта. Зеркало переключается через CSS transform: scaleX(-1).
Что делать, если разрешение на камеру окончательно отклонено?
В Chrome нажмите на значок камеры в адресной строке → «Всегда разрешать». При необходимости сбросьте через chrome://settings/content/camera. В других браузерах есть аналогичные настройки разрешений. После выдачи доступа обновите страницу.