使用20行JS代碼實(shí)現(xiàn)屏幕錄制功能
代碼實(shí)現(xiàn)
要實(shí)現(xiàn)屏幕錄制,我們需要通過(guò) navigator.mediaDevices.getDisplayMedia()
方法獲取屏幕媒體流,這個(gè)方法會(huì)彈出一個(gè)選擇窗口,讓用戶選擇要錄制的屏幕或窗口。但出于安全原因,發(fā)起錄制時(shí)必須確保用戶手勢(shì)觸發(fā)捕獲,例如點(diǎn)擊按鈕:
const button = document.createElement("button"); button.innerHTML = "capture"; document.body.append(button); button.addEventListener("click", async () => { // TODO });
點(diǎn)擊后,獲取視頻流并錄制,獲取到媒體流后,我們可以將其傳給 MediaRecorder
對(duì)象后開始屏幕錄制。
const stream = await navigator.mediaDevices.getDisplayMedia(); const recoder = new MediaRecorder(stream); recoder.start();
當(dāng)用戶停止共享屏幕時(shí)停止錄制,調(diào)用 recoder.stop()
即可停止錄制。
const [video] = stream.getVideoTracks(); video.addEventListener("ended", () => { recoder.stop(); });
監(jiān)聽recoder
的dataavailable
事件獲取錄制文件并通過(guò)URL.createObjectURL()
方法將其轉(zhuǎn)換為可下載的URL,供用戶下載錄制的視頻文件。
recoder.addEventListener("dataavailable", (evt) => { const a = document.createElement("a"); a.href = URL.createObjectURL(evt.data); a.download = "capture.webm"; a.click(); });
這樣一個(gè)簡(jiǎn)單的屏幕記錄器就完成了,不到20行代碼就實(shí)現(xiàn)了整個(gè)屏幕錄制的核心功能。完整代碼如下:
button.addEventListener("click", async () => { const stream = await navigator.mediaDevices.getDisplayMedia(); const recoder = new MediaRecorder(stream); recoder.start(); const [video] = stream.getVideoTracks(); video.addEventListener("ended", () => { recoder.stop(); }); recoder.addEventListener("dataavailable", (evt) => { const a = document.createElement("a"); a.href = URL.createObjectURL(evt.data); a.download = "capture.webm"; a.click(); }); });
瀏覽器兼容
目前的瀏覽器支持情況,對(duì)于較低的版本需要升級(jí)才能使用。
實(shí)現(xiàn)這么強(qiáng)大的功能只需要這么少的代碼確實(shí)是很不錯(cuò)的感覺(jué),但是這只是一個(gè)簡(jiǎn)單的錄制功能,實(shí)際開發(fā)中要考慮的因素相對(duì)會(huì)比較多,由于屏幕錄制可能消耗較多的資源,因此在長(zhǎng)時(shí)間錄制時(shí),我們應(yīng)該提示用戶錄制時(shí)間或大小的限制,并提供相應(yīng)的操作和反饋。
使用 MediaRecorder
我們可以方便地實(shí)現(xiàn)屏幕錄制功能。這種功能在教學(xué)、演示等場(chǎng)景下非常有用,同時(shí)也為開發(fā)者提供了更多創(chuàng)造性的可能性。有興趣的可以體驗(yàn)使用看看效果,在實(shí)際使用中也要合理使用此功能,確保用戶隱私和數(shù)據(jù)安全。
以上就是使用20行JS代碼實(shí)現(xiàn)屏幕錄制功能的詳細(xì)內(nèi)容,更多關(guān)于JS屏幕錄制的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
服務(wù)器安全設(shè)置的幾個(gè)注冊(cè)表設(shè)置
服務(wù)器安全設(shè)置的幾個(gè)注冊(cè)表設(shè)置...2007-07-07js?window.addEventListener?簡(jiǎn)介
window.addEventListener是JavaScript中用于添加事件監(jiān)聽器的方法,允許在發(fā)生特定事件時(shí)執(zhí)行函數(shù),本文給大家介紹js?window.addEventListener?是什么,感興趣的朋友一起看看吧2024-09-09bootstrap table.js動(dòng)態(tài)填充單元格數(shù)據(jù)的多種方法
這篇文章主要為大家詳細(xì)介紹了bootstrap table.js填充單元格數(shù)據(jù)的多種方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07Typescript中bind的使用方法及注意事項(xiàng)
在TypeScript(以及JavaScript)中,bind()是一個(gè)用于改變函數(shù)上下文的方法,下面這篇文章主要給大家介紹了關(guān)于Typescript中bind的使用方法及注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2024-08-08TypeScript中的類型斷言[as語(yǔ)法|<>語(yǔ)法]的使用
本文主要介紹了TypeScript中的類型斷言[as語(yǔ)法|<>語(yǔ)法]的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06小程序自定義tab-bar踩坑實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了關(guān)于小程序自定義tab-bar踩坑實(shí)戰(zhàn)的相關(guān)資料,包括下載代碼、放置文件、修改JS文件、配置app.json和隱藏原生導(dǎo)航欄等步驟,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-12-12js實(shí)現(xiàn)拖拽效果(構(gòu)造函數(shù))
這篇文章主要介紹了js利用構(gòu)造函數(shù)實(shí)現(xiàn)拖拽效果2015-12-12JS正則表達(dá)式驗(yàn)證賬號(hào)、手機(jī)號(hào)、電話和郵箱是否合法
這篇文章主要介紹了JS正則表達(dá)式驗(yàn)證賬號(hào)、手機(jī)號(hào)、電話和郵箱是否合法,需要的朋友可以參考下2017-03-03