- 1fps.video est un outil de partage d’écran par lien, qui démarre immédiatement sous forme de binaire unique, conçu pour les collaborations où il faut surtout regarder un écran plutôt que tenir une réunion, comme chez les développeurs, les équipes IT et les spécialistes de la sécurité
- Partant du principe qu’un faible FPS suffit souvent pour la collaboration autour du code, il réduit l’utilisation du CPU, de la mémoire et du réseau et allège la charge sur les vieux ordinateurs portables
- L’écran est partagé à 1 FPS, mais le suivi du curseur basé sur WebSocket affiche les mouvements du pointeur à près de 30 FPS, ce qui compense pour les démonstrations précises
- Offre un chiffrement de bout en bout ; la clé générée côté client est placée après le
#dans l’URL et n’est pas envoyée au backend - Met l’accent sur les longues sessions et le partage à faible trafic grâce à la prise en charge de plusieurs moniteurs, au réglage de la qualité d’image et de la taille de capture, ainsi qu’à l’omission de l’envoi lorsque l’écran n’a pas changé
Le partage d’écran à 1 FPS
- 1fps.video est un outil qui permet de lancer rapidement un partage d’écran ; le binaire est disponible dans Download
- Il s’adresse principalement aux développeurs, aux équipes IT, aux spécialistes de la sécurité et aux utilisateurs qui préfèrent collaborer sans réunion
- Il part du principe qu’un partage d’écran à faible FPS suffit souvent pour la plupart des tâches collaboratives, en particulier pour les développeurs qui passent beaucoup de temps à écrire du code
- Cette approche vise à réduire les ressources et le trafic
- Elle favorise une culture sans réunion, sans besoin d’audio
- Elle réduit fortement l’utilisation du CPU, de la mémoire et du réseau
- Même les vieux ordinateurs portables peuvent mieux fonctionner pendant le partage d’écran
- La faible consommation de ressources la rend plus respectueuse de l’environnement
- L’environnement de partage peut être ajusté selon les conditions réseau
- Prise en charge du partage sur plusieurs moniteurs
- Possibilité d’ajuster la qualité d’image pour optimiser l’utilisation du trafic
- Sur les grands écrans, la taille de capture peut être ajustée afin de réduire encore le trafic
- Utilise une comparaison intelligente de l’écran pour éviter les transferts de données inutiles lorsque l’écran ne change pas
Sécurité, confidentialité et modèle de partage
- Pour la plupart des travaux de codage et de développement, 1 FPS est considéré comme suffisant, tandis que les mouvements du curseur sont fournis à près de 30 FPS grâce à un suivi basé sur WebSocket
- Convient aux utilisateurs introvertis et aux télétravailleurs qui souhaitent uniquement partager leur écran, sans appel audio ni vidéo
- Peut être utilisé avec les applications de chat d’équipe existantes, et les options de réglage multi-moniteurs, qualité d’image et taille d’écran permettent d’adapter l’expérience de partage aux conditions réseau
- L’architecture de confidentialité et de sécurité repose sur des liens et une gestion des clés côté client
- Toutes les données sont chiffrées de bout en bout
- La clé de chiffrement est générée côté client et n’est pas envoyée au serveur
- La clé est incluse après le
#dans l’URL et n’est donc pas transmise au backend - Seules les personnes disposant du lien complet peuvent accéder à l’écran partagé
- La comparaison de l’écran renforce la confidentialité en minimisant les transferts de données
- Le chiffrement des coordonnées du curseur est actuellement en cours de développement
- Le code source est disponible dans Source Code
1 commentaires
Avis de Hacker News
Bravo pour la publication du projet. L’idée est sympa et étonnamment minimaliste, mais je vois dans le code plusieurs failles cryptographiques, donc il ne faut pas l’utiliser dans des situations où le chiffrement est essentiel.
[0]: https://github.com/1fpsvideo/1fps/blob/main/1fps.go#L99
[1]: https://github.com/1fpsvideo/1fps/blob/main/1fps.go#L287
[2]: https://eprint.iacr.org/2016/475.pdf
[3]: https://soatok.blog/2020/05/13/why-aes-gcm-sucks/
Dans ce cas, je me demande si la principale raison de ne pas simplement corriger le problème de nonce tient aux pièges d’implémentation, ou si c’est lié plus subtilement aux problèmes généraux évoqués dans les articles ci-dessus.
Vu naïvement, AES-GCM est utilisé dans beaucoup d’endroits comme TLS ou SRTP, donc quelqu’un qui ne connaît pas bien la cryptographie peut penser que c’est un bon choix.
En regardant le code, il semble prendre et envoyer une capture d’écran (.jpg) chaque seconde. Je me demande si cette approche économise réellement de la bande passante par rapport à une compression vidéo moderne qui réutilise les informations des images précédentes.
J’ai enregistré une vidéo d’une minute où j’édite du code dans VS Code, en 1440p à 10 fps avec encodage AV1, et elle faisait environ la moitié de la taille de 60 captures d’écran JPEG du même écran. Je serais curieux de voir des chiffres si vous en avez testé.
Les captures prenaient beaucoup d’espace disque, et en voyant qu’il y avait très peu de changements entre deux images, j’ai imaginé un algorithme qui ne stockerait que les différences avec l’image suivante. Quelques minutes plus tard, j’ai réalisé que j’étais en train de réinventer la compression vidéo.
J’ai donc converti la séquence d’images en mp4 avec ffmpeg, et la taille du fichier a diminué d’environ 95 %. Avec ImageMagick, j’ai incrusté dans l’image les noms de fichiers horodatés ; au fond, je crois avoir recréé les fonctionnalités de TimeSnapper Classic avec deux commandes.
D’un côté il y a l’utilisation CPU, de l’autre le réseau. À mon avis, le réseau est bon marché mais l’encodage est coûteux. Je n’ai pas de preuve, seulement des essais locaux, mais commencer à mesurer serait vraiment une très bonne idée.
Il y a aussi une autre idée : scanner l’écran et n’envoyer que les parties modifiées. Même en n’envoyant que la moitié de l’écran, je pense qu’on pourrait battre l’encodage vidéo côté réseau. En revanche, l’algorithme de diff doit être très rapide. En 1280x720, cela fait 914400 pixels, et à 4 octets chacun, il faut traiter 3,49 Mo d’informations par seconde.
Je suis aussi curieux de comparer l’efficacité de l’encodage vidéo au coût de génération de 60 JPEG. Les deux sont-ils comparables ?
On pourrait facilement faire les deux si on le voulait, mais je ne sais pas si cela vaut la peine de s’ajouter cette complexité. Je suis d’accord pour dire que cette approche pourrait devenir difficile à tenir si ça passe à l’échelle depuis la même IP.
Ça me plaît
Notre flux de travail est pensé pour éliminer le besoin de bureaux et d’infrastructure technique. On diffuse en temps réel les sorties de timeline, c’est-à-dire les résultats de montage vidéo, et on garde un canal de communication ouvert. La plupart des membres de l’équipe sont plutôt introvertis, donc c’est en push-to-talk, et s’il n’y a pas besoin d’une discussion générale, on se contente généralement de laisser des notes dans le chat
Les solutions rudimentaires finissent souvent par être adoptées
Quels sont les cas d’usage du partage d’écran sans audio ? Je ne vois pas bien quand ce serait utile. De toute façon, il faut bien communiquer avec l’autre personne d’une manière ou d’une autre, non ?
Même pendant de longues réunions, il arrive qu’on ait besoin que le partage d’écran reste actif. Parfois, on préfère coder plutôt que rester assis à écouter une réunion d’une ou deux heures
Et ça convient aussi aux gens comme moi qui n’aiment pas l’audio. J’ai beaucoup d’étudiants que j’aimerais aider, mais je n’ai pas envie d’y ajouter l’audio. Mon chat vocal n’est pas une ressource qui se parallélise bien
Cela ressemble davantage à envoyer des captures d’écran tout en discutant par texte qu’à un « partage d’écran pendant un appel vocal ». Je comprends pourquoi certaines personnes peuvent préférer ça
À propos de la partie « J’en ai marre du partage d’écran parce que Google Meet est limité à 1 heure et Zoom à 40 minutes », jitsi[0] est une alternative de visioconférence open source[1] basée sur WebRTC. C’est un substitut assez complet à des outils comme Zoom, Google Meet ou Slack
On peut l’utiliser sur le site principal, ou l’auto-héberger si on le souhaite
[0]: https://meet.jit.si/
[1]: https://github.com/jitsi
[1] https://github.com/strukturag/nextcloud-spreed-signaling
Il pourrait être intéressant de créer une heuristique pour choisir quelle frame utiliser. Prendre systématiquement la frame la plus récente au hasard n’est probablement pas idéal ; il vaudrait peut-être mieux choisir une frame avec peu de mouvement, sans animation en cours, ou selon des métriques similaires
Pour aller plus loin, on pourrait aussi analyser fenêtre par fenêtre, puis construire une forme d’agrégation pour l’ensemble de la frame
C’est une idée intéressante, et j’ai entendu dire qu’aux échecs, une idée similaire s’appelle la recherche de quiescence (quiescence search)[1], mais ça ne vaut probablement pas l’effort
[0] https://old.reddit.com/r/Android/comments/11nzrb0/samsung_sp...
[1] https://en.wikipedia.org/wiki/Quiescence_search
Cela dit, ça ressemble à une excellente idée et à un problème intéressant
J’ai une erreur de compilation dans
github.com/go-vgo/robotgoindiquant qu’il manqueX11/extensions/XTest.hhttps://github.com/go-vgo/robotgo?tab=readme-ov-file#require...
Il y a des prérequis qui ne sont pas indiqués sur la page. Sur Mint 22, j’ai dû installer le paquet libxtst-dev
robotgoa quelques problèmes sous Windows, donc je suis en train d’en examiner une partieJe cherchais justement quelque chose comme ça aujourd’hui. Je surveille à distance des événements de tests physiques, et laisser un Google Meet enregistré ouvert est un bazar, mais il me fallait quand même un chat texte pour l’interface
Ça ressemble à une très bonne interface minimaliste. Si l’envie me prend, je pourrais peut-être y ajouter d’une manière ou d’une autre de la persistance pour le chat
Par ailleurs, faut-il considérer que le texte ou la voix synchronisés se font ailleurs, comme via un appel téléphonique ou une description textuelle sur Slack ?
Pour mon usage, Moonlight Game Streaming a quasiment remplacé VNC. Il faudrait juste de meilleures fonctions comme le transfert de fichiers et le partage du presse-papiers
Il y a un problème avec le suivi du curseur. Je ne sais pas si c’est parce que j’ai plusieurs moniteurs
Sur cette image, l’anneau correspond à la position réelle du curseur https://i.imgur.com/TvzskjS.png