Jak czytelnie wyświetlać inputy z klawiatury i gamepada w transmisji OBS Studio

Podczas nagrywania pierwszych screencastów omawiających skróty klawiszowe w moim edytorze kodu, ciągle myślałem o tym samym: widzowie nie mają pojęcia, co tak naprawdę naciskam. Musiałem albo wywoływać na głos każdą kombinację jak Ctrl+Shift+P, albo ręcznie rysować podpowiedzi na nakładkach podczas edycji. Nieidealne rozwiązanie, szczególnie gdy film trwa pół godziny.
Gracze i speedrunnerzy spotykają się z tym problemem jeszcze częściej. Pokazanie timingów naciśnięć gamepada czy mechaniki bunny-hop w strzelance bez wizualnej nakładki jest praktycznie niemożliwe.
Zazwyczaj takie zadania rozwiązuje się obejściami: uruchamia się zewnętrzną aplikację w osobnym oknie i przechwytuje ją w OBS za pomocą przechwytywania okna z kluczem koloru. Pochłania to dodatkowe zasoby procesora i wygląda niechlujnie. Wtyczka input-overlay autorstwa dewelopera univrsal rozwiązuje to inaczej. Integruje się bezpośrednio z OBS Studio jako natywne źródło.
Co potrafi ta wtyczka
Projekt jest napisany w C++ i działa na 64-bitowych wersjach Windows i Linux. Jej zadanie jest proste: przechwytuje dane wejściowe z urządzeń i rysuje je na scenie w czasie rzeczywistym z minimalnym opóźnieniem.
Obsługiwane urządzenia obejmują:
- Standardowe klawiatury (z obsługą dowolnych układów i modyfikatorów)
- Myszy (śledzenie przycisków, kółka przewijania i ruchu kursora)
- Gamepady i kontrolery (Xbox, PlayStation, uniwersalne DirectInput/XInput)
Zamiast prymitywnego dziennika tekstowego, wtyczka wykorzystuje własne tekstury i sprite'y. Bierzemy obraz gamepada lub klawiatury, dzielimy go na stany (przycisk zwolniony / przycisk naciśnięty) i wiążemy grafikę ze zdarzeniami systemowymi.
Co w środku: architektura i zależności
Kod projektu zawiera kilka interesujących rozwiązań. Aby nie wymyślać koła na nowo dla każdego typu urządzenia, autor dołączył sprawdzone niskopoziomowe biblioteki.
Do globalnego przechwytywania klawiatury i myszy wykorzystuje libuiohook. Ta biblioteka działa na poziomie haków systemowych systemu operacyjnego, co umożliwia nasłuchiwanie danych wejściowych nawet wtedy, gdy okno OBS jest w tle lub gra działa w trybie pełnoekranowym.
Gamepady są obsługiwane przez SDL2. Gwarantuje to doskonałą kompatybilność z kontrolerami z różnych generacji bez grzebania w surowych deskryptorach urządzeń.
Integracja z mongoose zasługuje na szczególną uwagę — lekki osadzony serwer WWW. Dlaczego wtyczka do przechwytywania klawiszy miałaby go potrzebować? Jeśli transmitujesz z dwóch komputerów (jeden do gier, drugi jako koder strumieniowy), możesz wysyłać zdarzenia wejściowe przez sieć lokalną z komputera do gier bezpośrednio do instancji OBS na maszynie strumieniowej. Bardzo sprytna funkcja, która eliminuje plątaninę kabli.
Jak zbudować własną nakładkę
Konfiguracja wtyczki składa się z dwóch plików: tekstury graficznej PNG i pliku układu JSON.
Wcześniej projekt używał formatu .ini, ale ostatecznie przeszedł na JSON. Żeby nie trzeba było obliczać współrzędnych pikseli przycisków w notatniku, autor wydał wizualny edytor internetowy o nazwie Config Creation Tool (CCT).
Przesyłasz arkusz sprite'ów w przeglądarce, umieszczasz ramki ograniczające na przyciskach, łączysz je z kodami klawiszy i eksportujesz gotową konfigurację:
Po tym wystarczy dodać nowe źródło "Input Overlay" w OBS Studio, wskazać pliki JSON i PNG, a gadżet jest gotowy. Wtyczka renderuje tekstury przez potok graficzny OBS, więc narzut renderowania jest praktycznie zerowy.
Gdzie to się przydaje programistom
Może się wydawać, że to ściśle narzędzie dla streamerów. Ale w przypadku treści technicznych jest równie przydatne:
- Nagrywanie edukacyjnych screencastów. Demonstracja skrótów klawiszowych w Vim, Emacs, Blender czy VS Code pomaga widzom odtwarzać czynności na bieżąco, nie rozpraszając się przerwami.
- Testowanie gamepadów i opóźnień wejściowych. Jeśli tworzysz grę indie lub emulator, nakładka pozwala wizualnie sprawdzać naciśnięcia kontrolera z reakcjami postaci na ekranie.
- Prezentacje i demo zespołowe. Podczas złożonych scenariuszy interfejsu użytkownika lub prezentacji narzędzi terminalowych, widzowie natychmiast widzą modyfikatory i klawisze funkcyjne.
Niuansy i ograniczenia
Dokumentacja w repozytorium jest zwięzła, więc początkujący muszą poświęcić pół godziny na zrozumienie struktury sprite'ów. Stworzenie dopracowanej skórki od zera wymaga podstawowych umiejętności obsługi edytora graficznego.
Należy też pamiętać o prywatności. Ponieważ haki przechwytują dane wejściowe globalnie, podczas transmisji lub nagrywania wideo nakładka wiernie wyświetli każde naciśnięcie klawisza, jeśli zaczniesz wpisywać hasła lub prywatne dane. W takich przypadkach lepiej wcześniej ustawić skrót klawiszowy do ukrycia źródła w OBS.
Wtyczka jest również skoncentrowana na Windows i Linux x64 — kompilacje na macOS nie są oficjalnie obsługiwane.
Czy warto wypróbować
Jeśli potrzebujesz czystego, wydajnego sposobu wyświetlania danych wejściowych z urządzeń w OBS bez obejść przez przeglądarkę i spadków klatek, input-overlay jest jedną z najbardziej niezawodnych opcji.
Projekt działa od 2017 roku, zgromadził ponad 4000 gwiazdek i realizuje jedno konkretne zadanie bez rozbudowywania kodu. Wstępnie zbudowane pliki binarne są dostępne w zakładce Releases na GitHub, a gotowe presety dla gamepadów i klawiatur można znaleźć na forach OBS Project.
Powiązane projekty