I’d like the ‘start’ button not to be available/enabled until the ‘display’ button is first selected. Any help with that is appreciated. Here’s the html:
<button id="display" onclick="display()">Camera View</button>
<button id="start" onclick="startRecording()">Record Video</button>
<button id="stop" onclick="endRecording()">Stop Recording</button>
Here’s the js:
let blobs = [];
let stream, mediaRecorder, blob;
let video = document.getElementById("video");
var displaying = false;
var recording = false;
async function display() {
stream = await navigator.mediaDevices.getUserMedia({
audio: true,
video: true,
});
video.srcObject = stream;
displaying = true;
}
async function startRecording() {
if (displaying) {
// Stop all tracks of current stream
stream.getTracks().forEach((track) => {
track.stop();
});
// Create new stream in order to start the timestamp from 0:
stream = await navigator.mediaDevices.getUserMedia({
audio: true,
video: true,
});
// Switch on controls:
video.setAttribute('controls', true);
video.srcObject = stream;
mediaRecorder = new MediaRecorder(stream);
mediaRecorder.ondataavailable = (event) => {
if (event.data) {
blobs.push(event.data);
}
};
mediaRecorder.onstop = doPreview;
// Let's receive 1 second blobs
mediaRecorder.start(1000);
recording = true;
}
}
function endRecording() {
if (recording) {
// Let's stop capture and recording
mediaRecorder.stop();
stream.getTracks().forEach((track) => track.stop());
recording = false;
}
}