使用20行JS代碼實現(xiàn)屏幕錄制功能
代碼實現(xiàn)
要實現(xiàn)屏幕錄制,我們需要通過 navigator.mediaDevices.getDisplayMedia() 方法獲取屏幕媒體流,這個方法會彈出一個選擇窗口,讓用戶選擇要錄制的屏幕或窗口。但出于安全原因,發(fā)起錄制時必須確保用戶手勢觸發(fā)捕獲,例如點擊按鈕:
const button = document.createElement("button");
button.innerHTML = "capture";
document.body.append(button);
button.addEventListener("click", async () => {
// TODO
});
點擊后,獲取視頻流并錄制,獲取到媒體流后,我們可以將其傳給 MediaRecorder 對象后開始屏幕錄制。
const stream = await navigator.mediaDevices.getDisplayMedia(); const recoder = new MediaRecorder(stream); recoder.start();
當(dāng)用戶停止共享屏幕時停止錄制,調(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();
});
這樣一個簡單的屏幕記錄器就完成了,不到20行代碼就實現(xiàn)了整個屏幕錄制的核心功能。完整代碼如下:
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();
});
});
瀏覽器兼容
目前的瀏覽器支持情況,對于較低的版本需要升級才能使用。


實現(xiàn)這么強(qiáng)大的功能只需要這么少的代碼確實是很不錯的感覺,但是這只是一個簡單的錄制功能,實際開發(fā)中要考慮的因素相對會比較多,由于屏幕錄制可能消耗較多的資源,因此在長時間錄制時,我們應(yīng)該提示用戶錄制時間或大小的限制,并提供相應(yīng)的操作和反饋。
使用 MediaRecorder 我們可以方便地實現(xiàn)屏幕錄制功能。這種功能在教學(xué)、演示等場景下非常有用,同時也為開發(fā)者提供了更多創(chuàng)造性的可能性。有興趣的可以體驗使用看看效果,在實際使用中也要合理使用此功能,確保用戶隱私和數(shù)據(jù)安全。
以上就是使用20行JS代碼實現(xiàn)屏幕錄制功能的詳細(xì)內(nèi)容,更多關(guān)于JS屏幕錄制的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
利用JavaScript中的高階函數(shù)和閉包實現(xiàn)命令模式
命令模式提供了一種優(yōu)雅的解決方案,使得我們能夠靈活地封裝和管理代碼操作,所以本文將為大家介紹命令模式的概念、應(yīng)用場景以及在JavaScript中的實現(xiàn)方式,需要的可以參考一下2023-06-06
javascript 移動鼠標(biāo)得到單元格所在table表中的rowIndex位置[兼容ie,firefox]
移動鼠標(biāo),得到單元格所在表中的位置,主要是學(xué)習(xí)使用js的e.srcElement.2009-12-12
uni-app如何頁面?zhèn)鲄?shù)的幾種方法總結(jié)
這篇文章主要介紹了uni-app如何頁面?zhèn)鲄?shù)的幾種方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
省市區(qū)三級聯(lián)動下拉框菜單javascript版
這篇文章主要給大家介紹了javascript實現(xiàn)省市區(qū)三級聯(lián)動下拉框菜單,有需要的朋友可以參考下2015-08-08
跟我學(xué)習(xí)javascript的arguments對象
跟我學(xué)習(xí)javascript的arguments對象,需要的朋友可以參考下2015-11-11

