国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」

這篇具有很好參考價值的文章主要介紹了記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

這里給大家分享我在網(wǎng)上總結(jié)出來的一些知識,希望對大家有所幫助

記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」

前言

要在 JavaScript 中實現(xiàn)屏幕錄制,可以使用 navigator.mediaDevices.getDisplayMedia() 方法來獲取屏幕的媒體流。然后,可使用 MediaRecorder 對象將媒體流錄制為視頻文件。

但該方法會在瀏覽器彈出一個授權(quán)窗口,讓用戶選擇要分享的內(nèi)容,這不可實現(xiàn)“無感知”。

記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」

如果真正做到無感知,那我們就不能借助瀏覽器或者系統(tǒng)系統(tǒng)的能力了。我們能做的就只能是通過js去操作了。

要在頁面內(nèi)直接錄制視頻似乎并不容易,沒有現(xiàn)成的開源庫可以使用,也沒有很好的想法。

那我們換一個思路,視頻是由幀組成的,我們是否可以不斷的截圖,然后組合成一段視頻?好像是可以的

記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」

頁面

先寫一個簡單的頁面:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Canvas視頻錄制</title>
    <link rel="stylesheet" href="styles.css">
</head>

<body>
    <main>
        <div class="buttons">
            <button class="start-btn">開始錄制</button>
            <button class="pause-btn">暫停錄制</button>
            <button class="resume-btn">繼續(xù)錄制</button>
            <button class="stop-btn">結(jié)束錄制</button>
        </div>
        <div id="box">
            <section class="content">
                <h2>TODO LIST</h2>
                <div class="background-div">
                    <button class="background-btn">切換背景顏色</button>
                </div>
                <div id="todo-form">
                    <input type="text" class="input-field" placeholder="輸入待辦事項">
                    <button type="submit" class="submit-btn">提交</button>
                </div>
                <div class="list"></div>
            </section>
        </div>
        <img src="" alt="" class="hidden">
    </main>

    <script src="<https://cdn.bootcss.com/html2canvas/0.5.0-beta4/html2canvas.min.js>" defer></script>
    <script src="canvas.js" defer></script>
</body>

</html>

截圖

實現(xiàn)網(wǎng)頁的截圖操作,最常用的庫是?html2canvas用,它可以將網(wǎng)頁中的 HTML 元素轉(zhuǎn)換為 Canvas 元素,并將其導(dǎo)出為圖像文件。在瀏覽器中捕獲整個頁面或特定區(qū)域的截圖,包括 CSS 樣式和渲染效果。

const canvasFunction = () => {
    html2canvas(box).then(canvas => {
        const imgStr = canvas.toDataURL("image/png");
        img.src = imgStr;
        img.onload = function () {
            ctx.drawImage(img, 0, 0, w, h);
        }
    });
  }

合成視頻

這里我們要使用到一個 API MediaRecorder ,用于在瀏覽器中進行音頻和視頻的錄制。它提供了一種簡單的方式來捕獲來自麥克風(fēng)、攝像頭或屏幕的媒體數(shù)據(jù),并將其保存為文件或進行實時流傳輸。

它有以下幾個常用的方法:

  • isTypeSupported() 返回一個 Boolean 值,來表示設(shè)置的 MIME type 是否被當(dāng)前用戶的設(shè)備支持。
  • start() 開始錄制媒體,這個方法調(diào)用時可以通過給 timeslice 參數(shù)設(shè)置一個毫秒值,如果設(shè)置這個毫秒值,那么錄制的媒體會按照你設(shè)置的值進行分割成一個個單獨的區(qū)塊,而不是以默認(rèn)的方式錄制一個非常大的整塊內(nèi)容。
  • pause() 暫停媒體錄制。
  • resume() 繼續(xù)錄制之前被暫停的錄制動作。
  • stop() 停止錄制。同時觸發(fā)?dataavailable?事件,返回一個存儲 Blob 內(nèi)容的錄制數(shù)據(jù)。之后不再記錄。

首先創(chuàng)建一個 canvas 元素,用來保存 html2canvas 的截圖,然后通過 captureStream 方法實時截取媒體流。

const w = boxBoundingClientRect.width;
const h = boxBoundingClientRect.height;
const canvas = document.createElement('canvas');
canvas.setAttribute('id', 'canvas');
canvas.setAttribute('width', w);
canvas.setAttribute('height', h);
canvas.style.display = 'none';
box.appendChild(canvas);

const img = document.querySelector('img');
const ctx = canvas.getContext("2d");
const allChunks = [];
const stream = canvas.captureStream(60); // 60 FPS recording   1秒60幀
通過 canvas 的流來創(chuàng)建一個?MediaRecorder?實例,并在?ondataavailable?事件中保存視頻信息:
const recorder = new MediaRecorder(stream, {
    mimeType: 'video/webm;codecs=vp9'
});

recorder.ondataavailable = (e) => {
    allChunks.push(e.data);
};

最后,在停止錄制時將幀信息創(chuàng)建 blob 并插入到頁面上:

recorder.stop();
const fullBlob = new Blob(allChunks);
const videoUrl = window.URL.createObjectURL(fullBlob);

const video = document.createElement('video');
video.controls = true;
video.src = videoUrl;
video.muted = true;
video.autoplay = true;
document.body.appendChild(video);

或者可以將視頻下載

recorder.stop();
const fullBlob = new Blob(allChunks);
const videoUrl = window.URL.createObjectURL(fullBlob);

let link = document.createElement('a');
link.style.display = 'none';
let fullBlob = new Blob(allChunks);
let downloadUrl = window.URL.createObjectURL(fullBlob);
link.href = downloadUrl;
link.download = 'canvas-video.mp4';
document.body.appendChild(link);
link.click();
link.remove();

這里,為了節(jié)省資源,只在點擊按鈕、輸入等事件發(fā)生時才調(diào)用?html2canvas?截圖 DOM。

如果實時記錄屏也可以使用?requestAnimationFrame?。

最后

雖然實現(xiàn)了無感知錄制屏幕,但也僅限于網(wǎng)頁內(nèi),沒有辦法錄制網(wǎng)頁以外的部分。

本文轉(zhuǎn)載于:

https://juejin.cn/post/7293462197386592283

如果對您有所幫助,歡迎您點個關(guān)注,我會定時更新技術(shù)文檔,大家一起討論學(xué)習(xí),一起進步。

?記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」文章來源地址http://www.zghlxwxcb.cn/news/detail-711149.html

到了這里,關(guān)于記錄--純前端也可以實現(xiàn)「用戶無感知錄屏」的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 紅米手機錄屏功能在哪?這里有你想要的答案

    紅米手機錄屏功能在哪?這里有你想要的答案

    “有人知道紅米手機錄屏功能在哪嗎?剛買了最新款的紅米K70,本來打算用來錄制游戲,可是找了半天,就是沒看見錄屏功能,真的很著急,有沒有大佬教教我?!?在手機成為人們生活不可或缺的一部分的今天,錄屏功能逐漸成為了手機的標(biāo)配之一。紅米手機作為一款性價比

    2024年01月21日
    瀏覽(44)
  • 前端項目部署自動檢測更新后通知用戶刷新頁面(前端實現(xiàn),技術(shù)框架vue、js、webpack)——方案一:編譯項目時動態(tài)生成一個記錄版本號的文件

    前端項目部署自動檢測更新后通知用戶刷新頁面(前端實現(xiàn),技術(shù)框架vue、js、webpack)——方案一:編譯項目時動態(tài)生成一個記錄版本號的文件

    當(dāng)我們重新部署前端項目的時候,如果用戶一直停留在頁面上并未刷新使用,會存在功能使用差異性的問題,因此,當(dāng)前端部署項目后,需要提醒用戶有去重新加載頁面。 vue、js、webpack 編譯項目時動態(tài)生成一個記錄版本號的文件 輪詢(20s、自己設(shè)定時間)這個文件,判斷版

    2024年02月02日
    瀏覽(57)
  • 記錄--前端中 JS 發(fā)起的請求可以暫停嗎

    記錄--前端中 JS 發(fā)起的請求可以暫停嗎

    在前端中,JavaScript(JS)可以使用XMLHttpRequest對象或fetch API來發(fā)起網(wǎng)絡(luò)請求。然而,JavaScript本身并沒有提供直接的方法來暫停請求的執(zhí)行。一旦請求被發(fā)送,它會繼續(xù)執(zhí)行并等待響應(yīng)。 盡管如此,你可以通過一些技巧或庫來模擬請求的暫停和繼續(xù)執(zhí)行。下面是一種常見的方法

    2024年02月05日
    瀏覽(20)
  • 記錄--前端重新部署如何通知用戶

    記錄--前端重新部署如何通知用戶

    前端構(gòu)建完上線,用戶還停留還在老頁面,用戶不知道網(wǎng)頁重新部署了,跳轉(zhuǎn)頁面的時候有時候js連接hash變了導(dǎo)致報錯跳不過去,并且用戶體驗不到新功能。 每次打包寫入一個json文件,或者對比生成的 script的src引入的hash地址或者etag 不同,輪詢調(diào)用,判斷是否更新 前端使用

    2024年02月14日
    瀏覽(20)
  • AIGC圖像分辨率太低?快來試試像素感知擴散超分模型,你想要的細節(jié)都在這里

    AIGC圖像分辨率太低?快來試試像素感知擴散超分模型,你想要的細節(jié)都在這里

    ? ? ? ?最新 FaceChain支持多人合照寫真、上百種單人寫真風(fēng)格,項目信息匯總:ModelScope 魔搭社區(qū)?。 ???????github開源直達(覺得有趣的點個star哈。):GitHub - modelscope/facechain: FaceChain is a deep-learning toolchain for generating your Digital-Twin. 摘要 阿里巴巴最新自研的像素感知擴散

    2024年02月08日
    瀏覽(26)
  • 使用JavaScript實現(xiàn)保存文件,用戶可以自己選擇本地路徑

    但是,此API目前仍處于實驗階段,可能并不在所有瀏覽器中都得到完全支持。 瀏覽器的權(quán)限是很低的,是不能與操作系統(tǒng)實現(xiàn)交互,只有少量的api可以與操作系統(tǒng)交互,例如文件上傳。但是,軟件是有很高的權(quán)限的,例如,迅雷下載就可以輕松實現(xiàn),下載到指定目錄。 但是

    2024年02月03日
    瀏覽(27)
  • 微信小程序的訂閱消息是一個允許開發(fā)者向用戶發(fā)送重要通知的功能。這里為您展示如何實現(xiàn)小程序訂閱消息的基本步驟和代碼示例

    步驟 1: 獲取模板 ID 首先,您需要登錄微信公眾平臺,進入「小程序管理」后臺,找到“設(shè)置” “開發(fā)設(shè)置” “訂閱消息”,然后選擇并配置所需的模板,記錄模板 ID。 步驟 2: 小程序前端請求訂閱 在小程序的某個頁面或組件中,當(dāng)用戶執(zhí)行某個操作(例如點擊按鈕)時,可

    2024年02月04日
    瀏覽(101)
  • Android App保護用戶隱私————禁止應(yīng)用截屏或錄屏

    Android App保護用戶隱私————禁止應(yīng)用截屏或錄屏

    ???????相信大家在使用某些平臺應(yīng)用的時候,都會有 限制的規(guī)定 。 ???????通常情況下,錄屏、截圖軟件都可以在手機的運行過程中進行錄屏、截圖,普通的平臺也不會阻止錄屏、截圖軟件運行。 ???????但是在某些比較 敏感 的平臺上面,有可能出于 保密 的原因

    2024年02月02日
    瀏覽(21)
  • 實現(xiàn)用戶操作日志記錄

    實現(xiàn)用戶操作日志記錄

    java自帶的日志框架是java.util.logging(JUL),從JDK1.4(2002)開始捆綁在JDK中??梢允褂肑UL來記錄操作日志。以下是使用JUL記錄事務(wù)的示例: 系統(tǒng)日志 :統(tǒng)日志主要是為開發(fā)排查問題提供依據(jù),一般打印在日志文件中;系統(tǒng)日志的可讀性要求沒那么高,日志中會包含代碼的信息

    2024年02月15日
    瀏覽(19)
  • 想解鎖禁用的iPhone?除了可以使用電腦之外,這里還有不需要電腦的方法!

    想解鎖禁用的iPhone?除了可以使用電腦之外,這里還有不需要電腦的方法!

    多次輸入錯誤的密碼后,iPhone將顯示“iPhone已禁用”。這種情況看起來很棘手,因為你現(xiàn)在不能用iPhone做任何事情。對于這種情況,我們提供了幾種有效的方法來幫助你在最棘手的問題中解鎖禁用的iPhone。你可以選擇使用或不使用電腦來解鎖禁用的iPhone。 iPhone的屏幕密碼保護

    2024年02月11日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包