close
喜歡就關注我們吧

OBS錄屏軟件很酷,但我們也可以使用JavaScript創建我們自己的錄屏程序。

猜猜會怎麼樣?結果並不僅限於記錄瀏覽器屏幕哦。

是的,你沒有看錯。儘管JavaScript在瀏覽器上運行,但我們不但可以使用JS來記錄活動標籤頁,而且還可以記錄任意標籤頁或整個屏幕。

現在讓我們開始吧。

首先我們需要一個HTML文件,因為得有錄製按鈕和視頻元素,我們將在這個視頻元素里播放錄製的視頻。

<!DOCTYPEhtml><html><head><title>ParcelSandbox</title><metacharset="UTF-8"/></head><body><videoclass="video"width="600px"controls></video><buttonclass="record-btn">record</button><scriptsrc="./index.js"></script></body></html>

我們還需要一個JS文件,所以讓我們創建index.js

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

現在如果我們在瀏覽器中打開它並單擊按鈕,我們應該可以在控制台中看到hello。

好的,現在替換console.log,顯示視頻信息流。

letbtn=document.querySelector(".record-btn");btn.addEventListener("click",asyncfunction(){letstream=awaitnavigator.mediaDevices.getDisplayMedia({video:true});});

現在,如果你點擊按鈕,你會看到這個彈出窗口。

你可能認為我們已經選定了窗口或屏幕並單擊了共享,然後應該可以開始錄製了?還不行,還要更複雜一些。我們必須自己錄製視頻。這裡我們使用MediaRecorder來錄製。

letbtn=document.querySelector(".record-btn")btn.addEventListener("click",asyncfunction(){letstream=awaitnavigator.mediaDevices.getDisplayMedia({video:true})//判斷瀏覽器是否支持constmime=MediaRecorder.isTypeSupported("video/webm;codecs=vp9")?"video/webm;codecs=vp9":"video/webm"letmediaRecorder=newMediaRecorder(stream,{mimeType:mime})//開始手動錄製mediaRecorder.start()})

當錄製屏幕時,mediaRecorder將以塊的形式為我們提供數據,我們需要將這些數據存儲在一個變量中。

letbtn=document.querySelector(".record-btn")btn.addEventListener("click",asyncfunction(){letstream=awaitnavigator.mediaDevices.getDisplayMedia({video:true})//判斷瀏覽器是否支持constmime=MediaRecorder.isTypeSupported("video/webm;codecs=vp9")?"video/webm;codecs=vp9":"video/webm"letmediaRecorder=newMediaRecorder(stream,{mimeType:mime})letchunks=[]mediaRecorder.addEventListener('dataavailable',function(e){chunks.push(e.data)})//開始手動錄製mediaRecorder.start()})

現在,當點擊停止共享按鈕時,我們希望錄製的視頻在視頻元素中播放,所以我們這樣做:

letbtn=document.querySelector(".record-btn")btn.addEventListener("click",asyncfunction(){letstream=awaitnavigator.mediaDevices.getDisplayMedia({video:true})//判斷瀏覽器是否支持constmime=MediaRecorder.isTypeSupported("video/webm;codecs=vp9")?"video/webm;codecs=vp9":"video/webm"letmediaRecorder=newMediaRecorder(stream,{mimeType:mime})letchunks=[]mediaRecorder.addEventListener('dataavailable',function(e){chunks.push(e.data)})mediaRecorder.addEventListener('stop',function(){letblob=newBlob(chunks,{type:chunks[0].type})letvideo=document.querySelector(".video")video.src=URL.createObjectURL(blob)})//開始手動錄製mediaRecorder.start()})

最後,自動下載錄製的視頻。

letbtn=document.querySelector(".record-btn")btn.addEventListener("click",asyncfunction(){letstream=awaitnavigator.mediaDevices.getDisplayMedia({video:true})//判斷瀏覽器是否支持constmime=MediaRecorder.isTypeSupported("video/webm;codecs=vp9")?"video/webm;codecs=vp9":"video/webm"letmediaRecorder=newMediaRecorder(stream,{mimeType:mime})letchunks=[]mediaRecorder.addEventListener('dataavailable',function(e){chunks.push(e.data)})mediaRecorder.addEventListener('stop',function(){letblob=newBlob(chunks,{type:chunks[0].type})leturl=URL.createObjectURL(blob)letvideo=document.querySelector("video")video.src=urlleta=document.createElement('a')a.href=urla.download='video.webm'a.click()})//開始手動錄製mediaRecorder.start()})

現在我們有了一個功能齊全的錄屏應用程序。撒花!

感謝大家的閱讀。我們下次再見。


每日分享前端插件乾貨,歡迎關注!


點讚和在看就是最大的支持❤️

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()