Захват изображения с камеры с помощью 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>
а можно добавить как-то кнопку, при нажатии на которую последний кадр будет отправляться на бэк? Тобишь мне нужно сделать так, чтобы пользователь навёл камеру, так как ему надо и сделал фотографию, с которой я буду работать на бэке. Заранее спасибо