激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - 炸裂,用JS創建一個錄屏功能

炸裂,用JS創建一個錄屏功能

2021-11-10 23:07大遷世界前端小智 JavaScript

OBS studio很酷,但 JavaScript 更酷,現在,我們用 JavaScript 創建自己的錄屏功能。首先,創建一個HTML文件,包含記錄按鈕和一個播放標簽。

炸裂,用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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: a视频在线看 | 成人免费电影av | 亚洲第一色片 | 久久久久久久.comav | 婷婷久久综合九色综合色多多蜜臀 | 精国品产一区二区三区有限公司 | 92看片淫黄大片欧美看国产片 | 久久久久久久一区 | 一级一片免费看 | 欧美毛片免费观看 | 伊人av影院| 中文字幕专区高清在线观看 | xxxxhd18hd日本hd| 成人午夜淫片a | 国产精品久久久久久久久久久久久久久久 | chinese18 xxxx videos| 免费a视频| 精品一区二区久久久久久按摩 | 91超视频| 国产亚洲高清在线精品不卡 | 亚洲综合无码一区二区 | 亚洲福利视频52 | 一本色道久久综合狠狠躁篇适合什么人看 | 在线观看第一区 | 中午字幕无线码一区2020 | 亚洲片在线观看 | 亚洲国产网站 | 久久99精品久久久久久小说 | 中国hdxxxx护士爽在线观看 | 亚洲日本韩国在线观看 | 欧美视频99 | 青青草免费观看 | 精品久久久久久久久久中文字幕 | 2019亚洲日韩新视频 | 亚洲成人中文字幕在线 | 久久久www成人免费精品 | 日本娇小videos高潮 | 99精彩视频在线观看 | 史上最强炼体老祖动漫在线观看 | 久久久久久片 | 黄色毛片观看 |