- 1fps.video, tek bir ikili dosyayla hemen başlatılabilen bağlantı tabanlı bir ekran paylaşım aracı; geliştiriciler, IT ekipleri ve güvenlik uzmanları gibi toplantıdan çok ekranı görmeye ihtiyaç duyan iş birlikleri için tasarlanmış
- Kodlama iş birliğinde düşük FPS’nin çoğu zaman yeterli olduğu varsayımıyla CPU, bellek ve ağ kullanımını azaltır ve eski dizüstü bilgisayarların yükünü hafifletir
- Ekran 1 FPS ile paylaşılır; ancak WebSocket tabanlı imleç takibi sayesinde işaretçi hareketleri neredeyse 30 FPS’ye yakın gösterilerek hassas demolar desteklenir
- Uçtan uca şifreleme sunar; istemcide oluşturulan anahtar URL’deki
#işaretinden sonra yer alır ve arka uca gönderilmez - Çoklu monitör, görüntü kalitesi ve yakalama boyutu ayarı ile değişmeyen ekranların gönderimini atlama özellikleri sayesinde uzun oturumlara ve düşük trafikli paylaşıma odaklanır
1 FPS ekran paylaşımı yaklaşımı
- 1fps.video, ekran paylaşımını hızlıca başlatmaya yarayan bir araçtır; ikili dosya Download sayfasından indirilebilir
- Başlıca hedef kitlesi geliştiriciler, IT ekipleri, güvenlik uzmanları ve toplantısız iş birliğini tercih eden kullanıcılardır
- Düşük FPS’li ekran paylaşımının çoğu iş birliği işi için, özellikle de zamanının büyük kısmını kod yazarak geçiren geliştiriciler için çoğu durumda yeterli olduğu varsayılır
- Bu yaklaşım kaynakları ve trafiği azaltmaya odaklanır
- Ses gerekmediği için toplantısız kültürü teşvik eder
- CPU, bellek ve ağ kullanımını belirgin biçimde azaltır
- Eski dizüstü bilgisayarlar da ekran paylaşımı sırasında daha iyi çalışabilir
- Düşük kaynak kullanımı sayesinde çevre açısından daha dosttur
- Paylaşım ortamı ağ koşullarına göre ayarlanabilir
- Çoklu monitör paylaşımını destekler
- Trafik kullanımını optimize etmek için görüntü kalitesi ayarlanabilir
- Büyük ekranlarda ekran yakalama boyutu ayarlanarak trafik daha da azaltılabilir
- Ekran değişmediğinde gereksiz veri aktarımını önleyen akıllı ekran karşılaştırması kullanır
Güvenlik, gizlilik ve paylaşım modeli
- Çoğu kodlama ve geliştirme işi için 1 FPS’nin yeterli olduğu düşünülür; imleç hareketleri ise WebSocket tabanlı takip ile neredeyse 30 FPS’ye yakın sağlanır
- Sesli veya görüntülü arama olmadan yalnızca ekran paylaşmak isteyen içe dönük kullanıcılar ve uzaktan çalışanlar için uygundur
- Mevcut ekip sohbet uygulamalarıyla birlikte kullanılabilir; çoklu monitör, görüntü kalitesi ve ekran boyutu ayarlama seçenekleriyle paylaşım deneyimi ağ koşullarına uyarlanabilir
- Gizlilik ve güvenlik yapısı bağlantılara ve istemci taraflı anahtar yönetimine dayanır
- Tüm veriler uçtan uca şifrelenir
- Şifreleme anahtarı istemci tarafında oluşturulur ve sunucuya gönderilmez
- Anahtar, URL’deki
#işaretinden sonra yer alır ve arka uca iletilmez - Yalnızca tam bağlantıya sahip kişiler paylaşılan ekrana erişebilir
- Ekran karşılaştırmasıyla veri aktarımı en aza indirilerek gizlilik güçlendirilir
- Şu anda imleç koordinatlarını şifreleme çalışması devam etmektedir
- Kaynak kod Source Code üzerinden sunulmaktadır
1 yorum
Hacker News yorumları
Projeyi yayımlamanız iyi olmuş. Fikir harika ve şaşırtıcı derecede minimal; ancak kaynakta birkaç kriptografik kusur görüyorum, bu yüzden şifrelemenin kritik olduğu durumlarda kullanılmamalı
[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/
Bu durumda nonce sorununu düzelt dememenin başlıca nedeni uygulama sürecindeki tuzaklar mı, yoksa yukarıdaki yazılarda anlatılan genel sorunlarla daha incelikli bir bağlantısı mı var, merak ediyorum
Naif bakınca AES-GCM TLS veya SRTP gibi pek çok yerde kullanılıyor; kriptografiyi iyi bilmeyen biri bunun iyi bir tercih olduğunu düşünebilir
Koda bakınca her saniye ekran görüntüsü (.jpg) alıp gönderiyor gibi görünüyor. Bu yöntemin önceki kare bilgisini yeniden kullanan modern video sıkıştırmaya göre gerçekten bant genişliği tasarrufu sağlayıp sağlamadığını merak ediyorum
VS Code’da kod düzenlediğim 1 dakikalık bir videoyu 1440p 10fps, AV1 kodlama ile kaydettim; aynı ekranın 60 JPEG ekran görüntüsünün yaklaşık yarısı kadar boyuttaydı. Test edilmiş sayılar varsa merak ederim
Ekran görüntüleri diskte çok yer kaplıyordu ve görüntüler arasında değişen kısmın neredeyse hiç olmadığını görünce yalnızca sonraki görüntüyle farkı kaydeden bir algoritma düşündüm. Birkaç dakika sonra video sıkıştırmayı yeniden icat ettiğimi fark ettim
Bu yüzden ffmpeg ile görüntü dizisini mp4’e çevirdim ve dosya boyutu yaklaşık %95 küçüldü. ImageMagick ile zaman damgalı dosya adlarını görüntünün içine yerleştirerek, aslında TimeSnapper Classic’in işlevini 2 komutla yeniden üretmiş gibi oldum
Bir tarafta CPU kullanımı, diğer tarafta ağ var. Bana göre ağ ucuz, kodlama pahalı. Kanıtım yok, yalnızca yerel deneylerim var; ama ölçmeye başlamak gerçekten iyi bir fikir
Ekranı tarayıp yalnızca değişen kısımları gönderme fikri de var. Ekranın yalnızca yarısını göndermek bile ağ açısından video kodlamayı yenebilir gibi geliyor. Ancak diff algoritması çok hızlı olmalı. 1280x720 ise 914400 piksel eder; her biri 4 baytsa saniyede 3,49 MB bilgi işlemek gerekir
Video kodlama verimliliğiyle 60 JPEG üretmenin maliyetini de merak ediyorum. İkisi benzer mi?
İstenirse ikisi de kolayca yapılabilir; ama zahmetine değip değmeyeceğinden emin değilim. Aynı IP’den ölçek büyürse bu yöntemin zorlanabileceğine katılıyorum
Hoşuma gitti
İş akışımız, ofis ve teknik altyapı ihtiyacını ortadan kaldıracak şekilde tasarlanmış. Zaman çizelgesi çıktısını, yani video kurgu sonucunu gerçek zamanlı olarak stream ediyoruz ve açık iletişim kanallarımız var. Ekip üyelerinin çoğu oldukça içe dönük olduğu için push-to-talk kullanıyoruz; genel bir tartışma gerekmiyorsa çoğunlukla sohbete not bırakıyoruz
Kaba çözümler çoğu zaman daha kolay benimseniyor
Ses olmadan ekran paylaşımının kullanım senaryosu nedir? Ne zaman işe yarayacağını pek anlayamadım. Sonuçta karşı tarafla bir şekilde iletişim kurmak gerekmiyor mu?
Uzun toplantılar sırasında da ekran paylaşımının sürekli gerekli olduğu durumlar oluyor. 1-2 saatlik bir toplantıyı oturup dinlemektense kod yazmak istediğim zamanlar oluyor
Ayrıca benim gibi sesten hoşlanmayan kişilere de uyuyor. Yardım etmek istediğim çok öğrenci var ama işin içine sesi de katmak istemiyorum. Sesli sohbetim iyi paralelleştirilebilen bir kaynak değil
“Sesli görüşme sırasında ekran paylaşımı”ndan çok, ekran görüntüleri göndererek metin sohbeti yapmaya benziyor. Bazı insanların bunu neden tercih edeceğini anlayabiliyorum
“Google Meet 1 saatle, Zoom 40 dakikayla sınırlı olduğu için ekran paylaşımından yoruldum” kısmı için, jitsi[0] WebRTC tabanlı açık kaynak[1] bir video konferans alternatifi. Zoom, Google Meet, Slack gibi şeylerin yerine geçebilecek kadar özellikleri epey tamamlanmış durumda
Ana siteden kullanabilirsiniz; isterseniz kendiniz de barındırabilirsiniz
[0]: https://meet.jit.si/
[1]: https://github.com/jitsi
[1] https://github.com/strukturag/nextcloud-spreed-signaling
Hangi karenin kullanılacağını seçmek için bir heuristic oluşturmak ilginç olabilir. Her zaman körlemesine en son kareyi seçmek muhtemelen ideal değildir; hareketin az olduğu, devam eden animasyonun olmadığı ya da benzer göstergelere sahip kareleri seçmek daha iyi olabilir
Daha gösterişli yapmak isterseniz pencere bazında analiz edip ardından tüm kare için bir toplama biçimi oluşturabilirsiniz
Güzel bir fikir; satrançta benzer bir fikre quiescence search (durgunluk araması)[1] dendiğini duydum ama muhtemelen uğraşmaya değmez
[0] https://old.reddit.com/r/Android/comments/11nzrb0/samsung_sp...
[1] https://en.wikipedia.org/wiki/Quiescence_search
Yine de harika bir fikir ve ilginç bir problem gibi duruyor
github.com/go-vgo/robotgoiçindeX11/extensions/XTest.hbulunamadığına dair derleme hatası alıyorumhttps://github.com/go-vgo/robotgo?tab=readme-ov-file#require...
Sayfada yazmayan bir ön koşul var. Mint 22’de libxtst-dev paketini kurmam gerekti
robotgoWindows’ta birkaç sorun çıkarıyor; şu anda bir kısmına bakıyorumBugün tam böyle bir şey arıyordum. Fiziksel test olayını uzaktan izliyorum; kaydı açık bir Google Meet bırakmak berbat, ama arayüz için yine de metin sohbetine ihtiyacım vardı
Çok iyi bir minimal arayüz gibi görünüyor. Canım isterse sohbet kalıcılığını bir şekilde eklemeyi de deneyebilirim
Ek olarak senkronize metin ya da sesin telefon görüşmesi veya Slack’te metinle açıklama gibi başka bir yerde yapılacağını varsayabilir miyiz?
Benim kullanımımda Moonlight Game Streaming neredeyse VNC’nin yerini aldı. Sadece dosya aktarımı ve pano paylaşımı gibi özelliklerin biraz daha iyi olması gerekiyor
İmleç takibinde bir sorun var. Birden fazla monitörüm olduğu için mi bilmiyorum
Bu görselde halka gerçek imleç konumu: https://i.imgur.com/TvzskjS.png