0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

用JS實現簡單的屏幕錄像機

京東云 ? 來源:京東保險 張潔 ? 作者:京東保險 張潔 ? 2024-10-09 15:27 ? 次閱讀

作者:京東保險 張潔

本文將介紹如何用JS實現簡單的屏幕錄像機。

一、錄制準備

創(chuàng)建一個按鈕

Start recording

書寫JavaScript

var RECORDING_ONGOING = false;
var recordingToggle = document.getElementById("recording-toggle"); // 按鈕

recordingToggle.addEventListener("click", function(){
     RECORDING_ONGOING = !RECORDING_ONGOING; // 開始 / 停止 錄制
     if(RECORDING_ONGOING){
         recordingToggle.innerHTML = "Stop Recording";
         startRecording(); // 開始錄制
     } else {
         recordingToggle.innerHTML = "Start Recording";
         stopRecording(); // 停止錄制
 }
});

看起來內容很多,但實際上,只是向按鈕添加一個事件偵聽器來開始和停止記錄并相應地更改文本。

二、開始錄制

在寫功能函數之前,聲明 3 個全局變量(在函數之外)。

var blob, mediaRecorder = null;
var chunks = [];

現在,開始屏幕錄制

async function startRecording(){
     var stream = await navigator.mediaDevices.getDisplayMedia(
         {video: {mediaSource: "screen"}, audio: true}
     );

     deviceRecorder = new deviceRecorder(stream, {mimeType: "video/webm"});
}

在用戶屏幕之外創(chuàng)建媒體流。媒體記錄器有一個mimeType. 這是你想要的輸出文件類型。

可以mimeTypes 在此處閱讀更多相關信息。

Edge 支持video/webmmime 類型。這是文件擴展名.webm??梢酝ㄟ^以下方式檢查瀏覽器是否支持mimeType:

console.log(MediaRecorder.isTypeSupported("video/webm"))
console.log(MediaRecorder.isTypeSupported("video/mp4"))
console.log(MediaRecorder.isTypeSupported("video/mp4;codecs=avc1"))

向該函數添加幾行startRecording

 deviceRecorder.ondataavailable = (e) => {
     if(e.data.size > 0){
         chunks.push(e.data);
     }
 }
 deviceRecorder.onstop = () => {
     chunks = [];
 }
 deviceRecorder.start(250)

每當有數據時,都會將其添加到塊數組(之前定義)中。當停止錄制時,將調用該stopRecording() 函數。

三、停止錄制

function stopRecording(){
     var filename = window.prompt("File name", "video"); // Ask the file name

     deviceRecorder.stop(); // 停止錄制
     blob = new Blob(chunks, {type: "video/webm"})
     chunks = [] // 重置數據塊
     var dataDownloadUrl = URL.createObjectURL(blob);

     // 將其下載到用戶的設備上
     let a = document.createElement('a')
     a.href = dataDownloadUrl;
     a.download = `${filename}.webm`
     a.click()
 
     URL.revokeObjectURL(dataDownloadUrl)
}

用JS做錄屏就是這么簡單。如果你想要 mp4 或其他格式,則必須使用 API 進行轉換或自己進行轉換。

? 瀏覽器會通知是否正在共享屏幕

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 錄像機
    +關注

    關注

    1

    文章

    89

    瀏覽量

    27794
  • JS
    JS
    +關注

    關注

    0

    文章

    78

    瀏覽量

    18057
收藏 人收藏

    評論

    相關推薦

    鴻蒙跨端實踐-JS虛擬機架構實現

    類似的框架,我們需要自行實現以確保核心基礎能力的完整。 鴻蒙虛擬的開發(fā)經歷了從最初 ArkTs2V8 到 JSVM + Roma新架構方案 。在此過程中,我們實現了完整的鴻蒙版的“J2V8”和 基于系統JSVM的
    的頭像 發(fā)表于 09-30 14:42 ?2308次閱讀
    鴻蒙跨端實踐-<b class='flag-5'>JS</b>虛擬機架構<b class='flag-5'>實現</b>

    推薦一個支持js的嵌入式設備開發(fā)平臺

    可以通過vscode開發(fā)js,實時推送js代碼到設備里運行,無需編譯,支持屏幕,感興趣的可以看看 https://github.com/duoxianwulian/dxdop 提供很多js
    發(fā)表于 09-04 14:04

    公交車安全與監(jiān)控:車載監(jiān)控的應用與發(fā)展

    車載錄像機可以把圖像記錄和保存下來的人類科技發(fā)展的產物;安防行業(yè)升華了這一項功能的含義,用在了安全防范中視頻記錄保存,把監(jiān)控攝像接受的視頻完好的保存下來,方便查閱,調用;車載錄像機的性質也是如此
    的頭像 發(fā)表于 08-05 10:17 ?334次閱讀

    可編程振蕩器替換SiTime應用于NVR(網絡視頻錄像機

    可編程振蕩器替換SiTime應用于NVR(網絡視頻錄像機
    的頭像 發(fā)表于 06-24 09:51 ?234次閱讀
    可編程振蕩器替換SiTime應用于NVR(網絡視頻<b class='flag-5'>錄像機</b>)

    車載硬盤錄像機:移動監(jiān)控的新里程碑

    車載硬盤錄像機的出現,不僅代表了安防科技在移動監(jiān)控領域的最新成果,也預示著移動監(jiān)控將朝著更加智能化、網絡化、定制化的方向發(fā)展。隨著技術的不斷進步和應用領域的不斷拓展,車載硬盤錄像機必將在未來的移動監(jiān)控領域發(fā)揮更加重要的作用。
    的頭像 發(fā)表于 04-29 17:11 ?507次閱讀
    車載硬盤<b class='flag-5'>錄像機</b>:移動監(jiān)控的新里程碑

    請問大伙labview調用???b class='flag-5'>錄像機無法回放的問題

    我調用了??档膸旌瘮?,運行起來沒報錯,返回值是0,但是無法正常顯示回放畫面
    發(fā)表于 04-22 20:28

    淺談S-VIDEO接口靜電浪涌防護

    淺談S-VIDEO接口靜電浪涌防護S-Video接口曾經在一些舊款的電視、錄像機、游戲等設備上廣泛應用,用于傳輸視頻信號。不過,隨著技術的發(fā)展,S-Video接口已經逐漸被其他更先進的接口所取
    的頭像 發(fā)表于 03-07 08:02 ?589次閱讀
    淺談S-VIDEO接口靜電浪涌防護

    CYUSB3065通過DMA的方式來上傳錄像到電腦,請問如何暫停和啟動錄像

    的是 CYUSB3065,然后通過DMA的方式來上傳錄像到電腦,請問如何暫停和啟動錄像?
    發(fā)表于 02-29 06:35

    監(jiān)控錄像機和交換機的作用區(qū)別

    監(jiān)控錄像機和交換機是現代安防系統中的核心設備,它們在維護公共秩序、保護人們財產安全、預防犯罪等方面發(fā)揮著重要作用。盡管這兩種設備都在安防系統中扮演著重要角色,但它們的作用和功能卻有很大的不同。在本文
    的頭像 發(fā)表于 02-22 10:19 ?4227次閱讀

    攝像頭能被多少NVR同時添加?

    如果錄像機的數量超過攝像的最大供流數量,例如5臺錄像機同時掃描添加了攝像,那就會造成攝像供流不足,出現“爭搶”碼流的情況,最后的現象就
    發(fā)表于 12-02 10:24 ?3748次閱讀
    攝像頭能被多少NVR同時添加?

    js文件可以直接瀏覽器運行嗎

    載和運行。 在Web開發(fā)中,JS常被用于實現動態(tài)交互效果和頁面邏輯控制。通過將JS代碼嵌入到網頁的HTML文件中,瀏覽器可以在頁面加載過程中自動執(zhí)行JS
    的頭像 發(fā)表于 11-27 16:45 ?3790次閱讀

    怎么js保存數據

    JS保存數據是Web開發(fā)中非常重要的一個功能,它能夠將用戶的輸入或者其他數據存儲在瀏覽器中,隨后方便地讀取和使用。在本文中,我們將討論不同的數據保存方式以及如何使用JS在客戶端中實現數據的保存
    的頭像 發(fā)表于 11-27 16:10 ?969次閱讀

    瑞芯微RK3588核心板在網絡錄像機產品中的應用與優(yōu)勢

    瑞芯微RK3588核心板在網絡錄像機產品中的應用與優(yōu)勢-迅為電子
    的頭像 發(fā)表于 11-27 14:16 ?847次閱讀
    瑞芯微RK3588核心板在網絡<b class='flag-5'>錄像機</b>產品中的應用與優(yōu)勢

    云視頻存儲是什么_如何工作_有何優(yōu)勢

    云存儲,顧名思義,就是將監(jiān)控錄像存儲在云端的一種方法。與傳統的閉路電視系統不同,在云中存儲錄像的現代監(jiān)控系統為組織提供了一種簡單的方法來擴展視頻存儲以滿足保留要求。云攝像系統不受NV
    的頭像 發(fā)表于 11-21 16:39 ?1999次閱讀

    單片實現簡單的LCD設計

    電子發(fā)燒友網站提供《單片實現簡單的LCD設計.pdf》資料免費下載
    發(fā)表于 11-17 09:29 ?0次下載
    單片<b class='flag-5'>機</b><b class='flag-5'>實現</b>更<b class='flag-5'>簡單</b>的LCD設計