用JS創(chuàng)建一個錄屏功能
OBS studio很酷,但 JavaScript 更酷,現(xiàn)在,我們用 JavaScript 創(chuàng)建自己的錄屏功能。
首先,創(chuàng)建一個HTML文件,包含記錄按鈕和一個播放標簽,
內(nèi)容如下:
<!DOCTYPE html>
<html>
<head>
<title>Parcel Sandbox</title>
<meta charset="UTF-8" />
</head>
<body>
<video class="video" width="600px" controls></video>
<button class="record-btn">record</button>
<script src="./index.js"></script>
</body>
</html>
然后在創(chuàng)建 index.js,
監(jiān)聽按鈕的點擊:
let btn = document.querySelector(".record-btn");
btn.addEventListener("click", function () {
console.log("hello");
});
在瀏覽器中打開 html文件,點擊按鈕,我們可以在控制臺看到打印的 hello。

現(xiàn)在把打印去掉,換成如下的內(nèi)容:
let btn = document.querySelector(".record-btn");
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
});
});
現(xiàn)在點擊按鈕,會彈出屏幕選擇框:

因為,我現(xiàn)在用的是兩個屏幕,所以會出現(xiàn)兩個選擇。
現(xiàn)在你可能認為選擇一個屏幕,然后點擊分享,就開始錄制了。非也,這個比我們想象中的復雜點。我們要使用 MediaRecorder 來錄制我們的視頻。
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
// 需要更好的瀏覽器支持
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
// 必須手動啟動
mediaRecorder.start()
})
當我們的屏幕被錄制下來時,mediaRecorder 會給我們提供分塊的數(shù)據(jù),我們需要將這些數(shù)據(jù)存儲在一個變量中。
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
// 需要更好的瀏覽器支持
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
let chunks = []
mediaRecorder.addEventListener('dataavailable', function(e) {
chunks.push(e.data)
})
// 必須手動啟動
mediaRecorder.start()
})
現(xiàn)在,當我們點擊停止共享按鈕時,希望在我們的 video元素中播放錄制的視頻,可以這么做:
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
// 需要更好的瀏覽器支持
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
let chunks = []
mediaRecorder.addEventListener('dataavailable', function(e) {
chunks.push(e.data)
})
mediaRecorder.addEventListener('stop', function(){
let blob = new Blob(chunks, {
type: chunks[0].type
})
let video = document.querySelector(".video")
video.src = URL.createObjectURL(blob)
})
// 必須手動啟動
mediaRecorder.start()
})
現(xiàn)在基本就可以完成了,可以在潤色下,如自動下載錄制的視頻,
可以這么做:
let btn = document.querySelector(".record-btn")
btn.addEventListener("click", async function () {
let stream = await navigator.mediaDevices.getDisplayMedia({
video: true
})
// 需要更好的瀏覽器支持
const mime = MediaRecorder.isTypeSupported("video/webm; codecs=vp9")
? "video/webm; codecs=vp9"
: "video/webm"
let mediaRecorder = new MediaRecorder(stream, {
mimeType: mime
})
let chunks = []
mediaRecorder.addEventListener('dataavailable', function(e) {
chunks.push(e.data)
})
mediaRecorder.addEventListener('stop', function(){
let blob = new Blob(chunks, {
type: chunks[0].type
})
let url = URL.createObjectURL(blob)
let video = document.querySelector("video")
video.src = url
let a = document.createElement('a')
a.href = url
a.download = 'video.webm'
a.click()
})
// 必須手動啟動
mediaRecorder.start()
})
現(xiàn)在,最基本的一個錄制功能就完善了,動手來試試吧!!
到此這篇關于用JS創(chuàng)建一個錄屏功能的文章就介紹到這了,更多相關JS創(chuàng)建一個錄屏功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
5種 JavaScript 方式實現(xiàn)數(shù)組扁平化
這篇文章主要介紹5種 JavaScript 方式實現(xiàn)數(shù)組扁平化,雖說只有5種方法,但是核心只有一個就是遍歷數(shù)組arr,若arr[i]為數(shù)組則遞歸遍歷,直至arr[i]不為數(shù)組然后與之前的結(jié)果concat。 想具體了解的小伙伴那請看下面文章內(nèi)容吧2021-09-09
微信小程序?qū)崿F(xiàn)頁面跳轉(zhuǎn)傳值的方法
這篇文章主要介紹了微信小程序?qū)崿F(xiàn)頁面跳轉(zhuǎn)傳值的方法的相關資料,希望通過本文能幫助到大家,讓大家實現(xiàn)這樣的功能,需要的朋友可以參考下2017-10-10
JavaScript?腳本實現(xiàn)復雜的查詢改寫示例
這篇文章主要為大家介紹了JavaScript?腳本實現(xiàn)復雜的查詢改寫示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
前端Website?sitemap.xml文件搜索引擎優(yōu)化
這篇文章主要為大家介紹了前端Website的sitemap.xml文件和搜索引擎優(yōu)化實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
JavaScript中MutationObServer監(jiān)聽DOM元素詳情
這篇文章主要給大家分享的是?JavaScript中MutationObServer監(jiān)聽DOM元素詳情,DOM的MutationObServer接口,可以在DOM被修改時異步執(zhí)行回調(diào)函數(shù),我的理解就是可以監(jiān)聽DOM修改。下面來看看文章的詳細內(nèi)容,需要的朋友可以參考一下2021-11-11

