L’année dernière, j’avais parlé du gâchis des webcams avec un encodeur H.264. Pour plusieurs raisons (légitimes ou pas), les constructeurs avaient intégrés un encodeur H.264 dans certaines webcam au début des années 2010, avant d’abandonner cette fonction. Et je suis tombé sur une webcam avec cette fonction que je ne connaissais pas.
Dans un webcam classique, on travaille généralement avec une image compressée. C’est un truc que j’ai mis en avant avec la EyeToy, qui encode en MPEG-2, mais c’est à peu près généralisé. La majorité des webcams travaille en MJPEG, un codec assez basique : c’est une succession d’images JPEG. La raison est simple : la bande passante. En USB 1.1, on a seulement 12 Mb/s, et même en USB 2.0, les 480 Mb/s limitent. D’abord parce qu’on n’a pas la bande passante complète (et que la webcam peut la partager), ensuite parce que sans compression, une image en 720p nécessite par exemple 22 Mb (en 24 bits). Même le passage en USB 3.0 ne règle pas totalement le problème, pour une raison simple : un utilisateur peut brancher la caméra sur une prise USB 2.0.
Le MJPEG, ce n’est pas une solution géniale pour autant. Ça compresse assez peu, c’est parfois lourd à décoder et le gain en bande passante n’est pas si énorme. L’intégration du H.264, du coup, semblait être une bonne idée. L’image est généralement de meilleure qualité qu’en MJPEG, le flux a une bande passante plus faible et le décodage peut se faire matériellement. À partir de 2010, on peut partir du principe qu’un PC est capable de décoder le H.264, et donc l’occupation CPU est plus faible qu’en MJPEG. Un autre avantage, c’est qu’il est possible de transférer le flux directement en réseau.
Le H.264, il a tout de même un défaut : son coût. Faire un encodeur optimisé pour le temps réel et sans décalage, ça a un impact sur le prix. Logitech et d’autres ont abandonné le H.264 assez rapidement, avec un argument qui peut se tenir : la majorité des PC a un encodeur H.264, qui peut remplacer celui de la webcam. Mais c’est une réponse très biaisée : c’est efficace pour transmettre le flux en réseau, mais on retombe sur le problème du MJPEG : la qualité d’image.
La j5create JVCU100
Je suis tombé sur la JVCU100 de j5create dans un article de Low End Mac. C’est une webcam qui se trouve facilement et pour pas très cher (moins de 10 € d’occasion). Et en regardant la fiche technique, j’ai vu que le H.264 était listé. C’est un modèle USB 2.0 avec un capteur 1080p qui donne un résultat correct pour une webcam, et elle est donc bien H.264.
Elle fonctionne à la manière de la C920 de Logitech (dans sa première version) : sous GNU/Linux, on peut choisir entre un flux en YUYV (sans compression), un flux en MJPEG ou un flux H.264. Ça ne respecte pas totalement la norme, mais ça fonctionne. On peut travailler jusqu’en 1 920 x 1 080 à 30 images/s en MJPEG, avec un débit assez bas (37 Mb/s dans mes essais), jusqu’à la même définition en H.264 (débit de 8 Mb/s environ) et jusqu’en 1 280 x 720 à 10 images/s sans compression (il faut descendre en 640 x 480 pour 30 images/s).
La différence de qualité est assez nette sur la C920 de Logitech, c’est moins le cas ici, en tout cas en pleine lumière. Mais dès qu’il fait un peu sombre, on voit les limites du MJPEG. Ce n’est pas flagrant sur des captures redimensionnées et recompressées, mais il y a nettement moins de bruit numérique et d’artefacts en H.264.
Le principal problème, et c’est le même que pour la C920, c’est qu’il n’est pas évident d’accéder au flux H.264. La caméra propose les deux, mais les outils ne permettent généralement pas de choisir. Sous GNU/Linux, on peut le forcer manuellement (j’avais expliqué la méthode), mais pas sous macOS à ma connaissance. macOS ne permet même pas de modifier réellement la définition : le système lui-même ne propose aucun réglages, et les rares outils ne proposent pas de changer de définition ou de flux. Je ne sais pas si c’est une limite de macOS, mais on ne peut pas choisir. Et macOS, par défaut, prend habituellement le MJPEG dans la définition la plus élevée (mais pas toujours).
C’est probablement aussi une des raisons de l’abandon de la technologie : sans prise en charge, ça ne sert à rien et ça augmente le prix.







