# Konfiguracja serwera LiveKit. # # Klucze API nie sa tutaj: podaje je zmienna LIVEKIT_KEYS w docker-compose, # zeby nie trzymac sekretow w pliku wchodzacym do repozytorium. port: 7880 rtc: # JEDEN PORT UDP DLA WSZYSTKICH (tryb mux). # # Wczesniej byl tu zakres `port_range_start/end` 50000-50100. W tym trybie # serwer REZERWUJE OSOBNY PORT NA KAZDE POLACZENIE, a uczestnik ma ich do # dwoch. Test z botami pokazal skutek: po okolo 50 osobach pula sie konczyla # i kolejni dostawali juz tylko kandydata TCP na 7881. Przegladarka wchodzi # wtedy po TCP (zacinajacy sie obraz i dzwiek przy kazdej utracie pakietu), # klient bez obslugi ICE-TCP nie wchodzi wcale. Zmienna UDP_PORT z zakresem # NIE wlaczala muxa: przegrywala z zakresem z tego pliku. # # W trybie mux wszyscy uczestnicy dziela jeden port, rozrozniani po # identyfikatorze sesji ICE. Liczba osob nie zalezy juz od liczby portow. # # **Serwer NIE rozwija zmiennych srodowiskowych w tym pliku.** Port idzie # takze zmienna UDP_PORT z docker-compose i ona ma pierwszenstwo, wiec # instancja z zajetym 7882 zmienia jedna wartosc w .env (LIVEKIT_UDP_PORT). # **Nie dopisywac tu z powrotem port_range_start/end**: zakres wylacza mux. # # Port musi byc otwarty na firewallu. To glowna droga ruchu audio i wideo. udp_port: 7882 tcp_port: 7881 # Adres, ktory serwer rozglasza uczestnikom jako swoj. # # `use_external_ip: true` na produkcji: serwer sam wykrywa adres publiczny, # bo bez tego rozglaszalby adres wewnetrzny kontenera. # # **Przy uruchomieniu lokalnym trzeba to wylaczyc i podac 127.0.0.1** # zmienna NODE_IP: inaczej serwer rozglasza publiczny adres lacza, a # przegladarka na tej samej maszynie probuje sie tam polaczyc i nie dochodzi # do wymiany mediow. Objawia sie to tak, ze uczestnik dolacza do pokoju # i widzi liste obecnych, ale nie slyszy i nie widzi nikogo. # # UWAGA: `use_external_ip: true` **nadpisuje** zmienna NODE_IP. Przy # uruchomieniu lokalnym trzeba ustawic tu `false`, inaczej serwer i tak # wykryje publiczny adres lacza i zignoruje 127.0.0.1. use_external_ip: false # Kandydaci ICE rozglaszani takze po TCP. # # Media ida normalnie po UDP, ale przy uruchomieniu lokalnym w Dockerze # kontener Egress i przegladarka na hoscie widza serwer pod **roznymi # adresami**: przegladarka pod 127.0.0.1, Egress pod adresem kontenera. # Serwer rozglasza jeden adres (NODE_IP), wiec jedna z tych stron nie # zestawi polaczenia po UDP. # # TCP jest tu droga wspolna: dziala niezaleznie od tego, ktory adres # zostal rozgloszony, bo polaczenie zestawia sie na porcie 7881, do ktorego # obie strony docieraja. Na produkcji, gdzie serwer ma jeden adres publiczny, # ta opcja nie jest potrzebna, ale nie szkodzi: TCP zostaje droga zapasowa # dla uczestnikow za firewallem blokujacym UDP. use_ice_lite: false # TURN: przekazywanie ruchu dla uczestnikow za restrykcyjnym NAT-em. # Serwer coturn stoi obok, w tym samym profilu. turn: enabled: false # Redis: kanal do Egress. # # **Wymagany do nagrywania.** Serwer wrzuca tu zadanie nagrania, a Egress je # odbiera; bez Redisa serwer przyjmuje zadanie, nie ma go komu przekazac # i nagrywanie konczy sie timeoutem, mimo ze sam serwer dziala poprawnie. # # Do samych spotkan Redis nie jest potrzebny: serwer w trybie jednowezlowym # radzi sobie bez niego. Adres wskazuje usluge z tego samego profilu. redis: address: redis:6379 # Logi czyta administrator w terminalu, wiec bez nadmiaru szczegolow. logging: level: info json: false # Pokoj znika po wyjsciu ostatniego uczestnika. Nie trzymamy pustych pokoi: # webinar konczy sie raz, a pusty pokoj zajmowalby pamiec do restartu serwera. room: empty_timeout: 300 max_participants: 0