✦Lab · technisch logboek

Remio Lab — notities uit de pixelpijplijn.

Remio wordt in het openbaar gebouwd door een klein team. Dit is het werklogboek — opnamepaden die we uit elkaar hebben gehaald, encoderinstellingen die ons verrasten, latentiebudgetten die we hebben overschreden en opnieuw opgebouwd. Nieuwere items staan bovenaan; oudere blijven staan zoals ze geschreven zijn, ook als we er inmiddels anders over denken.

Laatst bijgewerkt op 2026-05-197 itemsChronologisch, nieuwste eerst

✦Onderzoeksnotities

Het technisch logboek, op volgorde.

Elk item heeft een datum, een status en staat op zichzelf. Live betekent dat de wijziging in de nieuwste versie zit, experiment betekent dat we nog meten, en gearchiveerd betekent dat we verder zijn gegaan.

Live

Het virtuele scherm volgt nu het clientvenster.

Wekenlang hield de macOS-host zijn virtuele scherm vast op de resolutie van het clientscherm, waardoor de cursor van de host en die van de client het oneens waren over de grootte zodra een van beide veranderde. We hebben de beheerder van het virtuele scherm herschreven, zodat de werkruimte van de host in realtime het canvas van het clientvenster volgt. De cursorgroottes komen nu bij elke venstergrootte overeen over de grens heen, zoals Apple Schermdeling zich altijd heeft gedragen.

logische punten van het virtuele scherm ≡ canvaspunten van het clientvenster  ·  pixelbegrenzing 3840  ·  Retina 1× of 2×, gekozen per native pixelbereik van het venster

Experiment

Waarom we het bereik van het virtuele scherm op 3840 pixels hebben begrensd.

Het interne macOS-framework dat schermmodi voor virtuele schermen opbouwt, heeft een stilletjes destructief gedrag: bij een maximale afmeting van 4096 of hoger verzint het een fantoom-2×-Retina-modus op het maximum en pikt het de actieve vlag in. Het gevraagde aantal pixels verdubbelt. We hebben dat in vier nachten van testen en loggen empirisch bevestigd. Achtendertighonderdveertig past op elke Retina-MacBook op volledig scherm plus een externe 4K-monitor, en het framework houdt op met verzinnen. We blijven de lange staart in de gaten houden.

empirische storing bij ≥ 4096  ·  begrenzing = 3840  ·  dekt MacBook Pro 16″ Retina (3456 × 2234) en externe 4K (3840 × 2160)

Live

Terug naar de vorige versie van de streamingengine na een experiment van een week.

We hebben onze streamingengine opnieuw gebouwd op een nieuwere branch, in de hoop dat de bijgewerkte pacinglogica een paar milliseconden zou opleveren op het pad over het lokale netwerk. In plaats daarvan werd de ontvangstbuffer slechter bij elke externe sessie die we maten: de mediaan van begin tot eind steeg met 18 ms en de spreiding werd groter. We zijn teruggegaan naar de stabiele versie op iOS, macOS, Android en Windows. De patches van de nieuwe branch zijn gearchiveerd voor het geval het gedrag van upstream verandert.

mediane latentie nieuwe versie · 64 ms op afstand  ·  mediaan vorige versie · 46 ms op afstand  ·  afstemmingsvlaggen ongewijzigd

Live

Adaptieve detectie van bitrate voor lokaal netwerk versus op afstand, vanaf de eerste round-trip-meting.

De host wacht nu op de eerste meting van de round-trip-tijd nadat de verbinding tot stand is gekomen en kiest dan een van twee bitrate-bereiken. Onder 15 ms wordt de verbinding behandeld als rechtstreeks op het lokale netwerk: start 8 Mbps, minimum 8 Mbps, maximum 30 Mbps. Boven 15 ms wordt ze behandeld als via een relay of op afstand: start 2 Mbps, minimum 300 Kbps, maximum 15 Mbps. De drempel ligt tussen wifi op hetzelfde netwerk en elke denkbare mobiele of regio-overstijgende relay, dus valse positieven zijn zeldzaam geweest in de bètatelemetrie.

lokaal rechtstreeks · 1 – 5 ms  ·  wifi hetzelfde netwerk · 5 – 10 ms  ·  regionale relay · 30 – 80 ms  ·  4G · 40 – 100 ms

Live

Hardware-H.265 op AMD als primaire encoder van de Windows-host.

Na een lange vergelijking met concurrerende encoders won hardware-H.265 op AMD elke benchmark voor de Windows-host waar wij om gaven: lagere mediane encodeertijd, lagere piek bij keyframes, en de voorinstelling met constante bitrate en extreem lage latentie gedraagt zich voorspelbaar onder bufferdruk. H.264 blijft de terugval wanneer de gpu het er niet mee eens is. B-frames staan uit. De vlag voor lage vertraging staat aan. De encoder geeft per opnametik altijd precies één frame af.

bitrate · 8 Mbps constant  ·  fps · 60  ·  buffer · 1 frame  ·  B-frames · 0  ·  voorinstelling · extreem lage latentie

Gearchiveerd

Waarom we helemaal zijn gestopt met het bufferen van frames.

Een extern bureaublad is geen videogesprek. Elk frame is de nieuwste toestand van het scherm. Een oud frame is per definitie een leugen. We hebben het ontvangstpad herbouwd, zodat er geen afspeelbuffer is: een frame komt binnen, wordt gedecodeerd en getoond, in die volgorde, binnen hetzelfde frame-interval. Een verloren pakket wordt meteen opnieuw verstuurd als het nog op tijd kan aankomen; kan dat niet, dan slaat Remio het over en vraagt om een vers frame in plaats van te wachten. We accepteren af en toe een korte bevriezing. We accepteren niet de voortdurende milliseconden-heffing van een wachtrij.

afgedwongen afspeelvertraging · min 0 / max 0  ·  minimale afspeelvertraging · 0  ·  verloren pakketten opnieuw verstuurd als het op tijd kan, anders een vers frame

Gearchiveerd

Het latentiebudget, voor het eerst opgeschreven.

We zaten in een kamer en werkten terug vanaf het getal dat gebruikers moeten voelen — minder dan twintig milliseconden, van glas tot glas, bij een gewone sessie op het lokale netwerk. Opname, codering, pacing, verzending, ontvangstbuffer, decodering, weergave. We schreven elk onderdeel op en gaven het een budget in milliseconden waaraan we konden meten. De meeste items in dit logboek komen voort uit het verdedigen van die getallen in echt verkeer.

opname · 1 ms  ·  codering · 3 ms  ·  pacingburst · ≤ 10 ms  ·  ontvangstbuffer · 0 ms  ·  decodering · 2 ms  ·  weergave · 1 ms

✦Signaalbereik

Wat we meten, sessie na sessie.

Deze vier getallen staan in elke release-opmerking, omdat ze beschrijven hoe de verbinding echt aanvoelt — niet wat ze op een specificatieblad belooft.

Streamresolutie
Tot 6Knative pixelbereik, 1× of 2× Retina gekozen per venster
Framerate
Tot 120 fpsvaste cadans, B-frames uitgeschakeld, één opnametik per frame
Verwerkingslatentie, lokaal netwerk
~8 msintern gemeten op een rechtstreekse verbinding van apparaat naar apparaat — de rest is het eigen verversingsritme van 60 Hz van je scherm
Transportversleuteling
End-to-endend-to-end-versleuteling met telkens een nieuwe sessiesleutel
Remio-appicoon

Volg de bouw, niet de brochure.

Het lab wordt bijgewerkt wanneer er iets landt of iets stukgaat. Als dat nuttiger klinkt dan een nieuwsbrief per kwartaal, is de downloadlink maar één klik weg — en het beveiligingswhitepaper ook, voor de lange versie.

Geen accountGeen trackingpixelIn het openbaar gebouwd