• 20行JS代码实现屏幕录制


    在开发中可能有遇到过屏幕录制的需求,无论是教学、演示还是游戏录制,都需要通过屏幕录制来记录和分享内容。一般在App内H5页基于客户端能力实现的较多,现在浏览器中的 MediaRecorder 也提供了这种能力。MediaRecorder 是一种强大的技术,可以在浏览器端实现屏幕录制功能。本文将介绍如何使用JS MediaRecorder 实现屏幕录制。

    代码实现

    要实现屏幕录制,我们需要通过 navigator.mediaDevices.getDisplayMedia() 方法获取屏幕媒体流,这个方法会弹出一个选择窗口,让用户选择要录制的屏幕或窗口。但出于安全原因,发起录制时必须确保用户手势触发捕获,例如点击按钮:

    const button = document.createElement("button");
    button.innerHTML = "capture";
    document.body.append(button);
    button.addEventListener("click", async () => {
      // TODO
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    点击后,获取视频流并录制,获取到媒体流后,我们可以将其传给 MediaRecorder 对象后开始屏幕录制。

    const stream = await navigator.mediaDevices.getDisplayMedia();
    const recoder = new MediaRecorder(stream);
    recoder.start();
    
    • 1
    • 2
    • 3

    当用户停止共享屏幕时停止录制,调用 recoder.stop()即可停止录制。

    const [video] = stream.getVideoTracks();
    video.addEventListener("ended", () => {
      recoder.stop();
    });
    
    • 1
    • 2
    • 3
    • 4

    监听recoderdataavailable事件获取录制文件并通过URL.createObjectURL()方法将其转换为可下载的URL,供用户下载录制的视频文件。

    recoder.addEventListener("dataavailable", (evt) => {
      const a = document.createElement("a");
      a.href = URL.createObjectURL(evt.data);
      a.download = "capture.webm";
      a.click();
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    这样一个简单的屏幕记录器就完成了,不到20行代码就实现了整个屏幕录制的核心功能。完整代码如下:

    button.addEventListener("click", async () => {
      const stream = await navigator.mediaDevices.getDisplayMedia();
      const recoder = new MediaRecorder(stream);
      recoder.start();
    
      const [video] = stream.getVideoTracks();
      video.addEventListener("ended", () => {
        recoder.stop();
      });
    
      recoder.addEventListener("dataavailable", (evt) => {
        const a = document.createElement("a");
        a.href = URL.createObjectURL(evt.data);
        a.download = "capture.webm";
        a.click();
      });
    });
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    浏览器兼容

    目前的浏览器支持情况,对于较低的版本需要升级才能使用。

    实现这么强大的功能只需要这么少的代码确实是很不错的感觉,但是这只是一个简单的录制功能,实际开发中要考虑的因素相对会比较多,由于屏幕录制可能消耗较多的资源,因此在长时间录制时,我们应该提示用户录制时间或大小的限制,并提供相应的操作和反馈。

    使用 MediaRecorder 我们可以方便地实现屏幕录制功能。这种功能在教学、演示等场景下非常有用,同时也为开发者提供了更多创造性的可能性。有兴趣的可以体验使用看看效果,在实际使用中也要合理使用此功能,确保用户隐私和数据安全。

    参考

    https://dev.to/ninofiliu/simple-screen-recorder-in-20-lines-of-javascript-4ina


    看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

    专注前端开发,分享前端相关技术干货,公众号:南城大前端(ID: nanchengfe)

  • 相关阅读:
    2022年推荐算法效率开发必备工具榜单
    基于51单片机的带矩阵键盘指纹密码电子锁原理图PCB
    【BLE】蓝牙抓包器 Ellisys 使用说明
    把Android手机变成电脑摄像头
    Python机器学习013:常用机器学习平台汇总
    Python爬虫技术与反爬虫策略
    Redis缓存那点破事 | 绝杀面试官 25 问!
    【编程题】【Scratch四级】2020.06 阶乘求和
    企业微信自建应用手动授权,获取用户详细信息
    Go分布式缓存 使用 Protobuf 通信(day7)
  • 原文地址:https://blog.csdn.net/qq_37247349/article/details/134322220