- 1fps.video एक link-आधारित screen sharing tool है जो single binary से तुरंत शुरू हो जाता है, और डेवलपर्स, IT teams, security professionals जैसे उन सहयोगी कामों के लिए उपयुक्त है जहाँ मीटिंग से ज़्यादा स्क्रीन देखना ज़रूरी होता है
- इस मान्यता के आधार पर कि coding collaboration में कम FPS भी अक्सर पर्याप्त होता है, यह CPU·memory·network usage कम करता है और पुराने laptops पर बोझ घटाता है
- स्क्रीन 1 FPS पर share होती है, लेकिन WebSocket-आधारित cursor tracking pointer movement को लगभग 30 FPS के करीब दिखाती है, जिससे सटीक demo देना आसान होता है
- यह end-to-end encryption प्रदान करता है, और client पर बनी key URL के
#के बाद जाती है, इसलिए backend को भेजी नहीं जाती - multi-monitor, image quality·capture size adjustment, और बिना बदलाव वाली स्क्रीन के transmission को छोड़ने जैसी सुविधाओं के साथ इसका फोकस लंबे sessions और low-traffic sharing पर है
1 FPS स्क्रीन शेयरिंग का तरीका
- 1fps.video एक ऐसा tool है जिससे screen sharing जल्दी शुरू की जा सकती है, और Download से binary डाउनलोड की जा सकती है
- इसके मुख्य उपयोगकर्ता डेवलपर्स, IT teams, security professionals, और वे लोग हैं जो बिना मीटिंग वाले collaboration को पसंद करते हैं
- इसका आधार यह है कि low-FPS screen sharing ज़्यादातर collaborative tasks के लिए, खासकर उन डेवलपर्स के लिए जो ज़्यादा समय code लिखने में बिताते हैं, अक्सर पर्याप्त होती है
- यह तरीका resources और traffic कम करने पर केंद्रित है
- audio की ज़रूरत नहीं होती, जिससे meeting-free culture को बढ़ावा मिलता है
- CPU, memory, और network usage काफ़ी कम हो जाता है
- पुराने laptops भी screen sharing के दौरान बेहतर चल सकते हैं
- कम resource usage के कारण यह पर्यावरण के लिए भी अधिक अनुकूल है
- sharing environment को network conditions के अनुसार समायोजित किया जा सकता है
- multi-monitor sharing को support करता है
- image quality को adjust करके traffic usage को optimize किया जा सकता है
- बड़े displays पर screen capture size को adjust करके traffic और कम किया जा सकता है
- स्क्रीन में बदलाव न होने पर अनावश्यक data transmission से बचने के लिए intelligent screen comparison का उपयोग करता है
सुरक्षा, प्राइवेसी, और sharing model
- इसका मानना है कि ज़्यादातर coding और development work के लिए 1 FPS पर्याप्त है, जबकि cursor movement WebSocket-आधारित tracking के ज़रिए लगभग 30 FPS के करीब उपलब्ध होती है
- यह उन अंतर्मुखी users और remote workers के लिए उपयुक्त है जो audio या video calls के बिना सिर्फ़ स्क्रीन share करना चाहते हैं
- इसे मौजूदा team chat applications के साथ इस्तेमाल किया जा सकता है, और multi-monitor, image quality, तथा screen size adjustment options के ज़रिए sharing experience को network स्थिति के अनुसार बदला जा सकता है
- इसकी privacy और security संरचना link और client-side key management पर आधारित है
- सारा data end-to-end encrypted होता है
- encryption key client side पर बनती है और server को भेजी नहीं जाती
- key URL के
#के बाद शामिल होती है, इसलिए backend तक नहीं पहुँचती - केवल वही व्यक्ति shared screen तक पहुँच सकता है जिसके पास पूरा link हो
- screen comparison data transmission को न्यूनतम करके privacy को और मज़बूत करता है
- अभी cursor coordinate encryption पर काम चल रहा है
- source code Source Code पर उपलब्ध है
1 टिप्पणियां
Hacker News की राय
प्रोजेक्ट को अच्छी तरह पेश किया गया है। आइडिया शानदार है और हैरान करने वाली हद तक minimal है, लेकिन source में कई cryptographic flaws दिख रहे हैं, इसलिए जहाँ encryption मुख्य बात हो वहाँ इसका इस्तेमाल नहीं करना चाहिए
[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/
इस मामले में nonce वाली समस्या को खुद ठीक करने की सलाह न देने की मुख्य वजह implementation के दौरान होने वाले traps हैं, या यह ऊपर दिए गए लेखों में बताए गए general issues से किसी ज़्यादा subtle तरीके से जुड़ा है?
सीधी नज़र से देखें तो AES-GCM का उपयोग TLS या SRTP जैसी कई जगहों पर होता है, इसलिए जिसे cryptography की ज़्यादा समझ न हो वह इसे अच्छा विकल्प मान सकता है
कोड देखकर लगता है कि यह हर सेकंड screenshot (.jpg) लेकर भेजता है। मैं जानना चाहता हूँ कि क्या यह तरीका पिछली frames की जानकारी reuse करने वाले modern video compression से सच में bandwidth बचाता है
मैंने VS Code में code edit करते हुए 1 मिनट का video 1440p 10fps, AV1 encoding पर रिकॉर्ड किया, और वह उसी स्क्रीन के 60 JPEG screenshots की तुलना में लगभग आधा size का था। अगर आपने कुछ benchmark किए हों तो जानना चाहूँगा
screenshots बहुत disk space ले रहे थे, और यह देखकर कि तस्वीरों के बीच लगभग कुछ बदलता ही नहीं, मेरे मन में बाद की image से सिर्फ़ difference save करने वाला algorithm आया। कुछ मिनट बाद समझ आया कि मैं video compression को फिर से invent कर रहा हूँ
इसलिए मैंने ffmpeg से image sequence को mp4 में बदला, और file size लगभग 95% कम हो गया। ImageMagick से timestamp वाले filename को image पर जला दिया, और इस तरह शायद 2 commands में ही TimeSnapper Classic की functionality दोबारा बना ली
एक तरफ CPU usage है और दूसरी तरफ network। मेरा मानना है कि network सस्ता है लेकिन encoding महँगी। मेरे पास कोई ठोस सबूत नहीं, सिर्फ़ local experiments हैं, लेकिन measurement शुरू करना वाकई अच्छा विचार है
एक और idea यह है कि screen scan करके सिर्फ़ बदले हुए हिस्से भेजे जाएँ। अगर स्क्रीन का सिर्फ़ आधा हिस्सा भी भेजना पड़े, तो network के हिसाब से शायद यह video encoding से बेहतर हो सकता है। लेकिन diff algorithm बहुत तेज़ होना चाहिए। 1280x720 पर 914400 pixels होते हैं, और 4 bytes प्रति pixel मानें तो 1 सेकंड में 3.49MB जानकारी process करनी होगी
video encoding efficiency और 60 JPEG बनाने की cost के बीच तुलना भी दिलचस्प होगी। क्या दोनों लगभग बराबर हैं?
चाहें तो दोनों चीज़ें आसानी से की जा सकती हैं, लेकिन यह अतिरिक्त झंझट उठाने लायक है या नहीं, इस पर भरोसा नहीं। हालांकि मैं मानता हूँ कि एक ही IP पर scale बढ़ने पर यह तरीका भारी पड़ सकता है
पसंद आया
हमारा workflow इस तरह बनाया गया है कि दफ़्तर और तकनीकी infrastructure की ज़रूरत ही न पड़े। timeline output, यानी video editing result, को real-time में stream करते हैं और communication channel खुला रखते हैं। टीम के ज़्यादातर लोग काफ़ी introverted हैं, इसलिए push-to-talk इस्तेमाल करते हैं, और जब पूरी discussion की ज़रूरत नहीं होती तो आम तौर पर chat में सिर्फ़ notes छोड़ देते हैं
कई बार यही सीधा-सादा समाधान अपनाया जाता है
audio के बिना screen sharing के use cases क्या हैं? समझ नहीं आ रहा कि यह कब काम आएगा। वैसे भी, किसी न किसी तरह सामने वाले से communicate तो करना ही होगा, है न?
लंबी meetings में भी कई बार screen sharing लगातार चाहिए होती है। 1~2 घंटे की meeting में बैठकर सुनने के बजाय कभी-कभी coding करना बेहतर लगता है
और यह मेरे जैसे लोगों के लिए भी ठीक है जिन्हें audio पसंद नहीं है। बहुत से students हैं जिनकी मदद करना चाहता हूँ, लेकिन audio तक शामिल नहीं होना चाहता। मेरी voice chat ऐसा resource नहीं है जिसे अच्छी तरह parallelize किया जा सके
यह “voice call के दौरान screen sharing” से ज़्यादा screenshots भेजते हुए text chat जैसा लगता है। समझ आता है कि कुछ लोग इसे क्यों पसंद करेंगे
“Google Meet में 1 घंटे की limit है, Zoom में 40 मिनट की limit है, इसलिए मैं screen sharing से थक गया” वाली बात पर, jitsi[0] WebRTC-आधारित open source[1] video conferencing alternative है। यह Zoom, Google Meet, Slack जैसी चीज़ों के विकल्प के रूप में काफ़ी feature-complete है
इसे main site पर भी इस्तेमाल कर सकते हैं, और चाहें तो self-host भी कर सकते हैं
[0]: https://meet.jit.si/
[1]: https://github.com/jitsi
[1] https://github.com/strukturag/nextcloud-spreed-signaling
यह दिलचस्प हो सकता है कि कौन-सा frame इस्तेमाल करना है, इसके लिए कोई heuristic बनाई जाए। हर बार बस सबसे नया frame चुन लेना शायद आदर्श न हो; कम movement वाले, ongoing animation न होने वाले, या ऐसे ही किसी metric वाले frame चुनना बेहतर हो सकता है
और अगर इसे ज़्यादा fancy बनाना हो, तो window level पर analysis करके पूरे frame के लिए aggregated form भी बनाई जा सकती है
बढ़िया idea है, और chess में मैंने सुना है कि इसी तरह की सोच को quiescence search[1] कहते हैं, लेकिन शायद यह मेहनत के लायक न हो
[0] https://old.reddit.com/r/Android/comments/11nzrb0/samsung_sp...
[1] https://en.wikipedia.org/wiki/Quiescence_search
फिर भी यह शानदार idea और दिलचस्प समस्या लगती है
github.com/go-vgo/robotgoमेंX11/extensions/XTest.hmissing होने की compile error आ रही हैhttps://github.com/go-vgo/robotgo?tab=readme-ov-file#require...
page पर न लिखी गई एक prerequisite है। Mint 22 में मुझे libxtst-dev package install करना पड़ा
robotgoमें Windows पर कुछ issues हैं, इसलिए अभी उसके कुछ हिस्से देख रहा हूँमैं आज इसी तरह की कोई चीज़ ढूँढ रहा था। मैं physical test event की remote monitoring कर रहा हूँ, लेकिन recording on करके Google Meet खुला छोड़ना बेकार है, और फिर भी interface के लिए text chat चाहिए था
यह बहुत अच्छा minimal interface लगता है। अगर मन हुआ तो किसी तरह chat persistence भी जोड़कर देख सकता हूँ
क्या अतिरिक्त synchronized text या voice को phone call या Slack text explanation जैसी किसी दूसरी जगह संभाला जाता है?
मेरे use case में Moonlight Game Streaming ने लगभग VNC की जगह ले ली है। बस file transfer, clipboard sharing जैसी features थोड़ी और बेहतर हो जाएँ तो अच्छा होगा
cursor tracking में दिक्कत है। पता नहीं multiple monitors की वजह से है या नहीं
इस image में ring ही actual cursor position है https://i.imgur.com/TvzskjS.png