最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

與 requestAnimationFrame() 的區(qū)別

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

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

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

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

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

瀏覽器支持

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

使用方法

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

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

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

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

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

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

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

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

總結(jié)

能夠在瀏覽器中訪問(wèn)相機(jī)而不使用第三方軟件是一個(gè)不可思議的進(jìn)步。與 canvas 和一些JavaScript相結(jié)合,相機(jī)變得快速而容易訪問(wèn)。它不僅可以使用相機(jī),而且因?yàn)?nbsp;canvas 是超靈活的,將能夠在未來(lái)添加性感的 instagram 風(fēng)格的圖像濾鏡。

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

相關(guān)文章

  • TypeScript中的函數(shù)

    TypeScript中的函數(shù)

    這篇文章主要介紹了TypeScript中的函數(shù),一般JavaScript中的函數(shù)定義常用的有使用function關(guān)鍵字聲明函數(shù)、使用字面量方式聲明函數(shù)、使用箭頭函數(shù)聲明函數(shù)等幾種函數(shù),下面我們大家就一起進(jìn)入文章了解這些函數(shù)的具體定義吧,需要的朋友可以參考一下
    2021-12-12
  • 腳本收藏iframe

    腳本收藏iframe

    腳本收藏iframe...
    2006-07-07
  • 在Iframe中獲取父窗口中表單的值(示例代碼)

    在Iframe中獲取父窗口中表單的值(示例代碼)

    這篇文章主要介紹了在Iframe中獲取父窗口中表單的值(示例代碼)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-11-11
  • 解決bootstrap下拉菜單點(diǎn)擊立即隱藏bug的方法

    解決bootstrap下拉菜單點(diǎn)擊立即隱藏bug的方法

    本篇文章主要介紹了解決bootstrap下拉菜單點(diǎn)擊立即隱藏bug的方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-06-06
  • js格式化時(shí)間的簡(jiǎn)單實(shí)例

    js格式化時(shí)間的簡(jiǎn)單實(shí)例

    本文分享了js格式化時(shí)間的實(shí)例代碼,需要的朋友可以看下
    2016-11-11
  • Javascript File和Blob詳解

    Javascript File和Blob詳解

    這篇文章主要為大家介紹了Javascript File和Blob,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2021-12-12
  • 前端解決頁(yè)面請(qǐng)求接大規(guī)模并發(fā)問(wèn)題的代碼實(shí)現(xiàn)

    前端解決頁(yè)面請(qǐng)求接大規(guī)模并發(fā)問(wèn)題的代碼實(shí)現(xiàn)

    這篇文章主要介紹了前端解決大規(guī)模并發(fā)請(qǐng)求問(wèn)題的多種方法,包括按需加載、分頁(yè)與無(wú)限滾動(dòng)、緩存機(jī)制、減少HTTP請(qǐng)求、使用CDN、前端限流、異步加載、預(yù)加載、優(yōu)化資源大小、代碼分割以及服務(wù)器端渲染或靜態(tài)站點(diǎn)生成,需要的朋友可以參考下
    2024-11-11
  • 詳解MVC如何使用開(kāi)源分頁(yè)插件(shenniu.pager.js)

    詳解MVC如何使用開(kāi)源分頁(yè)插件(shenniu.pager.js)

    本文主要分享了shenniu.pager.js整個(gè)插件內(nèi)容,不多且清晰。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧
    2016-12-12
  • JScript中的"this"關(guān)鍵字使用方式補(bǔ)充材料

    JScript中的"this"關(guān)鍵字使用方式補(bǔ)充材料

    JScript中的"this"關(guān)鍵字使用方式補(bǔ)充材料...
    2007-03-03
  • 前端顯示json格式化示例代碼

    前端顯示json格式化示例代碼

    項(xiàng)目開(kāi)發(fā)過(guò)程中遇到JSON字符串回顯的情況,直接顯示的話效果很丑,不方便查看,因此需要在前端頁(yè)面對(duì)JSON進(jìn)行格式化顯示,下面這篇文章主要給大家介紹了關(guān)于前端顯示json格式化的相關(guān)資料,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

长子县| 大足县| 孝昌县| 铁岭市| 会理县| 孝感市| 台北县| 长葛市| 拉萨市| 池州市| 吴江市| 平原县| 伊吾县| 闽清县| 扶余县| 铅山县| 河北省| 延吉市| 丹江口市| 论坛| 五大连池市| 天峻县| 洛隆县| 寻甸| 灌云县| 贡山| 郸城县| 三明市| 塘沽区| 阿城市| 延边| 延安市| 东丽区| 高唐县| 两当县| 普安县| 兴山县| 岑巩县| 平定县| 凤台县| 天祝|