前言:先了解下:navigator.mediaDevicesmediaDevices 是 Navigator 只读属性返回一个 MediaDevices 对象,该对象可提供对相机麦克风等媒体输入设备连接访问,也包括屏幕共享
const media = navigator.mediaDevices;

通过原型可以查找到一些方法,如下图所示:通过打印如下:

其中 getDisplayMedia 方法获取用户屏幕分享屏幕捕获流,通常用于制作屏幕录像或视频会议等应用

navigator.mediaDevices.getDisplayMedia({
  video: true,
});

在这段代码中,请求获取包含视频流的媒体许可,并将其存储在名为 stream变量中,以便后续使用。这个流可以用于在网页显示屏幕共享或进行其他媒体处理操作

又因为该方法异步的,我们编写如下代码

<body>
  &lt;button&gt;共享屏幕</button&gt;
  <script&gt;
    const button = document.querySelector("button");
    button.addEventListener("click", async () => {
      const stream = await navigator.mediaDevices.getDisplayMedia({
        video: true,
      });
    });
  </script>
</body>

通过点击 button 按钮后会如下图所示效果

这个时候 stream我们是拿到了。 

                                        MediaRecorder

MediaRecorder一个 Web API,用于在浏览器中进行媒体录制,主要用于录制音频和视频。它允许你从不同的来源,例如麦克风摄像头、屏幕共享或其他媒体元素,捕获音频和视频数据,并将其保存文件或进行实时流媒体传输。通过调用 MediaRecorder.isTypeSupported() 方法判断其 MIME 格式能否被客户端录制。它支持类型主要有以下几种方式

const types = [
  "video/webm",
  "audio/webm",
  "video/webm;codecs=vp8",
  "video/webm;codecs=daala",
  "video/webm;codecs=h264",
  "audio/webm;codecs=opus",
  "video/mpeg",
];

通过这种方式查看当前浏览器是否支持类型,如下代码所示:

const mime = MediaRecorder.isTypeSupported("video/webm;codecs=h264")
  ? "video/webm;codecs=h264"
  : "video/webm";

结果下图所示:

const mediaRecorder = new MediaRecorder(stream, { mimeType: mime });

在这段代码里面,执行 new 关键字实例MediaRecorder 对象。该对象结构下图所示

我们可以通过监听它的事件来进行不同的操作,如下代码所示

const chunks = [];
mediaRecorder.addEventListener("dataavailable", function (e) {
  chunks.push(e.data);
});



mediaRecorder.addEventListener("stop", () => {
  const blob = new Blob(chunks, { type: chunks[0].type });
  const url = URL.createObjectURL(blob);
  const a = document.createElement("a");
  a.href = url;
  a.download = "video.webm";
  a.click();
});

接下来我们来看看段代码的详细步骤:

这样就实现一个屏幕录制功能了,并且通过该方法实现一个音视频下载的功能

完整代码

功能的完整代码如下所示

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <button>共享屏幕</button>
    <script>
      const button = document.querySelector("button");
      button.addEventListener("click", async () => {
        const stream = await navigator.mediaDevices.getDisplayMedia({
          video: true,
        });

        const mime = MediaRecorder.isTypeSupported("video/webm;codecs=h264")
          ? "video/webm;codecs=h264"
          : "video/webm";

        const mediaRecorder = new MediaRecorder(stream, { mimeType: mime });

        const chunks = [];
        mediaRecorder.addEventListener("dataavailable", function (e) {
          chunks.push(e.data);
        });

        mediaRecorder.addEventListener("stop", () => {
          const blob = new Blob(chunks, { type: chunks[0].type });
          const url = URL.createObjectURL(blob);
          const a = document.createElement("a");
          a.href = url;
          a.download = "video.webm";
          a.click();
        });
        mediaRecorder.start();
      });
    </script>
  </body>
</html>

完整效果下图所示:

你也可以直接在其他任何一个页面,将 js 代码修改一下,然后直接复制粘贴控制台上,并点击页面,如下所示

diff

-const button = document.querySelector("button");
-button.addEventListener("click", async () => {
    ...
})

+const body = document.body;
+body.addEventListener("click", async () => {
    ....
})

 紧接着将代码复制粘贴浏览器控制台上面,并点击页面的空白处:

	const body = document.body;
	body.addEventListener("click", async () => {
        const stream = await navigator.mediaDevices.getDisplayMedia({
          video: true,
        });
        const mime = MediaRecorder.isTypeSupported("video/webm;codecs=h264")
          ? "video/webm;codecs=h264"
          : "video/webm";

        const mediaRecorder = new MediaRecorder(stream, { mimeType: mime });

        const chunks = [];
        mediaRecorder.addEventListener("dataavailable", function (e) {
          chunks.push(e.data);
        });

        mediaRecorder.addEventListener("stop", () => {
          const blob = new Blob(chunks, { type: chunks[0].type });
          const url = URL.createObjectURL(blob);
          const a = document.createElement("a");
          a.href = url;
          a.download = "video.mp4";
          a.click();
        });
        mediaRecorder.start();
      });

通过这种方式就实现了一种屏幕录制或者屏幕分享功能了。 

原文地址:https://blog.csdn.net/qq_41646249/article/details/134684834

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如若转载,请注明出处:http://www.7code.cn/show_10729.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注