(Capturing Video in Html5
by joshiisaurabh
HTML
<head>
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<script src='video.js'></script>
</head>
<body>
<div class='container'>
<video autoplay></video>
<p id='prompt1'> Capture Video To Get Started</p>
<div>
<h3>Screenshotter</h3>
<button class='capture'>Capture video</button>
<button id='screenshot' disabled>Screenshot</button>
<button class='download' disabled>Download</button>
<label for="select"> Format </label>
<select id="select" onchange='onFormatChange()'>
<option value='.png'>PNG</option>
<option value='.jpeg'>JPEG</option>
<option value='.jpg'>JPG</option>
<option value='.tiff'>TIFF</option>
</select>
<button id='clear' onclick="clearAll()" disabled>Clear All</button>
</div>
<div class='imgContainer'>
<p id='prompt2'>Click 'Screenshot' to take a picture.</p>
<img src=''>
</div>
</div>
<br/>
</body>
</html>
CSS
body, button, select{
font-family: 'Courier New', Courier, monospace;
}
.container{
display: flex;
margin: auto;
justify-content: space-between;
align-items: center;
position: relative;
}
video, .container > .imgContainer{
display: flex;
align-items: center;
width: 45%;
height: 400px;
border: solid 1px #6495ED;
max-width: 600px;
position: relative;
}
#prompt1, #prompt2{
position: absolute;
top: 50%;
left: 10px;
z-index: 100;
}
#prompt2{
display: none;
}
.container > div > img {
width: 100%;
display: none;
}
h3{
text-align: center;
}
button, select, label{
cursor: pointer;
display: block;
margin: 10px auto;
width: 125px;
padding: 10px 0 10px 0;
}
button:disabled{
cursor: not-allowed;
}
#buttonContainer{
display: flex;
justify-content: space-evenly;
align-items: center;
width: 300px;
margin: 10px auto;
}
select, label{
visibility: hidden;
-webkit-appearance: none;
-webkit-border-radius: 0px;
border-radius: 0px;
text-align: center;
text-align-last: center;
-moz-text-align-last: center;
}
#c2Label{
visibility: visible;
}
#canvasTwo{
max-width: 600px;
}
JavaScript
var img, backgroundImage, video, prompt1, prompt2, screenshot, download, select, label, clear;
var enable = false;
const canvas = document.createElement('canvas');
var format = '.png'
const init = () => {
hasGetUserMedia()
if (enable){
prompt1 = document.getElementById('prompt1');
prompt2 = document.getElementById('prompt2');
screenshot = document.getElementById('screenshot');
clear = document.getElementById('clear');
select = document.getElementsByTagName('select')[0]
label = document.getElementsByTagName('label')[0]
img = document.getElementsByTagName('img')[0];
video = document.getElementsByTagName('video')[0];
download = document.getElementsByClassName('download')[0]
download.addEventListener('click', onDownload)
document.getElementsByClassName('capture')[0].addEventListener('click', onCapture)
screenshot.addEventListener('click', onScreenshot)
}
}
const hasGetUserMedia = () => {
if (!navigator.mediaDevices && !navigator.mediaDevices.getUserMedia){
alert('Unable to enable camera.')
} else {
enable = true
}
}
const onCapture = () => {
navigator.mediaDevices
.getUserMedia({video: true})
.then(stream => {
video.srcObject = stream
prompt1.style.display = 'none';
prompt2.style.display = 'block';
screenshot.disabled = false;
clear.disabled = false;
})
.catch(err=>alert('Error occurred: ' + err));
}
const onScreenshot = () => {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
canvas.getContext('2d').drawImage(video, 0, 0);
prompt2.style.display = 'none'
img.src = canvas.toDataURL('image/png');
img.style.display = 'block'
download.disabled = false
select.style.visibility = 'visible'
label.style.visibility =...