Захват изображения с камеры с помощью HTML5
27 февраля 2020 HTML
С появлением HTML спецификации Media Capture стало возможным получать медиаданные с камеры пользователя так же, как если бы он загрузил на сайт какой-то файл с помощью элемента <input type="file"/>
. Media Capture переопределяет поле для отправки файла если к нему добавить определённые атрибуты. Для десктопных компьютеров можно использовать метод navigator.getUserMedia()
про который мы так же поговорим в этой статье.
Содержание
Запись видео
<input type="file" accept="video/*" >
Если добавить атрибут capture
, то сразу откроется приложение камеры, не давая выбрать файл из библиотеки:
<input type="file" accept="video/*" capture>
Можно указать режим камеры с помощью значений user
— фронтальная или environment
— основная:
<input type="file" accept="video/*" capture="user" > <input type="file" accept="video/*" capture="environment" >
Мультизагрузка видео
Если указать атрибут multiple
, то пользователь сможет выбрать сразу несколько видео файлов из библиотеки:
<input type="file" accept="video/*" multiple>
Запись звука
<input type="file" accept="audio/*" >
Если вам нужен консультант по строительству
С атрибутом capture
возможность выбора готовых записей из библиотеки ограничена. На данный момент не сработало в Safari:
<input type="file" accept="audio/*" capture>
Изображения и фото
<input type="file" accept="image/*" >
Фото только с камеры:
<input type="file" accept="image/*" capture>
Режим камеры user
— фронтальная или environment
— основная:
<input type="file" accept="video/*" capture="user" > <input type="file" accept="video/*" capture="environment" >
Фото или видео
<input type="file" accept="image/*,video/*" >
Фото и видео только с камеры:
<input type="file" accept="image/*,video/*" capture>
Захват фото и видео на десктопах
<input type="file" accept="video/*" capture />
отлично работает на мобильных и планшетах, но на обычном компьютере с веб-камерой у меня открывает только диалог выбора видео-файла. Как уже говорилось, чтобы захватить видео с веб-камеры можно использовать метод navigator.getUserMedia()
из того же Media Streams API. Метод запрашивает у пользователя разрешение на использование до одного устройства ввода видео (например, камеры или общего экрана) и до одного устройства ввода звука (например, микрофона). Затем можно сохранить, вывести и даже наложить некоторые эффекты на полученный видео поток или сделать снимок.
В примере ниже мы добавляем тег <video>
и после разрешения на доступ к веб-камере, выведем в него видео-поток:
<video autoplay id="video-player"></video> <script> if(navigator.webkitGetUserMedia!=null) { var options = { video:true, audio:true }; // Запрашиваем доступ к веб-камере navigator.webkitGetUserMedia(options, function(stream) { // Получаем тег video var video = document.getElementById('video-player'); // Включаем поток в тег video video.srcObject = stream; }, function(e) { console.log("произошла ошибка"); } ); } </script>
а можно добавить как-то кнопку, при нажатии на которую последний кадр будет отправляться на бэк? Тобишь мне нужно сделать так, чтобы пользователь навёл камеру, так как ему надо и сделал фотографию, с которой я буду работать на бэке. Заранее спасибо