Zaloguj się

Jak przyspieszyliśmy udostępnianie ekranu czterokrotnie

Inżynierska historia o tym, jak skróciliśmy opóźnienie udostępniania ekranu w Cliqer z ponad dwóch sekund do około pół sekundy.

Cliqer Team

3 września 2026 · czas czytania: 6 min

A software engineer reviewing a video latency graph on a monitor in a dimly lit office

Opóźnienie udostępniania ekranu to jeden z tych problemów, które zauważasz dopiero wtedy, gdy jest źle. Prezenter przełącza na kolejny slajd, a widzowie oglądający udostępniony ekran dostrzegają to z wyczuwalnym poślizgiem. Nic się nie psuje, po prostu coś jest nie tak. W ciągu kilku wydań dokładnie przyjrzeliśmy się temu, skąd bierze się to opóźnienie w udostępnianiu ekranu w Cliqer, i zmniejszyliśmy stałe opóźnienie z ponad dwóch sekund do około pół sekundy, czyli mniej więcej czterokrotnie. Oto, jak to zrobiliśmy, opisane prostym językiem.

Nie będziemy ukrywać się za nazwami kodowymi ani udawać, że istniało jedno cudowne rozwiązanie. Były trzy osobne poprawki, każda wymierzona w inne miejsce, w którym kryło się opóźnienie, a ich efekty się sumowały.

Najważniejsze wnioski
  • Trzy poprawki, które się sumują: brak podwójnego kodowania, ciaśniejszy bufor i zapisana w pamięci podręcznej klatka kluczowa dla nowych widzów.
  • Stałe opóźnienie spadło z ponad dwóch sekund do około pół sekundy, czyli mniej więcej czterokrotnie.
  • Nic z tego nie wymaga zmiany ustawień. Działa automatycznie w potoku udostępniania ekranu aplikacji desktopowej.

Skąd w ogóle biorą się opóźnienia przy udostępnianiu ekranu

Gdy udostępniasz ekran, zanim widz zobaczy klatkę, muszą się wydarzyć trzy rzeczy: Twój komputer musi ją przechwycić, zakodować do postaci wideo i wysłać. Każdy z tych kroków może po cichu dodawać opóźnienie, a efekty się kumulują. Wolny enkoder, ostrożny bufor i czekanie na kolejną pełną klatkę mogą łatwo dać razem dwie lub trzy sekundy, nawet przy szybkim łączu.

Najtrudniejsze jest to, że żaden z tych etapów z osobna nie wygląda na zepsuty. Przechwytywanie działa. Kodowanie działa. Strumień dociera. Po prostu dociera za późno, a „po prostu za późno” trudno zdiagnozować bez mierzenia każdego etapu osobno.

Jeśli udostępnianie ekranu wydaje się opóźnione, ale cała reszta połączenia działa bez zarzutu, przyjrzyj się konkretnie potokowi wideo, a nie ogólnemu połączeniu z internetem. Z perspektywy widza oba problemy wyglądają identycznie, ale rozwiązuje się je zupełnie inaczej.

Poprawka pierwsza: koniec z kodowaniem tego samego obrazu dwa razy

Pierwszym źródłem opóźnienia była zmarnowana praca. Udostępnianie ekranu i NDI było w tle kodowane dwukrotnie, osobno dla każdej ścieżki wyjściowej, a nieruchomy slajd był kodowany w kółko, mimo że na ekranie nic się nie zmieniało. To podwajało obciążenie enkodera bez żadnej korzyści wizualnej i sprawiało, że potok był zawsze bardziej zajęty, niż musiał, co przesuwa każdą klatkę dalej w kolejce.

Usunięcie zdublowanego przebiegu kodowania i pomijanie ponownego kodowania, gdy obraz się nie zmienił, od razu zwolniło sporo mocy procesora. Mniejsza rywalizacja o enkoder oznacza, że każda klatka, która faktycznie wymaga zakodowania, jest przetwarzana szybciej.

Poprawka druga: ciaśniejszy bufor bez utraty odporności

Drugim źródłem był bufor między enkoderem a siecią, czyli element, który pochłania krótkie zakłócenia sieci, żeby przycięcie na łączu nie zamieniło się w przycięcie na ekranie. Takie bufory to z natury kompromis: za mały sprawia, że drobne zakłócenie powoduje widoczne zniekształcenia, a za duży dodaje opóźnienie do każdej pojedynczej klatki na wypadek, gdyby coś poszło nie tak później.

Bufor miał hojnie ustawiony rozmiar, przez co w typowej sytuacji dodawał opóźnienie do każdej klatki, żeby zabezpieczyć się przed rzadkim przypadkiem. Zmniejszenie go skróciło najgorsze opóźnienie z kilku sekund do znacznie poniżej jednej, a jednocześnie nadal pozwala przetrwać krótkie zakłócenia sieci bez widocznych zniekształceń. To typ poprawki, która w diffie wygląda jak zmiana jednej małej liczby, a w rzeczywistości jest świadomą decyzją o tym, który rodzaj awarii wolisz.

Poprawka trzecia: nowi widzowie nie czekają już na kolejną klatkę kluczową

Trzecia poprawka dotyczyła konkretnego, bolesnego momentu: tego, co się dzieje, gdy ktoś dołącza do już trwającego udostępniania. Kompresja wideo polega na tym, że pełne klatki, zwane klatkami kluczowymi, wysyłane są tylko co jakiś czas, a pomiędzy nimi idą tańsze klatki typu „co się zmieniło od ostatniego razu”. Widz, który dołącza w trakcie strumienia, nie jest w stanie odczytać tych klatek pośrednich, dopóki nie otrzyma klatki kluczowej, od której może zacząć, a wcześniej oznaczało to czekanie na kolejną zaplanowaną, nawet do trzech sekund.

Rozwiązaniem było przechowywanie najnowszej klatki kluczowej w pamięci podręcznej i przekazywanie jej nowemu subskrybentowi w chwili dołączenia, zamiast kazać mu czekać na następną według harmonogramu. W połączeniu z taktowaniem klatek opartym na interwałach, opisanym w naszej dokumentacji udostępniania ekranu, nowi widzowie widzą teraz obraz w ciągu milisekund od dołączenia, zamiast czekać nawet trzy sekundy na kolejną klatkę kluczową.

Po zsumowaniu wszystkich trzech poprawek ponad dwusekundowe stałe opóźnienie, któremu większość osób nigdy do końca nie ufała, zmieniło się w mniej więcej pół sekundy, czyli około czterokrotną poprawę, przy mniejszym zużyciu procesora i przepustowości niż wcześniej. Liczy się tu też pełna liczba klatek na sekundę: wideo Programu było po cichu ograniczone do około 31 klatek na sekundę niezależnie od źródła, więc udostępnianie w 60 fps wygląda teraz po stronie odbiorcy równie płynnie jak na ekranie prezentera.

Co to oznacza, jeśli prezentujesz już teraz

Nic z tego nie wymaga zmiany ustawień. Działa w potoku udostępniania ekranu aplikacji desktopowej i obowiązuje niezależnie od tego, czy udostępniasz jeden monitor niewielkiej widowni, czy prowadzisz pełną produkcję w Studio z wieloma źródłami, w tym w workflow vMix, które opierają się na szybkim, przewidywalnym sygnale. W Cliqer 3 wideo w Studio na komputerach Mac działa w trybie zero copy: klatki z kamery, źródła i Program pozostają w pamięci GPU, a sprzętowy enkoder odczytuje Program bezpośrednio z powierzchni GPU. Cliqer 3 przez cały czas pokazuje też liczbę klatek Programu oraz obciążenie GPU i CPU w pasku stanu Studio, więc możesz samodzielnie sprawdzić liczbę klatek w trakcie wydarzenia. Jeśli oprócz pracy nad opóźnieniem chcesz dostroić jakość względem przepustowości, ustawienia udostępniania ekranu obejmują wybór kodeka, rozdzielczość i bitrate, a wersja desktopowa 2.2.0 dodała możliwość dołączenia dźwięku systemowego lub z mikrofonu bezpośrednio do udostępniania.

W konfiguracjach hybrydowych, w których opóźnienie było najbardziej widoczne, zwłaszcza gdy zdalny prezenter ogląda udostępniony ekran i reaguje na żywo, warto połączyć to z naszym poradnikiem o eliminowaniu opóźnień udostępniania ekranu w spotkaniach hybrydowych oraz z artykułem wyjaśniającym, dlaczego opóźnienie pilota do prezentacji w milisekundach ma po stronie sterowania równie duże znaczenie jak po stronie wideo.

Gdzie podziewa się reszta opóźnienia

Udostępnianie ekranu to jeden etap podróży. Drugim jest sama ścieżka sieciowa: czy połączenie między prezenterem a widzem jest bezpośrednie, czy przekazywane, i co się dzieje w sieciach, które blokują bezpośredni ruch peer-to-peer. Tę stronę omawiamy, łącznie z tym, dlaczego w niektórych sieciach tego opóźnienia nigdy nie da się całkowicie wyeliminować, w artykułach czym są serwery TURN i czy WebRTC jest bezpieczny.

EtapPrzedPo
KodowanieZdublowany przebieg kodowania, ciągłe ponowne kodowanie statycznych klatekJeden przebieg, pomija niezmienione klatki
BuforowanieDuży bufor, dodaje opóźnienie do każdej klatkiCiaśniejszy bufor, nadal pochłania krótkie zakłócenia
Dołączenie nowego widzaCzeka do 3 sekund na kolejną klatkę kluczowąKlatka kluczowa z pamięci podręcznej dostarczana natychmiast
Stałe opóźnieniePonad 2 sekundyOkoło 0,5 sekundy

Czym są serwery TURN

Dlaczego część pozostałego opóźnienia pochodzi ze ścieżki sieciowej, a nie z enkodera.

Jak wyeliminować opóźnienia udostępniania ekranu

Więcej poprawek dla konfiguracji hybrydowych, w których zdalny prezenter ogląda udostępniony ekran.

Ustawienia udostępniania ekranu

Ustawienia kodeka, rozdzielczości i bitrate'u do dostrajania jakości względem przepustowości.

Opóźnienie pilota do prezentacji w milisekundach

Dlaczego opóźnienie po stronie sterowania ma równie duże znaczenie jak sam obraz wideo.

FAQ

Wypróbuj sam

Najszybciej poczujesz różnicę, udostępniając ekran i obserwując twarz osoby, która go widzi. Pobierz Cliqer za darmo i wypróbuj udostępnianie ekranu we własnej konfiguracji, poznaj pełne możliwości udostępniania ekranu albo porównaj plany w cenniku.

engineeringscreen sharinglatencyperformance

Autor: Cliqer Team

Tworzymy Cliqer, pilot internetowy używany na scenach, w salach wykładowych i salach konferencyjnych na całym świecie.

Poprowadź swoje następne show z Cliqer

Dowolne slajdy, dowolny telefon, w dowolnym miejscu. Aplikacja desktopowa hostuje pokój, prezenterzy po prostu otwierają link.

Czytaj dalej

Więcej: nowości produktowe na Twoje następne show

A laptop running Cliqer Studio and a phone running Cliqer Remote on a backstage tech table, the stage projection wall glowing behind them
Nowości produktowe

Dlaczego Cliqer 3 jest natywny: co próbowała wersja 2 i dlaczego natywny silnik wygrywa

Dlaczego Cliqer 3 jest natywny: silnik w Rust, sprzętowe przetwarzanie wideo, prawdziwe wyjścia na wyświetlacze i NDI zamiast aplikacji webowej w desktopowej obudowie.
A presenter holds a phone remote: one half seen through a thermal camera glowing hot, the other half cool in mint stage light
Nowości produktowe

Dlaczego wyrzuciliśmy naszą aplikację we Flutterze i zbudowaliśmy Cliqer Remote od nowa natywnie, na rdzeniu w Rust

Zbudowaliśmy Cliqer Remote we Flutterze, zmierzyliśmy go na prawdziwym telefonie, a potem przebudowaliśmy natywnie na jednym rdzeniu w Rust: o połowę mniejsze zużycie baterii, zero nagrzewania. Liczby i wnioski.
A dedicated server rack glowing mint in a dark data hall
Nowości produktowe

Dlaczego przenieśliśmy warstwę realtime Cliqer z Cloudflare (i dlaczego wciąż jesteśmy ich fanami)

Cztery miesiące na edge'u Cloudflare: co się psuło, co zbudowaliśmy, żeby sobie z tym poradzić, i dlaczego Cliqer działa teraz na naszych własnych dedykowanych serwerach.
Newsletter

Otrzymaj kolejny poradnik przed swoim następnym show

Praktyczne poradniki dla prezenterów, ekip AV i zespołów eventowych oraz wydania Cliqer, które mają znaczenie. Bez spamu, rezygnacja jednym kliknięciem.