Skip to content

Instantly share code, notes, and snippets.

@AlbinoDrought
Created September 24, 2019 19:14
Show Gist options
  • Save AlbinoDrought/eee514ed6e6f4de1397ba5619920a8cd to your computer and use it in GitHub Desktop.
Save AlbinoDrought/eee514ed6e6f4de1397ba5619920a8cd to your computer and use it in GitHub Desktop.
function wackRecording() {
if (!navigator.mediaDevices) {
console.error('getUserMedia not supported');
return Promise.reject();
}
const possibleCodecs = [
'video/webm',
'video/mp4',
];
const constraints = {
video: {
mediaSource: 'screen',
},
};
const codec = possibleCodecs.find(c => MediaRecorder.isTypeSupported(c));
if (!codec) {
console.error('no codec supported');
return Promise.reject();
}
console.log('using', codec);
return navigator.mediaDevices.getUserMedia(constraints)
.then((stream) => {
console.log('got stream');
const mediaRecorder = new MediaRecorder(stream, { mimeType: codec });
const recording = {
chunks: [],
};
recording.stop = () => {
recording.stop = () => {};
mediaRecorder.stop();
console.log('recorder stopped:', mediaRecorder.state);
};
mediaRecorder.ondataavailable = (e) => {
recording.chunks.push(e.data);
};
mediaRecorder.onstop = () => {
const blob = new Blob(recording.chunks, { type: codec });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
document.body.appendChild(link);
link.href = url;
link.download = 'recording.webm';
link.click();
URL.revokeObjectURL(link);
};
mediaRecorder.start();
console.log(mediaRecorder.state);
console.log('recorder started:', mediaRecorder.state);
return recording;
})
.catch((err) => {
console.log(`The following error occurred: ${err}`);
return Promise.reject();
});
}
(async () => {
window.recording = await wackRecording();
console.log('use window.recording.stop() to stop and save recording!');
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment