我的编程空间,编程开发者的网络收藏夹
学习永远不晚

用JS创建一个录屏功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

用JS创建一个录屏功能

OBS studio很酷,但 JavaScript 更酷,现在,我们用 JavaScript 创建自己的录屏功能。

首先,创建一个HTML文件,包含记录按钮和一个播放标签,

内容如下:


<!DOCTYPE html> 
<html> 
  <head> 
    <title>Parcel Sandbox</title> 
    <meta charset="UTF-8" /> 
  </head> 
  <body> 
    <video class="video" width="600px" controls></video> 
    <button class="record-btn">record</button> 
 
    <script class="lazy" data-src="./index.js"></script> 
  </body> 
</html> 

然后在创建 index.js

监听按钮的点击:


let btn = document.querySelector(".record-btn"); 
 
btn.addEventListener("click", function () { 
  console.log("hello"); 
}); 

在浏览器中打开 html文件,点击按钮,我们可以在控制台看到打印的 hello

现在把打印去掉,换成如下的内容:


let btn = document.querySelector(".record-btn"); 
 
btn.addEventListener("click", async function () { 
  let stream = await navigator.mediaDevices.getDisplayMedia({ 
    video: true 
  }); 
}); 

现在点击按钮,会弹出屏幕选择框:

因为,我现在用的是两个屏幕,所以会出现两个选择。

现在你可能认为选择一个屏幕,然后点击分享,就开始录制了。非也,这个比我们想象中的复杂点。我们要使用 MediaRecorder 来录制我们的视频。


let btn = document.querySelector(".record-btn") 
 
btn.addEventListener("click", async function () { 
  let stream = await navigator.mediaDevices.getDisplayMedia({ 
    video: true 
  }) 
 
  // 需要更好的浏览器支持 
  const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")  
             ? "video/webm; codecs=vp9"  
             : "video/webm" 
    let mediaRecorder = new MediaRecorder(stream, { 
        mimeType: mime 
    }) 
    // 必须手动启动 
    mediaRecorder.start() 
}) 

当我们的屏幕被录制下来时,mediaRecorder 会给我们提供分块的数据,我们需要将这些数据存储在一个变量中。


let btn = document.querySelector(".record-btn") 
 
btn.addEventListener("click", async function () { 
  let stream = await navigator.mediaDevices.getDisplayMedia({ 
    video: true 
  }) 
 
  // 需要更好的浏览器支持 
  const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")  
             ? "video/webm; codecs=vp9"  
             : "video/webm" 
    let mediaRecorder = new MediaRecorder(stream, { 
        mimeType: mime 
    }) 
 
    let chunks = [] 
    mediaRecorder.addEventListener('dataavailable', function(e) { 
        chunks.push(e.data) 
    }) 
 
    // 必须手动启动 
    mediaRecorder.start() 
}) 

现在,当我们点击停止共享按钮时,希望在我们的 video元素中播放录制的视频,可以这么做:


let btn = document.querySelector(".record-btn") 
 
btn.addEventListener("click", async function () { 
  let stream = await navigator.mediaDevices.getDisplayMedia({ 
    video: true 
  }) 
 
  // 需要更好的浏览器支持 
  const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")  
             ? "video/webm; codecs=vp9"  
             : "video/webm" 
    let mediaRecorder = new MediaRecorder(stream, { 
        mimeType: mime 
    }) 
 
    let chunks = [] 
    mediaRecorder.addEventListener('dataavailable', function(e) { 
        chunks.push(e.data) 
    }) 
 
     mediaRecorder.addEventListener('stop', function(){ 
          let blob = new Blob(chunks, { 
              type: chunks[0].type 
          }) 
 
          let video = document.querySelector(".video") 
          video.class="lazy" data-src = URL.createObjectURL(blob) 
      }) 
 
 
    // 必须手动启动 
    mediaRecorder.start() 
}) 

现在基本就可以完成了,可以在润色下,如自动下载录制的视频,

可以这么做:


let btn = document.querySelector(".record-btn") 
 
btn.addEventListener("click", async function () { 
  let stream = await navigator.mediaDevices.getDisplayMedia({ 
    video: true 
  }) 
 
  // 需要更好的浏览器支持 
  const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")  
             ? "video/webm; codecs=vp9"  
             : "video/webm" 
    let mediaRecorder = new MediaRecorder(stream, { 
        mimeType: mime 
    }) 
 
    let chunks = [] 
    mediaRecorder.addEventListener('dataavailable', function(e) { 
        chunks.push(e.data) 
    }) 
 
   mediaRecorder.addEventListener('stop', function(){ 
      let blob = new Blob(chunks, { 
          type: chunks[0].type 
      }) 
      let url = URL.createObjectURL(blob) 
 
      let video = document.querySelector("video") 
      video.class="lazy" data-src = url 
 
      let a = document.createElement('a') 
      a.href = url 
      a.download = 'video.webm' 
      a.click() 
  }) 
 
 
    // 必须手动启动 
    mediaRecorder.start() 
}) 

现在,最基本的一个录制功能就完善了,动手来试试吧!!

到此这篇关于用JS创建一个录屏功能的文章就介绍到这了,更多相关JS创建一个录屏功能内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

用JS创建一个录屏功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

vue怎么创建一个判断用户登录的弹窗功能

在现代Web应用程序中,用户认证和授权是非常重要的。为此,许多应用程序需要判断用户是否登录并在未登录的情况下强制其登录。在Vue.js中,我们可以使用它的生命周期方法和路由导航守卫轻松实现这一点。本文将介绍如何使用Vue.js创建一个判断用户登录的弹窗。首先,我们需要定义一个通用的弹窗组件,该组件会显示一条消息并允许用户关闭弹窗。我们可以使用Vue.js的组件功能创建这个组件。
2023-05-14

JS怎么实现一个微信录音功能

今天小编给大家分享一下JS怎么实现一个微信录音功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。拆解需求根据原型图可以很容易
2023-07-05

linux怎么创建用户只能访问一个目录

要创建一个只能访问特定目录的用户,可以使用以下步骤:1. 打开终端窗口并以root用户身份登录。2. 创建一个新用户,例如"restricted":```sudo adduser restricted```按照提示设置密码和其他相关信息。3
2023-09-25

怎么在Android应用中实现一个截图与录屏功能

这篇文章给大家介绍怎么在Android应用中实现一个截图与录屏功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。截屏:步骤如下:1:获取MediaProjectionManager2:通过MediaProjection
2023-05-31

利用SpringBoot创建一个JSP登录页面

这篇文章给大家介绍利用SpringBoot创建一个JSP登录页面,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。添加JSP配置1.pom.xml添加jsp解析引擎 org.ap
2023-05-31

JS实现一个微信录音功能过程示例详解

这篇文章主要介绍了JS实现一个微信录音功能过程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-02-21

使用servlet实现一个用户登录功能

这篇文章给大家介绍使用servlet实现一个用户登录功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。用servlet来简单实现一个用户登录的小程序。 首先,servlet也是一个JAVA类,新建一个JAVA类,它直接
2023-05-31

VB.NET中怎么创建一个虚拟目录应用

VB.NET中怎么创建一个虚拟目录应用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。VB.NET创建虚拟目录代码示例:Function CriaDiretorioVirtu
2023-06-17

js如何使用当前时间创建一个随机数

小编给大家分享一下js如何使用当前时间创建一个随机数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用当前时间创建一个随机数 // --- before -
2023-06-27

使用Java怎么实现一个网页截屏功能

使用Java怎么实现一个网页截屏功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体如下:package awtDemo;import java.awt.AW
2023-05-30

使用struts1如何实现一个登录功能

这期内容当中小编将会给大家带来有关使用struts1如何实现一个登录功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。环境:MyEclipse 14 1 struts1 框架搭建在MyEcli
2023-05-31

怎么在Android 应用中实现一个全屏与非全屏功能

怎么在Android 应用中实现一个全屏与非全屏功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Android 应用的全屏和非全屏实现代码 全屏显示操作: /** *
2023-05-31

利用struts1怎么实现一个登录功能

利用struts1怎么实现一个登录功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、实例开始工作—导入jar包,在官网上下载struts1框架包,解压之后导
2023-05-31

php如何实现一个用户登录功能

这篇“php如何实现一个用户登录功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php如何实现一个用户登录功能”文章吧。假
2023-07-05

使用ajax怎么实现一个登录功能

本篇文章给大家分享的是有关使用ajax怎么实现一个登录功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。ajax的优点:1、最大的一点是页面无刷新,用户的体验非常好。2、使用异
2023-06-08

在Java中使用swing实现一个录音功能

在Java中使用swing实现一个录音功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。添加监听事件:/* * @(#)MidiSynth.java 1.15 99/12/03
2023-05-31

创建只能访问 CloudSQL 中一个架构的用户

TL;DR: 在 Google Cloud Console 中创建用户后,不要忘记 REVOKE 'cloudsqlsuperuser'@'%' FROM 'your-user'@'%';如果您只想让该用户访问特定模式。通过 Google
创建只能访问 CloudSQL 中一个架构的用户
2024-07-10

利用node.js+mongodb如何搭建一个简单登录注册的功能详解

前言 最近突然对数据库和后台感兴趣了,就开始了漫长的学习之路,想想自己只是一个前端,只会java斯科瑞普,所以就开始看nodejs,看着看着突然发现mongodb和nodejs更配哦!,遂就开了我的mongodb之路。下面话不多说了,来一起
2022-06-04

使用Android爬虫怎么模拟一个登录功能

这篇文章将为大家详细讲解有关使用Android爬虫怎么模拟一个登录功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。实例代码:package com.yasin;import java.io
2023-05-30

编程热搜

目录