- 1fps.video ist ein linkbasiertes Bildschirmfreigabe-Tool, das als einzelne Binärdatei sofort startet und sich für Zusammenarbeit eignet, bei der eher ein Blick auf den Bildschirm als ein Meeting nötig ist, etwa für Entwickler, IT-Teams und Sicherheitsexperten
- Ausgehend davon, dass für die gemeinsame Arbeit am Code oft auch eine niedrige FPS ausreicht, reduziert es CPU-, Speicher- und Netzwerkauslastung und entlastet ältere Laptops
- Der Bildschirm wird mit 1 FPS geteilt, aber dank WebSocket-basierter Cursorverfolgung werden Zeigerbewegungen mit nahezu 30 FPS angezeigt, um präzise Demos zu unterstützen
- Es bietet Ende-zu-Ende-Verschlüsselung, und der im Client erzeugte Schlüssel steht hinter
#in der URL und wird nicht an das Backend gesendet - Mit Fokus auf lange Sitzungen und traffic-arme Freigabe unterstützt es mehrere Monitore, die Anpassung von Bildqualität und Aufnahmegröße sowie das Auslassen von Übertragungen bei unverändertem Bildschirminhalt
1-FPS-Bildschirmfreigabe
- 1fps.video ist ein Tool, mit dem sich Bildschirmfreigabe schnell starten lässt; die Binärdatei kann unter Download heruntergeladen werden
- Die wichtigsten Zielgruppen sind Entwickler, IT-Teams, Sicherheitsexperten und Nutzer, die Zusammenarbeit ohne Meetings bevorzugen
- Es basiert auf der Annahme, dass Bildschirmfreigabe mit niedriger FPS für die meisten kollaborativen Aufgaben oft ausreicht, insbesondere für Entwickler, die viel Zeit mit dem Schreiben von Code verbringen
- Dieser Ansatz konzentriert sich darauf, Ressourcenverbrauch und Traffic zu senken
- Da kein Audio nötig ist, fördert er eine meetingfreie Kultur
- CPU-, Speicher- und Netzwerknutzung werden deutlich reduziert
- Auch ältere Laptops können während der Bildschirmfreigabe besser arbeiten
- Der geringe Ressourcenverbrauch ist umweltfreundlicher
- Die Freigabeumgebung lässt sich an die Netzwerkbedingungen anpassen
- Mehrere Monitore werden unterstützt
- Die Bildqualität kann angepasst werden, um den Traffic zu optimieren
- Bei großen Displays kann die Größe der Bildschirmaufnahme angepasst werden, um den Traffic weiter zu reduzieren
- Es wird ein intelligenter Bildschirmvergleich verwendet, um unnötige Datenübertragungen zu vermeiden, wenn sich der Bildschirminhalt nicht geändert hat
Sicherheit, Privatsphäre und Freigabemodell
- Für die meisten Coding- und Entwicklungsaufgaben werden 1 FPS als ausreichend angesehen; Cursorbewegungen werden per WebSocket-basierter Verfolgung mit nahezu 30 FPS dargestellt
- Es eignet sich für introvertierte Nutzer und Remote-Arbeitende, die nur ihren Bildschirm teilen möchten, ohne Audio- oder Videoanruf
- Es kann zusammen mit bestehenden Team-Chat-Anwendungen verwendet werden, und die Optionen für mehrere Monitore, Bildqualität und Bildschirmgröße erlauben es, das Freigabeerlebnis an die Netzwerksituation anzupassen
- Die Struktur für Privatsphäre und Sicherheit basiert auf Links und clientseitiger Schlüsselverwaltung
- Alle Daten sind Ende-zu-Ende-verschlüsselt
- Der Verschlüsselungsschlüssel wird clientseitig erzeugt und nicht an den Server übertragen
- Der Schlüssel ist hinter
#in der URL enthalten und wird nicht an das Backend weitergegeben - Nur Personen mit dem vollständigen Link können auf den geteilten Bildschirm zugreifen
- Der Bildschirmvergleich minimiert die Datenübertragung und stärkt so die Privatsphäre
- Derzeit wird an der Verschlüsselung von Cursor-Koordinaten gearbeitet
- Der Quellcode ist unter Source Code verfügbar
1 Kommentare
Hacker-News-Kommentare
Gut, dass das Projekt veröffentlicht wurde. Die Idee ist cool und überraschend minimalistisch, aber im Source sind mehrere kryptografische Schwächen zu sehen, daher sollte man es nicht in Situationen einsetzen, in denen Verschlüsselung zentral ist.
[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/
Mich würde interessieren, ob der Hauptgrund, hier nicht einfach zu sagen „behebe das Nonce-Problem“, in den Fallstricken der Implementierung liegt oder ob er subtiler mit den allgemeinen Problemen aus den obigen Artikeln zusammenhängt.
Naiv betrachtet wird AES-GCM an vielen Stellen verwendet, etwa in TLS oder SRTP, daher könnte jemand ohne viel Kryptografie-Wissen denken, dass es eine gute Wahl ist.
Beim Blick auf den Code scheint es so zu funktionieren, dass jede Sekunde ein Screenshot (.jpg) aufgenommen und gesendet wird. Ich frage mich, ob das tatsächlich Bandbreite gegenüber moderner Videokompression spart, die Informationen aus vorherigen Frames wiederverwendet.
Ich habe ein einminütiges Video aufgenommen, in dem ich in VS Code Code editiere, 1440p mit 10 fps und AV1-Encoding; es war etwa halb so groß wie 60 JPEG-Screenshots desselben Bildschirms. Falls es dazu Messwerte gibt, würden sie mich interessieren.
Die Screenshots nahmen viel Speicherplatz ein, und als ich sah, dass sich zwischen den Bildern kaum etwas änderte, kam mir ein Algorithmus in den Sinn, der nur die Unterschiede zum nachfolgenden Bild speichert. Ein paar Minuten später merkte ich, dass ich gerade Videokompression neu erfand.
Also habe ich die Bildsequenz mit ffmpeg in mp4 umgewandelt, und die Dateigröße sank um ungefähr 95 %. Mit ImageMagick habe ich die Zeitstempel-Dateinamen in die Bilder eingebettet; im Grunde habe ich damit wohl die Funktionen von TimeSnapper Classic mit zwei Befehlen nachgebaut.
Auf der einen Seite steht die CPU-Auslastung, auf der anderen das Netzwerk. Meine Einschätzung ist: Netzwerk ist billig, Encoding ist teuer. Ich habe keine Belege, nur lokale Experimente, aber mit Messungen anzufangen ist wirklich eine gute Idee.
Es gibt auch die Idee, den Bildschirm zu scannen und nur geänderte Bereiche zu senden. Wenn man nur die Hälfte des Bildschirms sendet, könnte das aus Netzwerksicht meiner Meinung nach Video-Encoding schlagen. Allerdings müsste der Diff-Algorithmus sehr schnell sein. Bei 1280x720 sind das 914400 Pixel, und bei jeweils 4 Byte müssen pro Sekunde 3,49 MB an Informationen verarbeitet werden.
Mich interessiert auch die Effizienz von Video-Encoding und die Kosten, 60 JPEGs zu erzeugen. Sind beide ähnlich?
Wenn man wollte, könnte man vermutlich beides leicht machen, aber ich bin mir nicht sicher, ob sich der Aufwand lohnt. Ich stimme zu, dass dieser Ansatz bei größerer Skalierung von derselben IP aus an seine Grenzen kommen könnte.
Gefällt mir
Unser Workflow ist darauf ausgelegt, die Notwendigkeit für ein Büro und technische Infrastruktur zu beseitigen. Wir streamen Timeline-Outputs, also die Ergebnisse des Videoschnitts, in Echtzeit und haben offene Kommunikationskanäle. Die meisten Teammitglieder sind ziemlich introvertiert, daher nutzen wir push-to-talk, und wenn keine allgemeine Diskussion nötig ist, hinterlassen wir meist nur Notizen im Chat.
Grobe Lösungen setzen sich oft eher durch.
Was ist der Use Case für Bildschirmfreigabe ohne Audio? Ich bin mir nicht sicher, wann das nützlich wäre. Man muss doch ohnehin irgendwie mit der anderen Person kommunizieren, oder?
Auch während langer Meetings muss die Bildschirmfreigabe manchmal weiterlaufen. Manchmal möchte man lieber coden, als in einem ein- bis zweistündigen Meeting zu sitzen und zuzuhören.
Und es passt auch zu Leuten wie mir, die Audio nicht mögen. Es gibt viele Studierende, denen ich helfen möchte, aber ich will nicht auch noch Audio dabeihaben. Mein Voice-Chat ist keine Ressource, die sich gut parallelisieren lässt.
Es wirkt eher wie Textchat mit Screenshots als wie „Bildschirmfreigabe während eines Sprachanrufs“. Ich verstehe, warum manche das bevorzugen.
Zu der Stelle „Google Meet hat ein 1-Stunden-Limit, Zoom ein 40-Minuten-Limit, deshalb habe ich genug von Bildschirmfreigabe“: jitsi[0] ist eine Open-Source-[1]-Videokonferenz-Alternative auf Basis von WebRTC. Als Ersatz für Zoom, Google Meet, Slack und Ähnliches ist es ziemlich funktionsreich.
Man kann es über die Hauptseite nutzen oder, wenn man möchte, selbst hosten.
[0]: https://meet.jit.si/
[1]: https://github.com/jitsi
[1] https://github.com/strukturag/nextcloud-spreed-signaling
Es könnte interessant sein, eine Heuristik dafür zu entwickeln, welchen Frame man auswählt. Immer blind den neuesten Frame zu nehmen, ist wahrscheinlich nicht ideal; besser könnte es sein, einen Frame mit wenig Bewegung, ohne laufende Animationen oder mit ähnlichen Metriken zu wählen.
Wenn man es aufwendiger machen möchte, könnte man auch fensterweise analysieren und daraus eine Aggregation für den gesamten Frame bilden.
Coole Idee, und ich habe gehört, dass es beim Schach einen ähnlichen Ansatz namens Ruhesuche (quiescence search)[1] gibt, aber wahrscheinlich ist es den Aufwand nicht wert.
[0] https://old.reddit.com/r/Android/comments/11nzrb0/samsung_sp...
[1] https://en.wikipedia.org/wiki/Quiescence_search
Trotzdem klingt es nach einer großartigen Idee und einem interessanten Problem.
Bei
github.com/go-vgo/robotgobekomme ich einen Kompilierfehler, dassX11/extensions/XTest.hfehlt.https://github.com/go-vgo/robotgo?tab=readme-ov-file#require...
Es gibt eine Voraussetzung, die auf der Seite nicht aufgeführt ist. Unter Mint 22 musste ich das Paket libxtst-dev installieren.
robotgohat unter Windows ein paar Probleme, daher sehe ich mir gerade Teile davon an.Genau so etwas habe ich heute gesucht. Ich überwache remote ein physisches Testereignis, und ein aufgezeichnetes Google Meet offen zu lassen ist ein ziemliches Durcheinander, aber ich brauchte trotzdem Textchat für die Oberfläche.
Sieht nach einem sehr guten minimalistischen Interface aus. Wenn mir danach ist, könnte ich vielleicht auf irgendeine Weise Chat-Persistenz ergänzen.
Außerdem kann man davon ausgehen, dass synchroner Text oder Sprache anderswo stattfindet, etwa per Telefonanruf oder Slack-Textbeschreibung?
Für meinen Anwendungsfall hat Moonlight Game Streaming VNC fast ersetzt. Nur Funktionen wie Dateiübertragung und Clipboard-Sharing müssten noch etwas besser werden.
Es gibt ein Problem mit der Cursor-Verfolgung. Ich weiß nicht, ob es daran liegt, dass ich mehrere Monitore habe.
In diesem Bild ist der Ring die tatsächliche Cursorposition: https://i.imgur.com/TvzskjS.png