Baseline 2024
Newly available
requestVideoFrameCallback()
㯠HTMLVideoElement
ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ã¡ã½ããã§ãæ°ããæ åãã¬ã¼ã ãåæã¨ã³ã¸ã³ã«éä¿¡ãããéã«å®è¡ãããã³ã¼ã«ããã¯é¢æ°ãç»é²ãã¾ããããã«ãããéçºè
ã¯åæ åãã¬ã¼ã ã«å¯¾ãã¦å¹ççãªæä½ãè¡ããã¨ãã§ãã¾ãã
requestVideoFrameCallback()
ã®ãããã使ç¨ä¾ã¨ãã¦ã¯ãæ åå¦çããã£ã³ãã¹ã¸ã®æç»ãæ ååæãå¤é¨ãªã¼ãã£ãªã½ã¼ã¹ã¨ã®åæãªã©ãããã¾ãã ãã¬ã¼ã ãã¨ã®å¦çã¯ãtimeupdate
ã¤ãã³ããçºçãããã³ã«ç¾å¨ã®æ å表示ä¸ã§æä½ãå®è¡ãããã¨ã§ãå¹çã精度ãä½ãæ¹æ³ã§è¡ããã¦ãã¾ããã ãã®æ¹æ³ã§ã¯ãå®éã®æ åãã¬ã¼ã ã¸ã®ã¢ã¯ã»ã¹ã¯ã§ãã¾ããã§ããã
requestVideoFrameCallback()
ã¯ãWindow.requestAnimationFrame()
ã¨åæ§ã«ä½¿ç¨ãã¾ãããã®é¢æ°ã使ç¨ããã¨ãæ¬¡ã®æ åãã¬ã¼ã ãåæã¨ã³ã¸ã³ã«éä¿¡ãããéã«ä½ããã®å¦çãè¡ãã³ã¼ã«ããã¯é¢æ°ãå®è¡ãããã¨ãã§ãã¾ããã³ã¼ã«ããã¯é¢æ°ã¯ãæ¬¡ã®æ åãã¬ã¼ã ãåæãããéã«ã³ã¼ã«ããã¯é¢æ°ãå®è¡ããããã«åã³ requestVideoFrameCallback()
ãå¼ã³åºããã¨ã§çµäºãã¾ããããããrequestVideoFrameCallback()
ã¯ãããã¤ãã®ç¹ã§æ åæä½ç¨ã«èª¿æ´ããã¦ãã¾ãã
requestVideoFrameCallback()
ã¯ãåã
ã®æ åãã¬ã¼ã ã¸ã®ä¿¡é ¼æ§ã®é«ãã¢ã¯ã»ã¹ãæä¾ãã¾ããrequestAnimationFrame()
ã¯ãé常 60Hz ã§ããç»é¢ã®ãªãã¬ãã·ã¥ã¬ã¼ãã«åããããã¨ãã¾ãã䏿¹ãrequestVideoFrameCallback()
ã¯ãæ åã®ãã¬ã¼ã ã¬ã¼ãã«åããããã¨ãã¾ããããå
·ä½çã«ã¯ãã³ã¼ã«ããã¯ã¯æ åã®ãã¬ã¼ã ã¬ã¼ãã¨ãã©ã¦ã¶ã¼ã®æç»ãªãã¬ãã·ã¥ã¬ã¼ãã®ãã¡ãä½ãæ¹ã®ã¬ã¼ãã§å®è¡ããã¾ããä¾ãã°ããã¬ã¼ã ã¬ã¼ãã 25fps ã®åç»ãã60Hz ã§æç»ãããã©ã¦ã¶ã¼ã§åçããã¦ããå ´åãã³ã¼ã«ããã¯ã¯ 25Hz ã®ã¬ã¼ãã§å®è¡ããã¾ããåã 60Hz ã®ãã©ã¦ã¶ã¼ã§ãã¬ã¼ã ã¬ã¼ãã 120 fpsã®åç»ãåçããã¦ããå ´åãã³ã¼ã«ããã¯ã¯ 60Hz ã®ã¬ã¼ãã§å®è¡ããã¾ããrequestVideoFrameCallback()
ã¯ãã³ã¼ã«ããã¯é¢æ°ã§æç¨ãªåç»ã¡ã¿ãã¼ã¿ãåå¾ãã¾ããçæãã¹ãç¹ã¨ãã¦ãrequestVideoFrameCallback()
ã¯ãã³ã¼ã«ããã¯ããã®åºåãæ åã®ãã¬ã¼ã ã¬ã¼ãã¨åæããç¶æ
ãå³å¯ã«ä¿è¨¼ãããã®ã§ã¯ããã¾ãããæ°ããæ åãã¬ã¼ã ãæç¤ºãããæç¹ããããåç´åæ (V-sync) ã 1 ååé
ãã¦ã³ã¼ã«ããã¯ãå®è¡ãããå¯è½æ§ãããã¾ããï¼V-sync ã¯ãæ åã®ãã¬ã¼ã ã¬ã¼ããã¢ãã¿ã¼ã®ãªãã¬ãã·ã¥ã¬ã¼ãã¨åæãããã°ã©ãã£ãã¯æè¡ã§ããï¼
API ã¯ã¡ã¤ã³ã¹ã¬ããä¸ã§å®è¡ããã¾ãããæ ååæã¯å¥ã®åæã¹ã¬ããä¸ã§å®è¡ãããå¯è½æ§ãé«ãã§ãããããã®æä½ãå®äºããã¾ã§ã«è¦ããæéãããã³æ åèªä½ã¨ requestVideoFrameCallback()
æä½ã®çµæãç»é¢ã«è¡¨ç¤ºãããã¾ã§ã«è¦ããæéãèæ
®ããå¿
è¦ãããã¾ãã
now
ã³ã¼ã«ããã¯å¼æ°ã¨ expectedDisplayTime
ã¡ã¿ãã¼ã¿ããããã£ãæ¯è¼ãã¦ãã³ã¼ã«ããã¯ã v-sync ã«é
ãã¦ããªããã©ããã夿ã§ãã¾ãã expectedDisplayTime
ã now
ããç´ 5 ï½ 10 ããªç§ä»¥å
ã§ããã°ããã¬ã¼ã ã¯ãã§ã«ã¬ã³ããªã³ã°ããã¦ãã¾ãã expectedDisplayTime
ãç´ 16 ããªç§ã»ã©æªæ¥ã§ããã°ï¼ãã©ã¦ã¶ã¼/ç»é¢ã 60Hz ã§ãªãã¬ãã·ã¥ãã¦ããã¨ä»®å®ããå ´åï¼ãã³ã¼ã«ããã¯ã¯ v-sync ã¢ã¦ãã§ãã
requestVideoFrameCallback(callback)
弿°
callback
æ°ããæ åãã¬ã¼ã ãåæã¨ã³ã¸ã³ã«éä¿¡ãããéã«å®è¡ãããã³ã¼ã«ããã¯é¢æ°ãããã«ã¯ 2 ã¤ã®å¼æ°ãå«ã¾ãã¦ãã¾ãã
now
ã³ã¼ã«ããã¯ãå¼ã³åºãããæå»ã表ã DOMHighResTimeStamp
ã§ãã
metadata
以ä¸ã®ããããã£ãæã¤ãªãã¸ã§ã¯ãã§ãã
expectedDisplayTime
: ãã©ã¦ã¶ã¼ããã¬ã¼ã ã®è¡¨ç¤ºãæå¾
ããæå»ã表ã DOMHighResTimeStamp
ã§ããheight
: ã¡ãã£ã¢ãã¯ã»ã«æ°ã§è¡¨ããæ°å¤ã§ãæ åãã¬ã¼ã ã®ç¸¦ã®é·ãï¼ã¢ã¹ãã¯ãæ¯ã®èª¿æ´ãªãã§è¡¨ç¤ºå¯è½ãªãã³ã¼ãæ¸ã¿ãã¯ã»ã«ï¼ã表ãã¾ããmediaTime
: æç¤ºããããã¬ã¼ã ã®ã¡ãã£ã¢ãã¬ã¼ã³ãã¼ã·ã§ã³ã¿ã¤ã ã¹ã¿ã³ãã表ãç§åä½ã®æ°å¤ãããã¯ãHTMLMediaElement.currentTime
ã¿ã¤ã ã©ã¤ã³ä¸ã®ãã¬ã¼ã ã®ã¿ã¤ã ã¹ã¿ã³ãã¨ç価ã§ããpresentationTime
: ãã©ã¦ã¶ã¼ããã¬ã¼ã ãåæã®ããã«éä¿¡ããæå»ã表ã DOMHighResTimeStamp
ã§ããpresentedFrames
: ç¾å¨ã®ã³ã¼ã«ããã¯ã¨ã¨ãã«ãããã¾ã§ã«æ§æç¨ã«éä¿¡ããããã¬ã¼ã æ°ãè¡¨ãæ°å¤ãããã¯ãã³ã¼ã«ããã¯ã®ã¤ã³ã¹ã¿ã³ã¹éã§ãã¬ã¼ã ãæ¬ è½ãã¦ãããã©ãããæ¤åºããããã«ä½¿ç¨ã§ãã¾ããprocessingDuration
: ãã®ãã¬ã¼ã ã¨åããã¬ã¼ã³ãã¼ã·ã§ã³ã¿ã¤ã ã¹ã¿ã³ããæã¤ã¨ã³ã³ã¼ãããããã±ããããã³ã¼ãã¼ã«éä¿¡ããã¦ããï¼ããªãã¡ãmediaTime
ï¼ããã³ã¼ãããããã¬ã¼ã ãæç¤ºå¯è½ãªç¶æ
ã«ãªãã¾ã§ã®æéãç§æ°ã§è¡¨ããæ°å¤ã§ããwidth
: ã¡ãã£ã¢ãã¯ã»ã«æ°ã§è¡¨ããæ°å¤ã§ãæ åãã¬ã¼ã ã®å¹
ï¼ã¢ã¹ãã¯ãæ¯ã®èª¿æ´ãªãã§è¡¨ç¤ºå¯è½ãªãã³ã¼ãæ¸ã¿ãã¯ã»ã«ï¼ã表ãã¾ããWebRTC ã¢ããªã±ã¼ã·ã§ã³ã§ä½¿ç¨ããã requestVideoFrameCallback()
ã³ã¼ã«ããã¯å
ã§ã¯ã追å ã®ã¡ã¿ãã¼ã¿ããããã£ãå©ç¨ã§ããå ´åãããã¾ãã
captureTime
: ãã¬ã¼ã ããã£ããã£ãããæå»ã表ã DOMHighResTimeStamp
ã§ããããã¯ããã¼ã«ã«ã¾ãã¯ãªã¢ã¼ãã½ã¼ã¹ããã®æ åãã¬ã¼ã ã«é©ç¨ããã¾ãããªã¢ã¼ãã½ã¼ã¹ã®å ´åããã£ããã£æå»ã¯ãã¯ããã¯åæã¨ RTCP éä¿¡è
ã¬ãã¼ãã使ç¨ã㦠RTP ã¿ã¤ã ã¹ã¿ã³ãããã£ããã£æå»ã«å¤æãããã¨ã§æ¨å®ããã¾ããreceiveTime
: ãã©ãããã©ã¼ã ãã¨ã³ã³ã¼ãããããã¬ã¼ã ãåä¿¡ããæå»ã表ã DOMHighResTimeStamp
ã§ããããã¯ãªã¢ã¼ãã½ã¼ã¹ããã®æ åãã¬ã¼ã ã«é©ç¨ããã¾ããå
·ä½çã«ã¯ããã®ãã¬ã¼ã ã«å±ããæå¾ã®ãã±ããããããã¯ã¼ã¯çµç±ã§åä¿¡ãããæå»ã«å¯¾å¿ãã¾ããrtpTimestamp
: ãã®æ åãã¬ã¼ã ã«ä»éãã RTP ã¿ã¤ã ã¹ã¿ã³ããè¡¨ãæ°å¤ã§ããã¡ã¢: width
㨠height
ã¯ãå ´åã«ãã£ã¦ã¯ HTMLVideoElement.videoWidth
ããã³ HTMLVideoElement.videoHeight
ã¨ç°ãªãå ´åãããã¾ãï¼ä¾ãã°ãã¢ãã¢ãã£ãã¯åç»ã¯é·æ¹å½¢ã®ãã¯ã»ã«ãæã¤ãã¨ãããã¾ãï¼ã
䏿ã®ã³ã¼ã«ãã㯠ID ã表ãçªå·ã
ããã¯ãHTMLVideoElement.cancelVideoFrameCallback()
ã«æ¸¡ããã¨ã§ãã³ã¼ã«ããã¯ç»é²ããã£ã³ã»ã«ãããã¨ãã§ãã¾ãã
ãã®ä¾ã§ã¯ãrequestVideoFrameCallback()
ã使ç¨ãã¦ãæ åã®ãã¬ã¼ã ãæ åã¨ã¾ã£ããåããã¬ã¼ã ã¬ã¼ãã§ <canvas>
è¦ç´ ã«æç»ããæ¹æ³ã表示ããã¦ãã¾ããã¾ãããããã°ç®çã§ãã¬ã¼ã ã®ã¡ã¿ãã¼ã¿ã DOM ã«ãã°åºåãã¦ãã¾ãã
if ("requestVideoFrameCallback" in HTMLVideoElement.prototype) {
let paintCount = 0;
let startTime = 0.0;
const updateCanvas = (now, metadata) => {
if (startTime === 0.0) {
startTime = now;
}
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const elapsed = (now - startTime) / 1000.0;
const fps = (++paintCount / elapsed).toFixed(3);
fpsInfo.innerText = `video fps: ${fps}`;
metadataInfo.innerText = JSON.stringify(metadata, null, 2);
// 次ã®ãã¬ã¼ã ã§åä½ããããã«ã³ã¼ã«ããã¯ãåç»é²ãã
video.requestVideoFrameCallback(updateCanvas);
};
// æåã®ãã¬ã¼ã ã§åä½ããã³ã¼ã«ããã¯ã®åæç»é²
video.requestVideoFrameCallback(updateCanvas);
} else {
alert("ãã®ãã©ã¦ã¶ã¼ã¯ requestVideoFrameCallback() ã«å¯¾å¿ãã¦ãã¾ããã");
}
ä¸è¨ã®ã³ã¼ãã®åä½ããå®è£ ã«ã¤ãã¦ã¯ã requestVideoFrameCallback ã㢠ãåç §ãã¦ãã ããã
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ å ±RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4