Get to know MDN better
Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.
Depuis October 2024, cette fonctionnalité fonctionne sur les appareils et les versions de navigateur les plus récents. Elle peut ne pas fonctionner sur les appareils ou navigateurs plus anciens.
La méthode requestVideoFrameCallback() de l'interface HTMLVideoElement enregistre une fonction de rappel qui s'exécute lorsqu'une nouvelle trame vidéo est envoyée au compositeur. Cela permet aux développeur·euse·s d'effectuer des opérations efficaces sur chaque trame vidéo.
La fonction de rappel qui s'exécute lorsqu'une nouvelle trame vidéo est envoyée au compositeur. Elle contient deux paramètres :
nowUn objet DOMHighResTimeStamp représentant le moment où la fonction de rappel a été appelée.
metadataUn objet contenant les propriétés suivantes :
expectedDisplayTimeUn objet DOMHighResTimeStamp représentant le moment où le navigateur attend que la trame soit visible.
heightUn nombre, en pixels média, représentant la hauteur de la trame vidéo (les pixels décodés visibles, sans ajustement du rapport d'affichage).
mediaTimeUn nombre, en secondes, représentant l'horodatage de présentation du média pour la trame affichée. Cela correspond à l'horodatage de la trame sur la chronologie de HTMLMediaElement.currentTime.
presentationTimeUn objet DOMHighResTimeStamp représentant le moment où le navigateur a soumis la trame pour composition.
presentedFramesUn nombre représentant le nombre de trames soumises à la composition jusqu'à présent avec la fonction de rappel courante. Cela peut être utilisé pour détecter si des trames ont été manquées entre les instances de la fonction de rappel.
processingDurationUn nombre, en secondes, représentant la durée entre la soumission du paquet encodé avec le même horodatage de présentation que cette trame au décodeur (c'est-à-dire le mediaTime) et le moment où la trame décodée est prête à être présentée.
widthUn nombre, en pixels média, représentant la largeur de la trame vidéo (les pixels décodés visibles, sans ajustement du rapport d'affichage).
Des propriétés de métadonnées supplémentaires peuvent être disponibles dans les fonctions de rappel requestVideoFrameCallback() utilisées dans des applications WebRTC :
captureTimeUn objet DOMHighResTimeStamp représentant le moment où la trame a été capturée. Cela s'applique aux trames vidéo provenant d'une source locale ou distante. Pour une source distante, le moment de capture est estimé à l'aide de la synchronisation des horloges et des rapports d'expéditeur RTCP pour convertir les horodatages RTP en moment de capture.
receiveTimeUn objet DOMHighResTimeStamp représentant le moment où la trame encodée a été reçue par la plateforme. Cela s'applique aux trames vidéo provenant d'une source distante. Plus précisément, cela correspond au moment où le dernier paquet appartenant à cette trame a été reçu sur le réseau.
rtpTimestampUn nombre représentant l'horodatage RTP associé à cette trame vidéo.
Note : width et height peuvent différer de HTMLVideoElement.videoWidth et HTMLVideoElement.videoHeight dans certains cas (par exemple, une vidéo anamorphique peut avoir des pixels rectangulaires).
Un nombre représentant un identifiant unique de fonction de rappel.
Celui-ci peut être transmis à HTMLVideoElement.cancelVideoFrameCallback() pour annuler l'enregistrement de la fonction de rappel.
Les cas d'utilisation typiques de requestVideoFrameCallback() incluent le traitement vidéo et le dessin sur un canevas, l'analyse vidéo et la synchronisation avec des sources audio externes. Le traitement image par image était auparavant effectué de manière moins efficace ou précise en exécutant des opérations sur l'affichage vidéo courant à chaque déclenchement de l'évènement timeupdate. Cette technique ne permettait pas d'accéder aux véritables trames vidéo.
requestVideoFrameCallback() s'utilise de la même manière que Window.requestAnimationFrame(). Vous l'utilisez pour exécuter une fonction de rappel qui réalise une opération lorsque la prochaine trame vidéo est envoyée au compositeur. La fonction de rappel se termine en appelant à nouveau requestVideoFrameCallback() pour exécuter la fonction lors de la composition de la prochaine trame vidéo, et ainsi de suite. Cependant, requestVideoFrameCallback() est adapté aux opérations vidéo de plusieurs façons :
Il faut garder à l'esprit que requestVideoFrameCallback() n'offre aucune garantie stricte que le résultat de votre fonction de rappel restera synchronisé avec la fréquence des trames vidéo. Il peut être déclenché avec un retard de synchronisation verticale par rapport à la présentation de la nouvelle trame vidéo. (La synchronisation verticale est une technologie graphique qui synchronise la fréquence des trames vidéo avec la fréquence de rafraîchissement d'un moniteur.)
L'API s'exécute sur le fil principal, tandis que la composition vidéo se produit probablement sur un fil de composition séparé. Il faut tenir compte du temps nécessaire à l'exécution de ces opérations, ainsi que du temps requis pour que la vidéo elle-même et le résultat de votre opération requestVideoFrameCallback() s'affichent à l'écran.
Vous pouvez comparer le paramètre now de la fonction de rappel et la propriété de métadonnées expectedDisplayTime pour déterminer si votre fonction de rappel est décalée par rapport à la synchronisation verticale. Si expectedDisplayTime est à environ cinq à dix microsecondes de now, la trame est déjà rendue. Si expectedDisplayTime est environ seize millisecondes dans le futur (en supposant que votre navigateur/écran se rafraîchit à 60Hz), alors la fonction de rappel est décalée par rapport à la synchronisation verticale.
Cet exemple montre comment utiliser requestVideoFrameCallback() pour dessiner les trames d'une vidéo sur un élément HTML <canvas> exactement au même rythme que la vidéo. Il affiche également les métadonnées des trames à l'écran pour le débogage.
| HTMLVideoElement.requestVideoFrameCallback() # dom-htmlvideoelement-requestvideoframecallback |
Activez JavaScript pour afficher ce tableau de compatibilité des navigateurs.
Cette page a été modifiée le 20 janv. 2026 par les contributeur·ice·s du MDN.
Votre modèle pour un internet meilleur.
Visitez la société mère à but non lucratif de Mozilla Corporation, la Fondation Mozilla.
Certaines parties de ce contenu sont protégées par le droit d'auteur ©1998—2026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.