使用20行JS代碼實(shí)現(xiàn)屏幕錄制功能
代碼實(shí)現(xiàn)
要實(shí)現(xiàn)屏幕錄制,我們需要通過 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事件獲取錄制文件并通過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ò)的感覺,但是這只是一個(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)文章
js實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊飄愛心效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊飄愛心效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
關(guān)于JSON解析的實(shí)現(xiàn)過程解析
這篇文章主要介紹了關(guān)于JSON解析的實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10
利用JavaScript中的高階函數(shù)和閉包實(shí)現(xiàn)命令模式
命令模式提供了一種優(yōu)雅的解決方案,使得我們能夠靈活地封裝和管理代碼操作,所以本文將為大家介紹命令模式的概念、應(yīng)用場(chǎng)景以及在JavaScript中的實(shí)現(xiàn)方式,需要的可以參考一下2023-06-06
javascript 移動(dòng)鼠標(biāo)得到單元格所在table表中的rowIndex位置[兼容ie,firefox]
移動(dòng)鼠標(biāo),得到單元格所在表中的位置,主要是學(xué)習(xí)使用js的e.srcElement.2009-12-12
uni-app如何頁面?zhèn)鲄?shù)的幾種方法總結(jié)
這篇文章主要介紹了uni-app如何頁面?zhèn)鲄?shù)的幾種方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
JavaScript實(shí)現(xiàn)瀑布流圖片效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)瀑布流圖片效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06
省市區(qū)三級(jí)聯(lián)動(dòng)下拉框菜單javascript版
這篇文章主要給大家介紹了javascript實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)下拉框菜單,有需要的朋友可以參考下2015-08-08
跟我學(xué)習(xí)javascript的arguments對(duì)象
跟我學(xué)習(xí)javascript的arguments對(duì)象,需要的朋友可以參考下2015-11-11
JS浮點(diǎn)數(shù)運(yùn)算結(jié)果不精確的Bug解決
這篇文章主要給大家介紹了關(guān)于JS浮點(diǎn)數(shù)運(yùn)算結(jié)果不精確的Bug解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08

