-
Notifications
You must be signed in to change notification settings - Fork 0
/
script.js
51 lines (39 loc) · 1.29 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
let btn = document.querySelector('.record-btn');
btn.addEventListener('click', async function () {
let displayStream = await navigator.mediaDevices.getDisplayMedia({
video: true,
});
// voiceStream for recording voice with screen recording
let voiceStream = await navigator.mediaDevices.getUserMedia({
audio: true,
});
let tracks = [...displayStream.getTracks(), ...voiceStream.getAudioTracks()];
let stream = new MediaStream(tracks);
//needed for better browser support
const mime = MediaRecorder.isTypeSupported('video/webm; codecs=vp9')
? 'video/webm; codecs=vp9'
: 'video/webm';
let mediaRecorder = new MediaRecorder(displayStream, {
mimeType: mime,
});
let chunks = [];
mediaRecorder.addEventListener('dataavailable', function (e) {
chunks.push(e.data);
});
mediaRecorder.addEventListener('stop', function () {
let blob = new Blob(chunks, {
type: chunks[0].type,
});
chunks = [];
let url = URL.createObjectURL(blob);
let video = document.querySelector('video');
video.src = url;
let a = document.createElement('a');
const filename = window.prompt('Enter file name');
a.href = url;
a.download = `${filename}.webm`;
a.click();
});
//we have to start the recorder manually
mediaRecorder.start();
});