JSFiddle - React, Tailwind, and code Playground
by Michael Prosser
HTML
<video id="videoLeft"></video>
<video id="videoRight"></video>
<button id="button">
Start
</button>
<select id="select">
</select>
JavaScript
const videoLeft = document.getElementById('videoLeft');
const videoRight = document.getElementById('videoRight');
const button = document.getElementById('button');
const select = document.getElementById('select');
function gotDevices(mediaDevices) {
select.innerHTML = '';
select.appendChild(document.createElement('option'));
let count = 2;
mediaDevices.forEach(mediaDevice => {
if (mediaDevice.kind === 'videoinput') {
const option = document.createElement('option');
option.value = mediaDevice.deviceId;
const label = mediaDevice.label || `Camera ${count++}`;
const textNode = document.createTextNode(label);
option.appendChild(textNode);
select.appendChild(option);
}
});
}
function stopMediaTracks(stream) {
stream.getTracks().forEach(track => {
track.stop();
});
}
button.addEventListener('click', event => {
if (typeof currentStream !== 'undefined') {
stopMediaTracks(currentStream);
}
const videoConstraints = {};
videoConstraints.facingMode = 'environment';
const constraints = { video: videoConstraints, audio: false };
navigator.mediaDevices
.getUserMedia(constraints)
.then(stream => {
currentStream = stream;
video.srcObject = stream;
return navigator.mediaDevices.enumerateDevices();
})
.then(gotDevices)
.catch(error => {
console.error(error);
});
});