-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
102 lines (90 loc) · 2.92 KB
/
index.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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
const buttons = document.querySelectorAll(".button");
const startAudioButton = document.querySelector("#startAudio");
const startScreenButton = document.querySelector("#startScreen");
const stopButton = document.querySelector("#stopAudio");
const audioList = document.querySelector("#audio-list");
const videoList = document.querySelector("#video-list");
let mediaRecorder = null;
let chunks = [];
if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
alert("Your browser does not support recording!");
}
startAudioButton.addEventListener("click", recordAudio);
stopButton.addEventListener("click", stopRecording);
startScreenButton.addEventListener("click", recordSCreen);
function recordAudio() {
console.log("record audio started");
navigator.mediaDevices
.getUserMedia({
audio: true,
})
.then((stream) => {
stopButton.disabled = false;
startAudioButton.disabled = true;
startScreenButton.disabled = true;
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = (e) => {
console.log("record audio", e.data);
chunks.push(e.data);
};
mediaRecorder.onstop = (e) => {
console.log("record screen stopped");
createMediaElement("audio", "audio/mp3", audioList);
};
mediaRecorder.onerror = (e) => {
console.log(e.error);
};
mediaRecorder.start(1000);
})
.catch((err) => {
alert(`The following error occurred: ${err}`);
});
}
function recordSCreen() {
navigator.mediaDevices
.getDisplayMedia({
mediaSource: "screen",
})
.then((stream) => {
stopButton.disabled = false;
startAudioButton.disabled = true;
startScreenButton.disabled = true;
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = (e) => {
console.log("record screen", e.data);
chunks.push(e.data);
};
mediaRecorder.onstop = (e) => {
console.log("record screen stopped");
createMediaElement("video", chunks[0].type, videoList);
};
mediaRecorder.start();
})
.catch((err) => {
alert(`The following error occurred: ${err}`);
});
}
// stops audio or video
function stopRecording() {
stopButton.disabled = true;
startAudioButton.disabled = false;
startScreenButton.disabled = false;
mediaRecorder.stop();
}
// creates the html element with the file
function createMediaElement(mediaType, fileType, placeToAdd) {
const blob = new Blob(chunks, {
type: fileType,
});
const mediaURL = window.URL.createObjectURL(blob);
console.log("mediaUrl", mediaURL);
const element = document.createElement(mediaType);
element.setAttribute("controls", "");
element.src = mediaURL;
placeToAdd.insertBefore(element, placeToAdd.firstElementChild);
mediaRecorder = null;
chunks = [];
stopButton.disabled = true;
startAudioButton.disabled = false;
startScreenButton.disabled = false;
}