UNPKG

surveybuilder

Version:

Build surveys in the most advanced, flexable, and more moderated way, for all users to build and see.

134 lines (126 loc) 4.85 kB
<html> <head> <title>ScreenRecorder - SurveyBuilder</title> <link rel="shortcut icon" href="/SurveyBuilder/favicon.ico"/> <script src="https://kit.fontawesome.com/46bb4793e2.js"></script> <style> h1{ text-align:center; font-size:52px; } button{ font-size:32px; } body{ background-color:white; } </style> </head> <body> <header> <h1>ScreenRecorder</h1> </header> <main> <p><button id="btnStart"><i class="fas fa-video"></i>&nbsp;START RECORDING</button><br/> <button id="btnStop"><i class="fas fa-stop"></i>&nbsp;STOP RECORDING</button></p> <br/> <h1>Stream</h1> <br/> <video controls></video> <br/> <h1>Preview</h1> <br/> <video id="vid2" controls></video> <!-- could save to canvas and do image manipulation and saving too --> </main> <script> let constraintObj = { audio: false, video: { facingMode: "user", width: { min: 640, ideal: 1280, max: 1920 }, height: { min: 480, ideal: 720, max: 1080 } } }; // width: 1280, height: 720 -- preference only // facingMode: {exact: "user"} // facingMode: "environment" //handle older browsers that might implement getUserMedia in some way if (navigator.mediaDevices === undefined) { navigator.mediaDevices = {}; navigator.mediaDevices.getUserMedia = function(constraintObj) { let getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia; if (!getUserMedia) { return Promise.reject(new Error('getUserMedia is not implemented in this browser')); } return new Promise(function(resolve, reject) { getUserMedia.call(navigator, constraintObj, resolve, reject); }); } }else{ navigator.mediaDevices.enumerateDevices() .then(devices => { devices.forEach(device=>{ console.log(device.kind.toUpperCase(), device.label); //, device.deviceId }) }) .catch(err=>{ console.log(err.name, err.message); }) } navigator.mediaDevices.getUserMedia(constraintObj) .then(function(mediaStreamObj) { //connect the media stream to the first video element let video = document.querySelector('video'); if ("srcObject" in video) { video.srcObject = mediaStreamObj; } else { //old version video.src = window.URL.createObjectURL(mediaStreamObj); } video.onloadedmetadata = function(ev) { //show in the video element what is being captured by the webcam video.play(); }; //add listeners for saving video/audio let start = document.getElementById('btnStart'); let stop = document.getElementById('btnStop'); let vidSave = document.getElementById('vid2'); let mediaRecorder = new MediaRecorder(mediaStreamObj); let chunks = []; start.addEventListener('click', (ev)=>{ mediaRecorder.start(); console.log(mediaRecorder.state); }) stop.addEventListener('click', (ev)=>{ mediaRecorder.stop(); console.log(mediaRecorder.state); }); mediaRecorder.ondataavailable = function(ev) { chunks.push(ev.data); } mediaRecorder.onstop = (ev)=>{ let blob = new Blob(chunks, { 'type' : 'video/mp4;' }); chunks = []; let videoURL = window.URL.createObjectURL(blob); vidSave.src = videoURL; } }) .catch(function(err) { console.log(err.name, err.message); }); /********************************* getUserMedia returns a Promise resolve - returns a MediaStream Object reject returns one of the following errors AbortError - generic unknown cause NotAllowedError (SecurityError) - user rejected permissions NotFoundError - missing media track NotReadableError - user permissions given but hardware/OS error OverconstrainedError - constraint video settings preventing TypeError - audio: false, video: false *********************************/ </script> </body> </html>