MediaDevices API — это современный интерфейс веб-браузеров, предоставляющий возможность взаимодействия с медиаустройствами пользователя, такими как камера и микрофон. Основное назначение API заключается в получении потоков медиа (аудио и видео), которые могут быть использованы для трансляции, записи или анализа в реальном времени. В сочетании с библиотекой ml5.js это открывает возможности для распознавания объектов, детекции поз, анализа эмоций и других задач машинного обучения в браузере.
1. navigator.mediaDevices
Объект navigator.mediaDevices является точкой доступа к
API. Ключевые методы:
getUserMedia(constraints) — основной метод для запроса доступа к аудио и видео.
constraints задаёт требования к медиа,
например: разрешение видео, частота кадров, использование фронтальной
или задней камеры.MediaStream.Пример структуры constraints для видеопотока высокого
разрешения:
const constraints = {
video: {
width: { ideal: 1280 },
height: { ideal: 720 },
facingMode: "user" // фронтальная камера
},
audio: true
};
enumerateDevices() — метод для получения списка всех доступных медиаустройств.
MediaDeviceInfo, содержащих
свойства: deviceId, kind
(videoinput, audioinput,
audiooutput), label и
groupId.getDisplayMedia(constraints) — позволяет захватывать экран пользователя для демонстраций, стриминга или анализа.
Простейший способ получить видеопоток камеры:
navigator.mediaDevices.getUserMedia({ video: true, audio: false })
.then(stream => {
const videoElement = document.querySelector('video');
videoElement.srcObject = stream;
videoElement.play();
})
.catch(error => {
console.error("Ошибка при доступе к камере:", error);
});
Ключевые моменты:
srcObject объекта <video>
позволяет напрямую отображать поток.ml5.js использует объекты MediaStream
для обработки данных с камеры или микрофона в реальном времени. Типичные
сценарии:
const classifier = ml5.imageClassifier('MobileNet', videoElement, modelReady);
function modelReady() {
console.log('Модель готова к использованию');
}
videoElement, который уже
подключен к камере через MediaDevices API.classifier.classify(videoElement, (err, results) => {
if (err) {
console.error(err);
return;
}
console.log(results);
});
classify работает с потоками в реальном времени,
предоставляя массив объектов с названием класса и вероятностью.const poseNet = ml5.poseNet(videoElement, () => {
console.log('PoseNet готов');
});
poseNet.on('pose', poses => {
console.log(poses);
});
pose активируется при детекции поз, что
позволяет использовать данные для анимаций, интерактивных игр и анализа
движений.then/catch или
async/await.deviceId из enumerateDevices()
позволяет явно указать источник.navigator.mediaDevices.getUserMedia({ video: { deviceId: { exact: '12345' } } });
MediaStream поддерживают события oninactive
для отслеживания прекращения передачи данных.<video> с атрибутом autoplay и
playsinline. Это минимизирует задержки в мобильных
браузерах.MediaDevices API обеспечивает гибкий и безопасный доступ к камере и микрофону, что позволяет библиотеке ml5.js использовать реальные данные для машинного обучения в браузере. Комбинация асинхронного получения потоков, возможности выбора устройства и интеграции с видеопотоками создаёт мощную платформу для интерактивных и образовательных проектов на JavaScript.