
С появлением HTML спецификации Media Capture стало возможным получать медиаданные с камеры пользователя так же, как если бы он загрузил на сайт какой-то файл с помощью элемента . Media Capture переопределяет поле для отправки файла если к нему добавить определённые атрибуты. Для десктопных компьютеров можно использовать метод navigator.getUserMedia() про который мы так же поговорим в этой статье.
Запись видео
Если добавить атрибут capture, то сразу откроется приложение камеры, не давая выбрать файл из библиотеки:
Можно указать режим камеры с помощью значений user — фронтальная или environment — основная:
Мультизагрузка видео
Если указать атрибут multiple, то пользователь сможет выбрать сразу несколько видео файлов из библиотеки:
Запись звука
С атрибутом capture возможность выбора готовых записей из библиотеки ограничена. На данный момент не сработало в Safari:
Изображения и фото
Фото только с камеры:
Режим камеры user — фронтальная или environment — основная:
Фото или видео
Фото и видео только с камеры:
Захват фото и видео на десктопах
отлично работает на мобильных и планшетах, но на обычном компьютере с веб-камерой у меня открывает только диалог выбора видео-файла. Как уже говорилось, чтобы захватить видео с веб-камеры можно использовать метод navigator.getUserMedia() из того же Media Streams API. Метод запрашивает у пользователя разрешение на использование до одного устройства ввода видео (например, камеры или общего экрана) и до одного устройства ввода звука (например, микрофона). Затем можно сохранить, вывести и даже наложить некоторые эффекты на полученный видео поток или сделать снимок.
В примере ниже мы добавляем тег и после разрешения на доступ к веб-камере, выведем в него видео-поток:
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("произошла ошибка");
}
);
}