- 1fps.video เป็นเครื่องมือแชร์หน้าจอแบบลิงก์ที่เริ่มใช้งานได้ทันทีจากไบนารีไฟล์เดียว เหมาะกับการทำงานร่วมกันที่ต้องการดูหน้าจอมากกว่าประชุม เช่น นักพัฒนา ทีมไอที และผู้เชี่ยวชาญด้านความปลอดภัย
- ตั้งอยู่บนแนวคิดว่าการทำงานร่วมกันด้านการเขียนโค้ดจำนวนมากไม่จำเป็นต้องใช้ FPS สูง จึงช่วยลดการใช้ CPU·หน่วยความจำ·เครือข่าย และลดภาระของโน้ตบุ๊กเก่า
- แชร์หน้าจอที่ 1 FPS แต่ใช้การติดตามเคอร์เซอร์บน WebSocket ทำให้การเคลื่อนไหวของตัวชี้ดูได้ลื่นใกล้เคียง 30 FPS เพื่อชดเชยการสาธิตที่ต้องการความแม่นยำ
- รองรับ การเข้ารหัสแบบต้นทางถึงปลายทาง โดยคีย์ที่สร้างบนไคลเอนต์จะอยู่หลัง
#ใน URL และไม่ถูกส่งไปยังแบ็กเอนด์ - รองรับหลายจอภาพ ปรับคุณภาพภาพและขนาดการจับภาพได้ และข้ามการส่งหน้าจอเมื่อไม่มีการเปลี่ยนแปลง เพื่อเน้นการใช้งานระยะยาวและ การแชร์แบบใช้ทราฟฟิกต่ำ
วิธีแชร์หน้าจอแบบ 1 FPS
- 1fps.video เป็นเครื่องมือที่ช่วยให้เริ่มแชร์หน้าจอได้อย่างรวดเร็ว โดยดาวน์โหลดไบนารีได้จาก Download
- กลุ่มเป้าหมายหลักคือ นักพัฒนา ทีมไอที ผู้เชี่ยวชาญด้านความปลอดภัย และผู้ใช้ที่ชอบการทำงานร่วมกันโดยไม่ต้องประชุม
- แนวคิดคือการแชร์หน้าจอด้วย FPS ต่ำมักเพียงพอสำหรับงานร่วมกันส่วนใหญ่ โดยเฉพาะนักพัฒนาที่ใช้เวลาส่วนมากไปกับการเขียนโค้ด
- แนวทางนี้มุ่งเน้นการลดการใช้ทรัพยากรและทราฟฟิก
- ไม่ต้องใช้ออดิโอ จึงส่งเสริม วัฒนธรรมที่ไม่ต้องประชุม
- ลดการใช้ CPU, หน่วยความจำ และเครือข่ายได้อย่างมาก
- โน้ตบุ๊กเก่าก็สามารถทำงานระหว่างแชร์หน้าจอได้ดีขึ้น
- การใช้ทรัพยากรต่ำทำให้เป็นมิตรต่อสิ่งแวดล้อมมากขึ้น
- สภาพแวดล้อมการแชร์สามารถปรับให้เหมาะกับเงื่อนไขเครือข่ายได้
- รองรับการแชร์หลายจอภาพ
- ปรับคุณภาพภาพเพื่อเพิ่มประสิทธิภาพการใช้ทราฟฟิกได้
- สำหรับจอขนาดใหญ่ สามารถปรับขนาดการจับภาพหน้าจอเพื่อลดทราฟฟิกได้อีก
- ใช้ การเปรียบเทียบหน้าจออัจฉริยะ เพื่อหลีกเลี่ยงการส่งข้อมูลที่ไม่จำเป็นเมื่อหน้าจอไม่มีการเปลี่ยนแปลง
ความปลอดภัย ความเป็นส่วนตัว และโมเดลการแชร์
- มองว่า 1 FPS เพียงพอสำหรับงานเขียนโค้ดและพัฒนาส่วนใหญ่ ขณะที่การเคลื่อนไหวของเคอร์เซอร์แสดงได้ใกล้เคียง 30 FPS ผ่านการติดตามบน WebSocket
- เหมาะกับผู้ใช้สายอินโทรเวิร์ตและผู้ทำงานทางไกลที่ต้องการแชร์เฉพาะหน้าจอโดยไม่ต้องโทรด้วยเสียงหรือวิดีโอ
- สามารถใช้ร่วมกับแอปแชตของทีมที่มีอยู่เดิมได้ และปรับประสบการณ์การแชร์ให้เหมาะกับสภาพเครือข่ายผ่านตัวเลือกหลายจอภาพ คุณภาพภาพ และขนาดหน้าจอ
- โครงสร้างด้านความเป็นส่วนตัวและความปลอดภัยอิงกับลิงก์และการจัดการคีย์ฝั่งไคลเอนต์
- ข้อมูลทั้งหมดถูก เข้ารหัสแบบต้นทางถึงปลายทาง
- คีย์เข้ารหัสถูกสร้างที่ฝั่งไคลเอนต์และไม่ถูกส่งไปยังเซิร์ฟเวอร์
- คีย์จะรวมอยู่หลัง
#ใน URL จึงไม่ถูกส่งต่อไปยังแบ็กเอนด์ - มีเพียงผู้ที่มีลิงก์เต็มเท่านั้นที่เข้าถึงหน้าจอที่แชร์ได้
- การเปรียบเทียบหน้าจอช่วยลดการส่งข้อมูลให้น้อยที่สุดและเสริมความเป็นส่วนตัว
- ขณะนี้กำลังพัฒนา การเข้ารหัสพิกัดเคอร์เซอร์
- ซอร์สโค้ดมีให้ที่ Source Code
1 ความคิดเห็น
ความเห็นจาก Hacker News
ดีแล้วที่เปิดเผยโปรเจกต์นี้ ไอเดียเท่และมินิมอลอย่างน่าทึ่ง แต่ในซอร์สเห็น ข้อบกพร่องด้านวิทยาการเข้ารหัสลับ หลายจุด จึงไม่ควรใช้ในสถานการณ์ที่การเข้ารหัสเป็นแกนสำคัญ
[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 เป็นเพราะกับดักระหว่างการ implement หรือว่ามันเชื่อมโยงกับปัญหาทั่วไปในบทความข้างต้นอย่างละเอียดอ่อนกว่านั้น?
ถ้ามองแบบซื่อ ๆ AES-GCM ถูกใช้ในหลายที่อย่าง TLS หรือ SRTP คนที่ไม่ค่อยรู้เรื่องวิทยาการเข้ารหัสลับก็อาจคิดว่านี่เป็นตัวเลือกที่ดี
ดูจากโค้ด เหมือนเป็นวิธีถ่ายภาพหน้าจอ (.jpg) ทุกวินาทีแล้วส่งไป สงสัยว่าวิธีนี้ประหยัดแบนด์วิดท์ได้จริงเมื่อเทียบกับ การบีบอัดวิดีโอสมัยใหม่ ที่นำข้อมูลเฟรมก่อนหน้ามาใช้ซ้ำหรือไม่
ลองบันทึกวิดีโอ 1 นาทีตอนแก้โค้ดใน VS Code ที่ 1440p 10fps เข้ารหัสด้วย AV1 แล้วขนาดประมาณครึ่งหนึ่งของภาพหน้าจอ JPEG 60 ภาพของหน้าจอเดียวกัน ถ้ามีตัวเลขที่ทดสอบไว้ก็อยากรู้
ภาพหน้าจอกินพื้นที่ดิสก์เยอะ และเมื่อเห็นว่าระหว่างภาพแทบไม่มีส่วนที่เปลี่ยนไปเลย ก็เลยนึกถึงอัลกอริทึมที่บันทึกเฉพาะส่วนต่างจากภาพถัดไป ไม่กี่นาทีต่อมาก็รู้ตัวว่ากำลัง คิดค้นการบีบอัดวิดีโอขึ้นมาใหม่
ดังนั้นจึงใช้ ffmpeg แปลงลำดับภาพเป็น mp4 และขนาดไฟล์ลดลงประมาณ 95% ใช้ ImageMagick ฝังชื่อไฟล์ timestamp ลงในภาพด้วย ซึ่งเหมือนกับทำฟีเจอร์ของ TimeSnapper Classic ขึ้นมาใหม่ได้ด้วยคำสั่ง 2 คำสั่ง
ด้านหนึ่งคือการใช้ CPU อีกด้านคือเครือข่าย ผมคิดว่าเครือข่ายราคาถูก แต่การเข้ารหัสวิดีโอมีต้นทุนแพง ไม่มีหลักฐาน มีแค่การทดลองในเครื่อง แต่การเริ่มวัดผลเป็นไอเดียที่ดีจริง ๆ
ยังมีอีกไอเดียคือสแกนหน้าจอแล้วส่งเฉพาะส่วนที่เปลี่ยนไป แค่ส่งครึ่งหน้าจอก็น่าจะชนะการเข้ารหัสวิดีโอในแง่เครือข่ายได้แล้ว แต่ diff algorithm ต้องเร็วมาก ถ้าเป็น 1280x720 ก็มี 914400 พิกเซล และถ้าพิกเซลละ 4 ไบต์ ก็ต้องประมวลผลข้อมูล 3.49MB ต่อวินาที
ก็สงสัยเหมือนกันว่าประสิทธิภาพของการเข้ารหัสวิดีโอกับต้นทุนการสร้าง JPEG 60 ภาพเป็นอย่างไร ใกล้เคียงกันไหม?
ถ้าต้องการก็น่าจะทำทั้งสองอย่างได้ง่าย แต่ไม่แน่ใจว่าคุ้มกับความยุ่งยากไหม เห็นด้วยว่าถ้าขยายขนาดจาก IP เดียวกัน วิธีนี้อาจรับภาระไม่ไหว
ชอบมาก
เวิร์กโฟลว์ของเราถูกออกแบบมาเพื่อตัดความจำเป็นของออฟฟิศและโครงสร้างพื้นฐานด้านเทคนิคออกไป เราสตรีมเอาต์พุตไทม์ไลน์ หรือก็คือผลงานตัดต่อวิดีโอแบบเรียลไทม์ และมีช่องทางสื่อสารที่เปิดไว้ สมาชิกทีมส่วนใหญ่ค่อนข้างอินโทรเวิร์ต เลยใช้แบบ push-to-talk และถ้าไม่จำเป็นต้องถกกันทั้งทีม ก็มักจะทิ้งโน้ตไว้ในแชตเท่านั้น
วิธีแก้แบบหยาบ ๆ มักกลับถูกนำไปใช้จริงบ่อย ๆ
กรณีใช้งาน ของการแชร์หน้าจอแบบไม่มีเสียงคืออะไร? ไม่ค่อยแน่ใจว่าจะมีประโยชน์ตอนไหน ยังไงก็ต้องสื่อสารกับอีกฝ่ายอยู่ดีไม่ใช่หรือ?
ระหว่างประชุมยาว ๆ บางทีก็ยังต้องเปิดแชร์หน้าจอต่อเนื่องอยู่ แทนที่จะนั่งฟังประชุม 1–2 ชั่วโมง บางทีก็อยากเขียนโค้ดมากกว่า
และยังเหมาะกับคนที่ไม่ชอบเสียงอย่างผมด้วย มีนักเรียนหลายคนที่อยากช่วย แต่ไม่อยากต้องมีเสียงเข้ามาด้วย แชตเสียงของผมไม่ใช่ทรัพยากรที่ทำแบบขนานได้ดี
ดูเหมือนจะใกล้เคียงกับการ ส่งสกรีนช็อตไปพร้อมกับแชตข้อความ มากกว่า “แชร์หน้าจอระหว่างคุยเสียง” เข้าใจได้ว่าทำไมถึงมีคนชอบ
เกี่ยวกับประโยคที่ว่า “เบื่อการแชร์หน้าจอเพราะ Google Meet จำกัด 1 ชั่วโมง ส่วน Zoom จำกัด 40 นาที” นั้น jitsi[0] เป็นทางเลือกประชุมวิดีโอแบบโอเพนซอร์ส[1] ที่ใช้ WebRTC ฟีเจอร์ค่อนข้างครบสำหรับใช้แทน Zoom, Google Meet, Slack อะไรพวกนั้น
จะใช้จากเว็บหลักก็ได้ หรือถ้าต้องการก็โฮสต์เองได้
[0]: https://meet.jit.si/
[1]: https://github.com/jitsi
[1] https://github.com/strukturag/nextcloud-spreed-signaling
การสร้าง ฮิวริสติก เพื่อเลือกว่าจะใช้เฟรมไหนน่าจะน่าสนใจ การเลือกเฟรมล่าสุดแบบสุ่มสี่สุ่มห้าตลอดไม่น่าจะเป็นอุดมคติ และอาจดีกว่าถ้าเลือกเฟรมที่มีการเคลื่อนไหวน้อย ไม่มีแอนิเมชันที่กำลังเล่นอยู่ หรือมีตัวชี้วัดคล้าย ๆ กัน
ถ้าอยากทำให้หรูขึ้น ก็อาจวิเคราะห์เป็นรายหน้าต่างก่อน แล้วค่อยสร้างเป็นรูปแบบการรวมผลสำหรับทั้งเฟรม
เป็นไอเดียที่เจ๋ง และได้ยินว่าในหมากรุกมีแนวคิดคล้ายกันเรียกว่า quiescence search[1] แต่คงไม่น่าคุ้มกับแรงที่ต้องลง
[0] https://old.reddit.com/r/Android/comments/11nzrb0/samsung_sp...
[1] https://en.wikipedia.org/wiki/Quiescence_search
ถึงอย่างนั้นก็ฟังดูเป็นไอเดียที่ยอดเยี่ยมและเป็นปัญหาที่น่าสนใจ
มีข้อผิดพลาดตอนคอมไพล์จาก
github.com/go-vgo/robotgoว่าไม่มีX11/extensions/XTest.hhttps://github.com/go-vgo/robotgo?tab=readme-ov-file#require...
มี prerequisite ที่ไม่ได้เขียนไว้ในหน้า บน Mint 22 ต้องติดตั้งแพ็กเกจ libxtst-dev
robotgoมีปัญหาบางอย่างบน Windows อยู่ ตอนนี้กำลังดูบางส่วนอยู่วันนี้กำลังมองหาอะไรแบบนี้พอดี กำลังมอนิเตอร์อีเวนต์ทดสอบทางกายภาพจากระยะไกลอยู่ การเปิด Google Meet พร้อมบันทึกไว้เละเทะมาก แต่ก็ยังต้องมี แชตข้อความ สำหรับอินเทอร์เฟซอยู่
ดูเป็นอินเทอร์เฟซแบบมินิมอลที่ดีมาก ถ้าเกิดมีอารมณ์ก็อาจลองเพิ่ม persistence ให้แชตสักรูปแบบหนึ่ง
เพิ่มเติมคือ ข้อความหรือเสียงที่ซิงก์กันให้ไปทำที่อื่น เช่น โทรศัพท์หรือคำอธิบายข้อความใน Slack ใช่ไหม?
สำหรับการใช้งานของผม Moonlight Game Streaming แทบจะแทน VNC ไปแล้ว เหลือแค่ฟีเจอร์อย่างโอนไฟล์กับแชร์คลิปบอร์ดที่อยากให้ดีขึ้นอีกหน่อย
การติดตามเคอร์เซอร์มีปัญหา ไม่รู้ว่าเพราะมีหลายจอหรือเปล่า
ในภาพนี้ วงแหวนคือตำแหน่งเคอร์เซอร์จริง https://i.imgur.com/TvzskjS.png