gpt4 book ai didi

炸裂,用JS创建一个录屏功能

转载 作者:qq735679552 更新时间:2022-09-27 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章炸裂,用JS创建一个录屏功能由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

炸裂,用JS创建一个录屏功能

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

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

  1. <!DOCTYPE html>  
  2. <html>  
  3.   <head>  
  4.     <title>Parcel Sandbox</title>  
  5.     <meta charset="UTF-8" />  
  6.   </head>  
  7.   <body>  
  8.     <video class="video" width="600px" controls></video>  
  9.     <button class="record-btn">record</button>  
  10.   
  11.     <script src="./index.js"></script>  
  12.   </body>  
  13. </html>  

然后在创建 index.js,监听按钮的点击:

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

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

炸裂,用JS创建一个录屏功能

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

  1. let btn = document.querySelector(".record-btn");
  2.  
  3. btn.addEventListener("click", async function () {
  4. let stream = await navigator.mediaDevices.getDisplayMedia({
  5. video: true
  6. });
  7. });

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

炸裂,用JS创建一个录屏功能

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

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

  1. let btn = document.querySelector(".record-btn")
  2.  
  3. btn.addEventListener("click", async function () {
  4. let stream = await navigator.mediaDevices.getDisplayMedia({
  5. video: true
  6. })
  7.  
  8. // 需要更好的浏览器支持
  9. const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
  10. ? "video/webm; codecs=vp9"
  11. : "video/webm"
  12. let mediaRecorder = new MediaRecorder(stream, {
  13. mimeType: mime
  14. })
  15. // 必须手动启动
  16. mediaRecorder.start()
  17. })

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

  1. let btn = document.querySelector(".record-btn")
  2.  
  3. btn.addEventListener("click", async function () {
  4. let stream = await navigator.mediaDevices.getDisplayMedia({
  5. video: true
  6. })
  7.  
  8. // 需要更好的浏览器支持
  9. const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
  10. ? "video/webm; codecs=vp9"
  11. : "video/webm"
  12. let mediaRecorder = new MediaRecorder(stream, {
  13. mimeType: mime
  14. })
  15.  
  16. let chunks = []
  17. mediaRecorder.addEventListener('dataavailable', function(e) {
  18. chunks.push(e.data)
  19. })
  20.  
  21. // 必须手动启动
  22. mediaRecorder.start()
  23. })

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

  1. let btn = document.querySelector(".record-btn")
  2.  
  3. btn.addEventListener("click", async function () {
  4. let stream = await navigator.mediaDevices.getDisplayMedia({
  5. video: true
  6. })
  7.  
  8. // 需要更好的浏览器支持
  9. const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
  10. ? "video/webm; codecs=vp9"
  11. : "video/webm"
  12. let mediaRecorder = new MediaRecorder(stream, {
  13. mimeType: mime
  14. })
  15.  
  16. let chunks = []
  17. mediaRecorder.addEventListener('dataavailable', function(e) {
  18. chunks.push(e.data)
  19. })
  20.  
  21. mediaRecorder.addEventListener('stop', function(){
  22. let blob = new Blob(chunks, {
  23. type: chunks[0].type
  24. })
  25.  
  26. let video = document.querySelector(".video")
  27. video.src = URL.createObjectURL(blob)
  28. })
  29.  
  30.  
  31. // 必须手动启动
  32. mediaRecorder.start()
  33. })

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

  1. let btn = document.querySelector(".record-btn")
  2.  
  3. btn.addEventListener("click", async function () {
  4. let stream = await navigator.mediaDevices.getDisplayMedia({
  5. video: true
  6. })
  7.  
  8. // 需要更好的浏览器支持
  9. const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
  10. ? "video/webm; codecs=vp9"
  11. : "video/webm"
  12. let mediaRecorder = new MediaRecorder(stream, {
  13. mimeType: mime
  14. })
  15.  
  16. let chunks = []
  17. mediaRecorder.addEventListener('dataavailable', function(e) {
  18. chunks.push(e.data)
  19. })
  20.  
  21. mediaRecorder.addEventListener('stop', function(){
  22. let blob = new Blob(chunks, {
  23. type: chunks[0].type
  24. })
  25. let url = URL.createObjectURL(blob)
  26.  
  27. let video = document.querySelector("video")
  28. video.src = url
  29.  
  30. let a = document.createElement('a')
  31. a.href = url
  32. a.download = 'video.webm'
  33. a.click()
  34. })
  35.  
  36.  
  37. // 必须手动启动
  38. mediaRecorder.start()
  39. })

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

作者:Lokender Singh 译者:前端小智 。

来源:dev 原文:https://dev.to/0shuvo0/lets-create-a-screen-recorder-with-js-3leb 。

炸裂,用JS创建一个录屏功能

原文链接:https://mp.weixin.qq.com/s/k2OcbUfqw3jz0s1w66cx0w 。

最后此篇关于炸裂,用JS创建一个录屏功能的文章就讲到这里了,如果你想了解更多关于炸裂,用JS创建一个录屏功能的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com