✦แล็บ · บันทึกด้านวิศวกรรม

Remio Lab — บันทึกจาก ไปป์ไลน์พิกเซล

Remio สร้างโดยทีมเล็ก ๆ อย่างเปิดเผย นี่คือบันทึกการทำงาน เส้นทางแคปเจอร์ที่เรารื้อทิ้ง การตั้งค่าตัวเข้ารหัสที่ทำให้เราแปลกใจ งบความหน่วงที่เราทำพังแล้วสร้างใหม่ รายการใหม่อยู่ด้านบน รายการเก่าคงไว้ตามที่เขียน แม้ภายหลังเราจะเปลี่ยนใจแล้วก็ตาม

อัปเดตล่าสุด 2026-05-197 รายการเรียงตามเวลา ใหม่สุดก่อน

✦บันทึกการวิจัย

บันทึกด้านวิศวกรรม เรียงตามลำดับ

ทุกรายการมีวันที่ สถานะ และอ่านจบในตัว กำลังใช้งานหมายถึงการเปลี่ยนแปลงอยู่ในบิลด์ล่าสุดแล้ว ทดลองหมายถึงเรายังวัดผลอยู่ และเก็บเข้าคลังหมายถึงเราเดินหน้าต่อไปแล้ว

กำลังใช้งาน

จอภาพเสมือนตามหน้าต่างของไคลเอนต์แล้ว

หลายสัปดาห์ที่ผ่านมา โฮสต์ macOS ตรึงจอภาพเสมือนไว้ที่ความละเอียดหน้าจอของไคลเอนต์ ซึ่งหมายความว่าเคอร์เซอร์ของโฮสต์และเคอร์เซอร์ของไคลเอนต์เห็นขนาดไม่ตรงกันทันทีที่ฝั่งใดฝั่งหนึ่งเปลี่ยน เราเขียนตัวจัดการจอภาพเสมือนใหม่ให้พื้นที่ทำงานของโฮสต์ตามพื้นที่หน้าต่างของไคลเอนต์แบบเรียลไทม์ ขนาดเคอร์เซอร์จึงตรงกันข้ามขอบเขตที่ขนาดหน้าต่างใดก็ได้ เหมือนที่ Apple Screen Sharing ทำมาตลอด

จุดตรรกะของจอภาพเสมือน ≡ จุดของพื้นที่หน้าต่างไคลเอนต์  ·  จำกัดพิกเซลที่ 3840  ·  Retina 1× หรือ 2× เลือกตามขอบเขตพิกเซลเนทีฟของแต่ละหน้าต่าง

ทดลอง

ทำไมเราจำกัดขอบเขตของจอภาพเสมือนไว้ที่ 3840 พิกเซล

เฟรมเวิร์กภายในของ macOS ที่สร้างโหมดจอภาพสำหรับจอภาพเสมือนมีพฤติกรรมทำลายล้างแบบเงียบ ๆ เมื่อกำหนดมิติสูงสุดตั้งแต่ 4096 ขึ้นไป มันจะสร้างโหมด Retina 2× ปลอมที่ค่าสูงสุดและแย่งแฟลกที่ใช้งานอยู่ จำนวนพิกเซลที่ขอเพิ่มเป็นสองเท่า เรายืนยันจากการทดลองด้วยการตรวจและบันทึกต่อเนื่องสี่คืน 3840 พอดีกับ MacBook Retina แบบเต็มจอทุกรุ่นบวกจอภายนอก 4K และเฟรมเวิร์กหยุดสร้างโหมดปลอม เรายังเฝ้าดูหางของการแจกแจงอยู่

พังจริงตั้งแต่ ≥ 4096  ·  จำกัด = 3840  ·  ครอบคลุม MacBook Pro 16″ Retina (3456 × 2234) และจอภายนอก 4K (3840 × 2160)

กำลังใช้งาน

ย้อนกลับไปใช้บิลด์เอนจินสตรีมมิงเดิมหลังการทดลองหนึ่งสัปดาห์

เราสร้างเอนจินสตรีมมิงใหม่บนสาขาที่ใหม่กว่า โดยหวังว่าตรรกะการจัดจังหวะที่อัปเดตจะลดได้อีกสองสามมิลลิวินาทีบนเส้นทางเครือข่ายในเครื่อง แต่บัฟเฟอร์ฝั่งรับกลับแย่ลงในทุกเซสชันระยะไกลที่เราวัด ค่ามัธยฐานแบบต้นทางถึงปลายทางเพิ่มขึ้น 18 ms และความแปรปรวนกว้างขึ้น เราย้อนกลับไปใช้บิลด์เสถียรบน iOS, macOS, Android และ Windows แพตช์ของสาขาใหม่ถูกเก็บเข้าคลังไว้เผื่อพฤติกรรมของต้นทางเปลี่ยน

ความหน่วงมัธยฐานของบิลด์ใหม่ · 64 ms ระยะไกล  ·  มัธยฐานของบิลด์เดิม · 46 ms ระยะไกล  ·  แฟลกการปรับจูนไม่เปลี่ยน

กำลังใช้งาน

ตรวจจับบิตเรตของเครือข่ายในเครื่องเทียบกับระยะไกลแบบปรับตัวจากตัวอย่างไป-กลับตัวแรก

ตอนนี้โฮสต์รอการวัดเวลาไป-กลับครั้งแรกหลังการเชื่อมต่อขึ้น แล้วเลือกหนึ่งในสองขอบเขตบิตเรต ต่ำกว่า 15 ms ถือว่าเป็นการเชื่อมต่อตรงบนเครือข่ายในเครื่อง เริ่มที่ 8 Mbps ต่ำสุด 8 Mbps สูงสุด 30 Mbps สูงกว่า 15 ms ถือว่าผ่านรีเลย์หรืออยู่ไกล เริ่มที่ 2 Mbps ต่ำสุด 300 Kbps สูงสุด 15 Mbps เกณฑ์นี้อยู่ระหว่าง Wi-Fi เครือข่ายเดียวกันกับรีเลย์มือถือหรือข้ามภูมิภาคทุกแบบที่เป็นไปได้ ผลบวกลวงจึงพบน้อยในเทเลเมทรีรุ่นเบต้า

ตรงในเครื่อง · 1 – 5 ms  ·  Wi-Fi เครือข่ายเดียวกัน · 5 – 10 ms  ·  รีเลย์ในภูมิภาค · 30 – 80 ms  ·  4G · 40 – 100 ms

กำลังใช้งาน

H.265 ฮาร์ดแวร์บน AMD เป็นตัวเข้ารหัสหลักของโฮสต์ Windows

หลังการประลองกับตัวเข้ารหัสคู่แข่งอย่างยาวนาน H.265 ฮาร์ดแวร์บน AMD ชนะทุกเกณฑ์วัดของโฮสต์ Windows ที่เราสนใจ เวลาเข้ารหัสมัธยฐานต่ำกว่า สไปก์ของคีย์เฟรมต่ำกว่า และพรีเซ็ตบิตเรตคงที่ที่หน่วงต่ำเป็นพิเศษทำงานคาดเดาได้เมื่อบัฟเฟอร์ถูกกดดัน H.264 ยังคงเป็นตัวสำรองเมื่อ GPU ไม่เห็นด้วย ปิด B-frame เปิดแฟลก low-delay ตัวเข้ารหัสส่งออกหนึ่งเฟรมต่อหนึ่งจังหวะแคปเจอร์เสมอ

บิตเรต · คงที่ 8 Mbps  ·  fps · 60  ·  บัฟเฟอร์ · 1 เฟรม  ·  B-frame · 0  ·  พรีเซ็ต · หน่วงต่ำเป็นพิเศษ

เก็บเข้าคลัง

ทำไมเราเลิกบัฟเฟอร์เฟรมไปเลย

รีโมทเดสก์ท็อปไม่ใช่วิดีโอคอล ทุกเฟรมคือสถานะหน้าจอล่าสุด เฟรมเก่าคือคำโกหกโดยนิยาม เราสร้างเส้นทางฝั่งรับใหม่ให้ไม่มีบัฟเฟอร์เล่น เฟรมมาถึง ถอดรหัส เรนเดอร์ ตามลำดับนั้น ในช่วงเฟรมเดียวกัน แพ็กเก็ตที่หายจะถูกส่งซ้ำทันทีถ้ายังไปถึงทันเวลา ถ้าไม่ทัน Remio จะข้ามมันแล้วขอเฟรมใหม่แทนที่จะรอ เรายอมรับการค้างสั้น ๆ เป็นครั้งคราว เราไม่ยอมรับภาษีมิลลิวินาทีคงที่ของคิว

บังคับความหน่วงการเล่น · ต่ำสุด 0 / สูงสุด 0  ·  ความหน่วงการเล่นขั้นต่ำ · 0  ·  แพ็กเก็ตที่หายส่งซ้ำถ้าทันเวลา ไม่เช่นนั้นขอเฟรมใหม่

เก็บเข้าคลัง

งบความหน่วง เขียนไว้เป็นครั้งแรก

เรานั่งในห้องแล้วคิดย้อนกลับจากตัวเลขที่อยากให้ผู้ใช้รู้สึก ต่ำกว่ายี่สิบมิลลิวินาทีจากกระจกถึงกระจกในเซสชันเครือข่ายในเครื่องทั่วไป แคปเจอร์ เข้ารหัส จัดจังหวะ ส่ง บัฟเฟอร์รับ ถอดรหัส เรนเดอร์ เราเขียนแต่ละขั้นลงไปและให้งบมิลลิวินาทีที่วัดเทียบได้ รายการส่วนใหญ่ในบันทึกนี้มาจากการปกป้องตัวเลขเหล่านั้นบนทราฟฟิกจริง

แคปเจอร์ · 1 ms  ·  เข้ารหัส · 3 ms  ·  การปล่อยจังหวะเป็นชุด · ≤ 10 ms  ·  บัฟเฟอร์รับ · 0 ms  ·  ถอดรหัส · 2 ms  ·  เรนเดอร์ · 1 ms

✦ซองสัญญาณ

สิ่งที่เราวัด เซสชันแล้วเซสชันเล่า

สี่ตัวเลขนี้อยู่ในบันทึกประจำรุ่นทุกครั้ง เพราะบอกว่าการเชื่อมต่อรู้สึกอย่างไรจริง ๆ ไม่ใช่สิ่งที่มันอ้างบนใบสเปก

ความละเอียดสตรีม
สูงสุด 6Kขอบเขตพิกเซลเนทีฟ เลือก Retina 1× หรือ 2× ตามแต่ละหน้าต่าง
อัตราเฟรม
สูงสุด 120 fpsจังหวะคงที่ ปิด B-frame หนึ่งจังหวะแคปเจอร์ต่อหนึ่งเฟรม
ความหน่วงในการประมวลผล เครือข่ายในเครื่อง
~8 msวัดภายในบนการเชื่อมต่อตรงจากอุปกรณ์ถึงอุปกรณ์ ส่วนที่เหลือคือจังหวะรีเฟรช 60 Hz ของจอภาพคุณเอง
การเข้ารหัสการส่งผ่าน
ตลอดเส้นทางเข้ารหัสตลอดเส้นทางด้วยคีย์เซสชันใหม่ทุกครั้ง
ไอคอนแอป Remio

ติดตามการสร้าง ไม่ใช่โบรชัวร์

แล็บอัปเดตเมื่อมีอะไรออกมาหรืออะไรพัง ถ้านั่นฟังดูมีประโยชน์กว่านิวส์เลตเตอร์รายไตรมาส ลิงก์ดาวน์โหลดอยู่ห่างแค่คลิกเดียว และไวต์เปเปอร์ด้านความปลอดภัยสำหรับฉบับยาวก็เช่นกัน

ไม่ต้องมีบัญชีไม่มีพิกเซลติดตามสร้างอย่างเปิดเผย