import { SettingsPane } from './SettingsPane' import { SettingsSection } from './SettingsSection' /** * Ustawienia wideo instancji. * * TO JEST MIEJSCE DLA TECHNIKA, NIE DLA OSOBY ZAKLADAJACEJ WEBINAR. * --------------------------------------------------------------------------- * Klucze dostawcow (LiveKit, Zoom, Jitsi) i sekret webhooka ustawia sie tutaj * RAZ, przy wdrozeniu instancji u klienta. Osoba tworzaca webinar nigdy tego * nie dotyka: w formularzu webinaru wybiera tylko gotowego dostawce z listy * i klika "Utworz pokoj". Dlatego instrukcja techniczna jest tutaj, a nie * przy webinarze. * * Wczesniej tych kluczy NIE DALO SIE ustawic przez panel (byly wylacznie * w bazie/zmiennych srodowiskowych), a instrukcja "?" przy webinarze mylila, * bo odsylala do nieistniejacej sekcji Wideo. Ta strona domyka te luke. */ const KEYS = [ 'VIDEO_PROVIDER', 'VIDEO_WEBHOOK_SECRET', 'VIDEO_DELETE_AFTER_DOWNLOAD', // LiveKit 'LIVEKIT_URL', 'LIVEKIT_API_KEY', 'LIVEKIT_API_SECRET', // Jitsi 'JITSI_DOMAIN', 'JITSI_JWT_ENABLED', 'JITSI_APP_ID', 'JITSI_APP_SECRET', // Zoom 'ZOOM_ACCOUNT_ID', 'ZOOM_CLIENT_ID', 'ZOOM_CLIENT_SECRET', 'ZOOM_SDK_KEY', 'ZOOM_SDK_SECRET', ] export function VideoSettingsPage() { return ( {({ settings, onSave, saving }) => ( } /> )} ) } /** * Instrukcja techniczna, ktora WCZESNIEJ byla w oknie "?" przy webinarze. * Jej miejsce jest tu: to jednorazowa konfiguracja infrastruktury. */ function VideoInstructions() { return (
Jak skonfigurować dostawcę wideo (instrukcja dla administratora)

Wybierz jednego dostawcę w polu VIDEO_PROVIDER i uzupełnij jego klucze. Pozostali dostawcy mogą zostać puści. Po zapisaniu konfiguracji osoba zakładająca webinar wybiera dostawcę z gotowej listy i klika „Utwórz pokój" - bez żadnych kroków technicznych.

LiveKit (zalecany)

Serwer wideo uruchamiany na własnej infrastrukturze. Uprawnienia egzekwuje serwer na podstawie podpisanego tokenu, nagrywanie działa automatycznie.

  1. Uruchom serwer: profil Docker Compose „livekit" (docker compose --profile livekit up -d). Nagrywanie wymaga usług Redis i Egress z tego profilu.
  2. Wpisz parę klucz-sekret w LIVEKIT_API_KEY i LIVEKIT_API_SECRET.
  3. Podaj adres WebSocket serwera w LIVEKIT_URL (np. wss://twoj-serwer; lokalnie ws://localhost:7880).

Zoom

Obraz osadzony w oknie webinaru. Wymaga płatnego konta Zoom (min. Pro) i dwóch aplikacji na koncie dewelopera.

  1. Na marketplace.zoom.us utwórz aplikację Server-to-Server OAuth - da Account ID, Client ID, Client Secret. Dodaj zakresy: meeting:write, meeting:read, recording:read, recording:write.
  2. Wpisz je w ZOOM_ACCOUNT_ID, ZOOM_CLIENT_ID, ZOOM_CLIENT_SECRET.
  3. Utwórz drugą aplikację Meeting SDK - da SDK Key i SDK Secret. Wpisz w ZOOM_SDK_KEY i ZOOM_SDK_SECRET.
  4. W Event Subscriptions dodaj adres /api/webhooks/video/zoom i zdarzenia: Recording Completed, Participant joined/left. Zoom poda Secret Token - wpisz go w VIDEO_WEBHOOK_SECRET.

Uwaga: Zoom nie egzekwuje uprawnień do obrazu i dźwięku per uczestnik - steruje nimi na poziomie całego spotkania (jak Jitsi, nie jak LiveKit).

Jitsi Meet

Publiczny meet.jit.si działa bez konta (JITSI_DOMAIN), ale pokój jest wtedy otwarty dla każdego, kto zna adres. Własny serwer z modułem JWT pozwala włączyć JITSI_JWT_ENABLED i wpisać JITSI_APP_ID oraz JITSI_APP_SECRET.

Bez wbudowanego wideo (NONE)

Ustaw VIDEO_PROVIDER na NONE. Obraz idzie zewnętrznym narzędziem - link wkleja się w formularzu każdego webinaru. Czat, pytania i zapytania ofertowe zostają na tej platformie.

) }