Last active
May 14, 2024 18:36
-
-
Save men232/f3931f3113908ccccc5488a7f30df3e1 to your computer and use it in GitHub Desktop.
Capture webcam (fullscreen)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8" /> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> | |
<link rel="stylesheet" href="reset.css"> | |
<title>How to record a video with JavaScript</title> | |
</head> | |
<body> | |
<video autoplay muted playsinline id="videoLive"></video> | |
<script src="main.js"></script> | |
</body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
async function main() { | |
const buttonStart = document.querySelector("#buttonStart"); | |
const buttonStop = document.querySelector("#buttonStop"); | |
const videoLive = document.querySelector("#videoLive"); | |
const videoRecorded = document.querySelector("#videoRecorded"); | |
const stream = await navigator.mediaDevices.getUserMedia({ | |
video: { | |
width: { min: 1920, ideal: 1920, max: 1920 }, | |
height: { min: 1080, ideal: 1080, max: 1080 }, | |
minFrameRate: '60' | |
} | |
}); | |
videoLive.srcObject = stream; | |
if (!MediaRecorder.isTypeSupported("video/webm")) { | |
console.warn("video/webm is not supported"); | |
} | |
const mediaRecorder = new MediaRecorder(stream, { | |
mimeType: "video/webm", | |
}); | |
mediaRecorder.addEventListener("dataavailable", (event) => { | |
videoRecorded.src = URL.createObjectURL(event.data); | |
}); | |
} | |
main(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*** | |
The new CSS reset - version 1.11.2 (last updated 15.11.2023) | |
GitHub page: https://github.com/elad2412/the-new-css-reset | |
***/ | |
/* | |
Remove all the styles of the "User-Agent-Stylesheet", except for the 'display' property | |
- The "symbol *" part is to solve Firefox SVG sprite bug | |
- The "html" element is excluded, otherwise a bug in Chrome breaks the CSS hyphens property (https://github.com/elad2412/the-new-css-reset/issues/36) | |
*/ | |
*:where( | |
:not(html, iframe, canvas, img, svg, video, audio):not(svg *, symbol *) | |
) { | |
all: unset; | |
display: revert; | |
} | |
body, | |
html { | |
padding: 0; | |
margin: 0; | |
width: 100%; | |
height: 100%; | |
background-color: #000; | |
} | |
#videoLive { | |
position: fixed; | |
right: 0; | |
bottom: 0; | |
width: 100%; | |
height: 100%; | |
object-fit: cover; | |
} | |
/* Preferred box-sizing value */ | |
*, | |
*::before, | |
*::after { | |
box-sizing: border-box; | |
} | |
/* Fix mobile Safari increase font-size on landscape mode */ | |
html { | |
-moz-text-size-adjust: none; | |
-webkit-text-size-adjust: none; | |
text-size-adjust: none; | |
} | |
/* Reapply the pointer cursor for anchor tags */ | |
a, | |
button { | |
cursor: revert; | |
} | |
/* Remove list styles (bullets/numbers) */ | |
ol, | |
ul, | |
menu, | |
summary { | |
list-style: none; | |
} | |
/* For images to not be able to exceed their container */ | |
img { | |
max-inline-size: 100%; | |
max-block-size: 100%; | |
} | |
/* removes spacing between cells in tables */ | |
table { | |
border-collapse: collapse; | |
} | |
/* Safari - solving issue when using user-select:none on the <body> text input doesn't working */ | |
input, | |
textarea { | |
-webkit-user-select: auto; | |
} | |
/* revert the 'white-space' property for textarea elements on Safari */ | |
textarea { | |
white-space: revert; | |
} | |
/* minimum style to allow to style meter element */ | |
meter { | |
-webkit-appearance: revert; | |
appearance: revert; | |
} | |
/* preformatted text - use only for this feature */ | |
:where(pre) { | |
all: revert; | |
box-sizing: border-box; | |
} | |
/* reset default text opacity of input placeholder */ | |
::placeholder { | |
color: unset; | |
} | |
/* fix the feature of 'hidden' attribute. | |
display:revert; revert to element instead of attribute */ | |
:where([hidden]) { | |
display: none; | |
} | |
/* revert for bug in Chromium browsers | |
- fix for the content editable attribute will work properly. | |
- webkit-user-select: auto; added for Safari in case of using user-select:none on wrapper element*/ | |
:where([contenteditable]:not([contenteditable="false"])) { | |
-moz-user-modify: read-write; | |
-webkit-user-modify: read-write; | |
overflow-wrap: break-word; | |
-webkit-line-break: after-white-space; | |
-webkit-user-select: auto; | |
} | |
/* apply back the draggable feature - exist only in Chromium and Safari */ | |
:where([draggable="true"]) { | |
-webkit-user-drag: element; | |
} | |
/* Revert Modal native behavior */ | |
:where(dialog:modal) { | |
all: revert; | |
box-sizing: border-box; | |
} | |
/* Remove details summary webkit styles */ | |
::-webkit-details-marker { | |
display: none; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment