Skip to content

Instantly share code, notes, and snippets.

@men232
Last active May 14, 2024 18:36
Show Gist options
  • Save men232/f3931f3113908ccccc5488a7f30df3e1 to your computer and use it in GitHub Desktop.
Save men232/f3931f3113908ccccc5488a7f30df3e1 to your computer and use it in GitHub Desktop.
Capture webcam (fullscreen)
<!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>
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();
/***
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