Screen recorde

html JavaScript
<video id="video" height="400" autoplay></video>
<button id="toggle">toggle capture</button>
<button id="togglerec">toggle recorde</button>
<script>
  (async () => {
    let capture = false;
    const videoElem = document.querySelector("#video");

    async function toggleCapture(event) {
      if (capture) {
        videoElem.srcObject.getTracks().forEach((track) => track.stop());
        videoElem.srcObject = null;
        capture = false;
      } else {
        try {
          let captureStream = await navigator.mediaDevices.getDisplayMedia({
            video: {
              cursor: "never",
            },
            audio: true,
          });

          videoElem.srcObject = captureStream;

          // Recorde
          let rec = new MediaRecorder(captureStream);
          let fileWritableStream;
          let handleFile;

          async function saveChunk(event) {
            let blob = new Blob([event.data], {
              type: 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',
            });
            await fileWritableStream.write(blob);
          }

          rec.addEventListener("start", async function (event) {
            rec.addEventListener("dataavailable", saveChunk);
            fileWritableStream = await handleFile.createWritable();
          });

          rec.addEventListener("stop", async function (event) {
            rec.removeEventListener("dataavailable", saveChunk);
            await fileWritableStream.close();
          });

          async function toggleRec(event) {
            if (rec.state == "recording") rec.stop();
            else {
              handleFile = await window.showSaveFilePicker();
              rec.start(1000 /* One seconde */);
            }
          }

          document
            .querySelector("#togglerec")
            .addEventListener("click", toggleRec, false);

          // Dump debug
          for (const track of videoElem.srcObject.getVideoTracks()) {
            console.info("Track");
            console.info(track);
            console.info("Track settings:");
            console.info(JSON.stringify(track.getSettings(), null, 2));
            console.info("Track constraints:");
            console.info(JSON.stringify(track.getConstraints(), null, 2));
          }
        } catch (err) {
          console.error("Error: " + err);
        }
        capture = true;
      }
    }

    document
      .querySelector("#toggle")
      .addEventListener("click", toggleCapture, false);
  })();
</script>