Latence et performances
Environ 60 ms de la caméra à OBS en USB, en 1080p comme en 4K ; en Wi-Fi, c’est plus élevé et plus variable. La valeur est mesurée en continu, pas estimée, et affichée dans le champ État, la barre d’état et le journal.
D’où vient le délai#
| Étape | Environ | Remarques |
|---|---|---|
| Capture et exposition | Une image | Les scènes plus lumineuses s’exposent plus vite, et cela se voit ici. |
| Encodage matériel | Quelques ms | VideoToolbox. Rien à régler. |
| La liaison | USB : faible, stable. Wi-Fi : variable | L’étape qui distingue une bonne installation d’une installation frustrante. |
| Décodage | Quelques ms | GPU par défaut, repli logiciel automatique. |
| Arrivée dans votre scène | Moins d’une milliseconde avec le pipeline GPU | Sinon, une copie hors de la mémoire GPU, puis retour. |
La réduire#
- Utilisez l’USB. Le plus régulier, insensible à l’encombrement du Wi-Fi, et il recharge le téléphone.
- Éclairez la scène. Une pièce sombre allonge l’exposition, ce qui s’ajoute directement au budget de latence.
- Gardez les réglages par défaut. Le mode faible latence et le décodage matériel sont activés d’origine.
- Ne visez pas plus haut que nécessaire. Si le plan est un face caméra de 1000 px de large dans votre scène, le 1080p n’est pas un compromis.
- Utilisez le téléobjectif plutôt qu’un fort zoom numérique. Une vidéo zoomée et bruitée se compresse mal, ce qui se traduit par des pics de débit et de latence.
En cas de congestion, les images sont abandonnées, pas mises en file d’attente. Quand la liaison cale, LensLink abandonne des images et baisse brièvement la qualité plutôt que d’accumuler du retard : la latence reste stable au lieu de dériver au fil de la diffusion.
Surveiller les chiffres#
- Barre d’état d’OBS :
LensLink: iPhone 60 fps · 11.9 Mb/s · 43 ms, une entrée par source en direct. - Le dock LensLink (Afficher → Docks) : une ligne par source.
- Sur le téléphone : Statistiques, dans le menu d’état de l’écran de direct, affiche la même ligne. Avec Image seule comme vue au repos, elle reste volontairement visible quand les commandes s’effacent.
- Le champ État indique la latence mesurée de la capture au décodage pendant la connexion.
La valeur est réelle : un échange de décalage d’horloge de type NTP a lieu chaque seconde, et c’est aussi ce qui rend possible la synchronisation labiale automatique.
Le pipeline de décodage GPU (bêta)#
Normalement, chaque image décodée est téléchargée du GPU vers la mémoire système, confiée à OBS, puis renvoyée aussitôt au GPU pour la composition : environ 2 GB/s de pixels en 4K60, pour rien. Le pipeline bêta transmet l’image à OBS sous forme de texture et évite cet aller-retour.
Outils → Paramètres LensLink. Toutes les sources basculent ensemble, après un redémarrage d’OBS.
Résultats mesurés#
Douze configurations, environ 25 s de vidéo en direct chacune, même PC et même téléphone en Wi-Fi. Les copies de pixels affichent 0,00 MB/s sur chaque essai avec le pipeline GPU.
| Config. | Coût par image (ms) | Copies de pixels (MB/s) | CPU d’OBS |
|---|---|---|---|
| 720p 60 HEVC | 0,81 → 0,09 | 163 → 0 | 2,2 % → 1,4 % |
| 1080p 60 H.264 | 2,11 → 0,10 | 370 → 0 | 2,3 % → 1,6 % |
| 1080p 60 HEVC | 1,42 → 0,09 | 373 → 0 | 2,6 % → 1,4 % |
| 4K 30 HEVC | 4,96 → 0,14 | 721 → 0 | 2,9 % → 1,5 % |
| 4K 60 H.264 | 7,54 → 0,10 | 1221 → 0 | 4,1 % → 1,8 % |
| 4K 60 HEVC | 4,75 → 0,10 | 1439 → 0 | 4,1 % → 1,6 % |
Le coût par image baisse de 89 à 99 %, et le gain croît avec la résolution : en 4K60 HEVC, le pipeline standard faisait transiter environ 1,4 GB/s par la mémoire système ; celui-ci supprime purement et simplement ce trafic, ce qui divise à peu près par deux le CPU du processus OBS. La latence et la fréquence d’images n’ont montré aucune différence systématique : elles dépendent du réseau et de l’encodeur du téléphone, pas du chemin de rendu.
Notes par plateforme#
| Windows | Tout système pris en charge par OBS 32 (Windows 10 1909+), via des textures D3D11 partagées. |
| macOS | Tout système pris en charge par OBS 32 (macOS 13+), via IOSurface. Les flux 10 bits font exception : VideoToolbox les convertit lui-même en 8 bits, si bien que le HDR et Apple Log passent par le chemin standard plutôt que par celui-ci. |
| Linux | Nécessite OBS sous EGL (par défaut sous Wayland et dans les versions X11 actuelles) et un pilote VAAPI, intégré à Mesa pour Intel et AMD ; NVIDIA nécessite nvidia-vaapi-driver. |
| Multi-GPU | Un décodage et un rendu sur des GPU différents ne peuvent pas partager de textures ; la source se replie automatiquement. |
Le repli se fait source par source, automatiquement : dans le pire des cas, vous obtenez exactement le pipeline standard, avec une ligne dans le journal qui explique pourquoi.
La marque du GPU compte-t-elle ?#
Moins que le système d’exploitation. Le décodage est un bloc à fonction fixe sur tous les GPU modernes, et le plugin le demande à l’API propre à la plateforme plutôt qu’à une interface spécifique à un fabricant.
| Windows | Indépendant du fabricant. D3D11VA sur tout GPU actuel, DXVA2 en repli. |
| macOS | VideoToolbox, sur les Mac Apple silicon comme sur les Mac Intel. |
| Linux, Intel ou AMD | VAAPI est déjà dans Mesa : rien à installer. |
| Linux, NVIDIA | Nécessite nvidia-vaapi-driver ; VDPAU sert de repli. C’est le seul cas où la marque décide si le pipeline GPU s’active ou non. |
| Portables à deux GPU | Si le décodage se fait sur l’un et le rendu d’OBS sur l’autre, les textures ne peuvent pas être partagées et la source se replie d’elle-même. |
| GPU plus anciens | Un GPU sans décodeur HEVC Main10 repasse en décodage logiciel pour les flux 10 bits ; le 8 bits n’est pas concerné. |
Plusieurs téléphones à la fois, c’est une charge de décodage, pas d’encodage. La limite de NVIDIA sur le nombre de sessions NVENC simultanées ne s’applique pas : rien n’est encodé sur l’ordinateur. Ce qui vous limite, c’est le débit de décodage et la bande passante mémoire, précisément ce qu’économise le pipeline GPU.
Les mesures ci-dessus proviennent d’une seule machine Windows équipée d’une
carte NVIDIA. Le pipeline est en bêta notamment parce que les autres
combinaisons (IOSurface sous macOS, VAAPI de Mesa,
nvidia-vaapi-driver et le repli multi-GPU) ont davantage besoin de
retours du terrain que de code supplémentaire.
Mesurer vous-même#
Outils → Paramètres LensLink → Enregistrer un benchmark du pipeline écrit une ligne CSV par seconde dans le dossier de configuration du plugin (chemin indiqué dans le journal), plus un résumé toutes les cinq secondes. Diffusez dix secondes avec chaque configuration, puis comparez une paire :
python3 tools/bench-report.py BEFORE.csv AFTER.csv
Toute modification des performances proposée à LensLink doit citer l’une de ces comparaisons.