欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

瀏覽器視頻幀操作方法?requestVideoFrameCallback()

 更新時間:2022年07月29日 08:29:36   作者:??天行無忌?  
這篇文章主要介紹了瀏覽器視頻幀操作方法?requestVideoFrameCallback(),文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

近期發(fā)現(xiàn)一個很酷的應(yīng)用場景,對著攝像頭做動作,然后分析器動畫渲染到 3D 模型上,在了解其實現(xiàn)原理后,對一些技術(shù)點做一些學(xué)習筆記。 requestVideoFrameCallback() 就是其中的技術(shù)點,使用方法可以在瀏覽器中高效的處理視頻。

HTMLVideoElement.requestVideoFrameCallback() 是一個新的WEB API,2021 年 1 月 25 日提交的草案。requestVideoFrameCallback() 方法允許WEB開發(fā)者注冊一個回調(diào)方法,回調(diào)方法在新視頻幀發(fā)送到合成器時在渲染步驟中運行。這是為了讓開發(fā)人員對視頻執(zhí)行高效的每幀視頻操作,例如視頻處理和繪制到畫布上(截屏)、視頻分析或與外部音頻源同步。

與 requestAnimationFrame() 的區(qū)別

可以通過API執(zhí)行方法 drawImage() 將視頻幀繪制到畫布等操作將盡可能的與屏幕上播放的視頻的幀速率同步。與通常每秒觸發(fā)約 60 次的 window.requestAnimationFrame() 不同,requestVideoFrameCallback() 與實際視頻幀速率綁定,但也有一個重要的例外:

運行回調(diào)的有效速率是視頻速率和瀏覽器速率之間的較小速率。這意味著在以 60Hz 繪制的瀏覽器中播放的 25fps 視頻將以 25Hz 觸發(fā)回調(diào)。在同一個 60Hz 瀏覽器中的 120fps 視頻會以 60Hz 觸發(fā)回調(diào)。

由于它與 window.requestAnimationFrame() 相似,該方法最初被提議為 video.requestAnimationFrame(),最終使用新的名稱 requestVideoFrameCallback(),這是在漫長的討論后達成一致的,這個名稱相對來說比較更加直觀。

在前端開發(fā)中,通常在使用一些新的WEB API的時候需要檢測其可用性,同樣可以使用一下代碼進行檢測:

if ("requestVideoFrameCallback" in HTMLVideoElement.prototype) {
    // 支持相應(yīng)的API
}

瀏覽器支持

可以點擊鏈接查看相應(yīng)的支持度。

使用方法

如果曾經(jīng)使用過 requestAnimationFrame() 方法,那么會立即對 requestVideoFrameCallback() 方法并不陌生。注冊一次初始回調(diào),然后在回調(diào)觸發(fā)時重新注冊。

const videoFrameCallback = (now, metadata) => {
    console.log(now, metadata);
    // 重新注冊回調(diào)以獲得關(guān)于下一幀的通知。
    videoElement.requestVideoFrameCallback(videoFrameCallback);
};
// 最初注冊回調(diào),以便在第一幀時得到通知。
videoElement.requestVideoFrameCallback(videoFrameCallback);

在回調(diào)中,now 是一個 DOMHighResTimeStamp,metadata 是一個 VideoFrameMetadata 字典,具有以下屬性:

  • presentationTimeDOMHighResTimeStamp 類型,用戶代理提交幀以進行合成的時間。
  • expectedDisplayTimeDOMHighResTimeStamp 類型,用戶代理期望框架可見的時間。
  • widthunsigned long 類型,視頻幀的寬度,以像素為單位。
  • heightunsigned long 類型,視頻幀的高度,以像素為單位。
  • mediaTimedouble 類型,媒體呈現(xiàn)時間戳 (PTS),以呈現(xiàn)幀的秒數(shù)為單位(例如,它在 video.currentTime 時間線上的時間戳)。
  • presentedFramesunsigned long 類型,提交用于合成的幀數(shù)的計數(shù)。允許客戶端確定 VideoFrameRequestCallback 實例之間是否丟失幀。
  • processingDurationdouble 類型,從將具有與此幀相同的呈現(xiàn)時間戳 (PTS) 的編碼數(shù)據(jù)包(例如,與 mediaTime 相同)提交到解碼器直到解碼的幀準備好呈現(xiàn)所經(jīng)過的持續(xù)時間(以秒為單位)。

對于 WebRTC 應(yīng)用程序,可能會出現(xiàn)其他屬性:

  • captureTimeDOMHighResTimeStamp 類型,對于來自本地或遠程源的視頻幀,這是攝像機捕獲幀的時間。對于遠程源,使用時鐘同步和 RTCP 發(fā)送方報告來估計捕獲時間,以將 RTP 時間戳轉(zhuǎn)換為捕獲時間。
  • receiveTimeDOMHighResTimeStamp 類型,對于來自遠程源的視頻幀,這是平臺接收到編碼幀的時間,即通過網(wǎng)絡(luò)接收到屬于該幀的最后一個數(shù)據(jù)包的時間。
  • rtpTimestampunsigned long 類型,與此視頻幀關(guān)聯(lián)的 RTP 時間戳。

請注意,在某些情況下,width 和 height 可能與 videoWidth 和 videoHeight 不同(例如,變形視頻可能具有矩形像素)。

在上面的參數(shù)列表中特別值得關(guān)注的是 mediaTime ,在 Chromium 的實現(xiàn)中,使用音頻時鐘作為支持 video.currentTime 的時間源。而 mediaTime 直接由幀的 presentationTimestamp 填充。如果希望以可再現(xiàn)的方式準確地標識幀,包括準確地識別錯過的幀,那么應(yīng)該使用 mediaTime。

總結(jié)

能夠在瀏覽器中訪問相機而不使用第三方軟件是一個不可思議的進步。與 canvas 和一些JavaScript相結(jié)合,相機變得快速而容易訪問。它不僅可以使用相機,而且因為 canvas 是超靈活的,將能夠在未來添加性感的 instagram 風格的圖像濾鏡。

到此這篇關(guān)于瀏覽器視頻幀操作方法 requestVideoFrameCallback()的文章就介紹到這了,更多相關(guān)JS requestVideoFrameCallback內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺析js原型鏈和vue構(gòu)造函數(shù)

    深入淺析js原型鏈和vue構(gòu)造函數(shù)

    這篇文章主要介紹了js原型鏈和vue構(gòu)造函數(shù)的相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2018-10-10
  • JavaScript學(xué)習筆記之DOM基礎(chǔ) 2.4

    JavaScript學(xué)習筆記之DOM基礎(chǔ) 2.4

    DOM(Document Object Model),即“文檔對象模型”?;谡Z義的邏輯結(jié)構(gòu),DOM將網(wǎng)頁內(nèi)的元素與內(nèi)容呈現(xiàn)為一個清晰、易讀的樹狀模型,下面小編把最近整理有關(guān)javascript筆記之DOM基礎(chǔ)分享給大家,有需要的朋友可以參考下
    2015-08-08
  • 詳解uniapp分包的實現(xiàn)方式及優(yōu)點

    詳解uniapp分包的實現(xiàn)方式及優(yōu)點

    當今移動應(yīng)用開發(fā)領(lǐng)域,隨著用戶對于應(yīng)用功能和體驗的要求不斷提高,應(yīng)用程序的復(fù)雜度也在不斷增加,在這種情況下,應(yīng)用程序的體積也隨之增大,為了解決這個問題,Uniapp提供了分包功能,本文將詳細介紹Uniapp分包的功能和優(yōu)勢,包括如何通過配置文件實現(xiàn)分包
    2023-09-09
  • JS驗證身份證有效性示例

    JS驗證身份證有效性示例

    身份證有效性驗證的方法有很多,在本文將為大家介紹下如何使用js簡單實現(xiàn)下,感興趣的朋友可以參考下
    2013-10-10
  • 微信小程序 Storage更新詳解

    微信小程序 Storage更新詳解

    這篇文章主要介紹了微信小程序 Storage更新詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友可以參考下
    2019-07-07
  • js FLASH幻燈片字符串中有連接符&的處理方法

    js FLASH幻燈片字符串中有連接符&的處理方法

    一般情況下我們在FLASH幻燈片字符串中有連接符時點擊鏈接就會不正常,造成鏈接中的參數(shù)丟失,那么就需要用encodeURIComponent來對鏈接地址進行編碼
    2012-03-03
  • JavaScript中具名函數(shù)的多種調(diào)用方式總結(jié)

    JavaScript中具名函數(shù)的多種調(diào)用方式總結(jié)

    這篇文章主要介紹了JavaScript中具名函數(shù)的多種調(diào)用方式總結(jié),本文總結(jié)了4種方法,需要的朋友可以參考下
    2014-11-11
  • JS對字符串編碼的幾種方式使用指南

    JS對字符串編碼的幾種方式使用指南

    在客戶端中,要對字符串編碼,可以采用:escape();encodeurl();encodeURIComponent();下面我們就來具體講解下這幾個方法。
    2015-05-05
  • JavaScript forEach 方法跳出循環(huán)的操作方法

    JavaScript forEach 方法跳出循環(huán)的操作方法

    這篇文章主要介紹了JavaScript forEach 方法跳出循環(huán)的操作方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • 基于JavaScript制作一個骰子游戲

    基于JavaScript制作一個骰子游戲

    這節(jié)實驗我們將使用?HTML、CSS?和?JavaScript?構(gòu)建一個骰子游戲。設(shè)置兩名玩家(一個人玩也行)然后擲骰子,獲得更高點數(shù)的玩家將贏得游戲,感興趣的可以了解一下
    2022-04-04

最新評論