diff --git a/frontend/src/pages/public/RecordingTemplate.tsx b/frontend/src/pages/public/RecordingTemplate.tsx index 78a66ee..c24d9c5 100644 --- a/frontend/src/pages/public/RecordingTemplate.tsx +++ b/frontend/src/pages/public/RecordingTemplate.tsx @@ -1,7 +1,7 @@ import '@livekit/components-styles' import { GridLayout, LiveKitRoom, ParticipantTile, RoomAudioRenderer, useTracks } from '@livekit/components-react' import { RoomEvent, Track } from 'livekit-client' -import { useEffect } from 'react' +import { useEffect, useRef } from 'react' import { useSearchParams } from 'react-router-dom' /** @@ -22,25 +22,29 @@ import { useSearchParams } from 'react-router-dom' * Wlasny szablon lezy w naszym froncie i jest osiagalny po sieci Dockera, * wiec nagrywanie dziala tak samo w sieci zamknietej. * - * SYGNAL STARTU I KONCA + * SYGNAL STARTU IDZIE PRZEZ KONSOLE PRZEGLADARKI * ------------------------------------------------------------------------ - * Egress czeka na `window.START_RECORDING()`, zanim zacznie pisac plik, i na - * `window.END_RECORDING()`, zeby go domknac. **Bez wywolania pierwszej funkcji - * nagranie jest przerywane po kilkunastu sekundach** z bledem 412. Wolamy ja, - * gdy pokoj jest polaczony i sa w nim jakies sciezki: nagranie ma zaczynac sie - * od obrazu, a nie od pustej planszy. + * **Egress czyta konsole i szuka w niej napisu `START_RECORDING`.** Nie jest + * to wywolanie funkcji: przegladarka Egress dziala bez interfejsu, a jedynym + * kanalem, ktorym strona moze cokolwiek powiedziec procesowi nadrzednemu, jest + * wlasnie wyjscie konsoli. Analogicznie `END_RECORDING` domyka plik, choc przy + * zatrzymaniu z panelu robi to juz API (`StopEgress`). + * + * Wczesniejsza wersja wolala `window.START_RECORDING()`, czyli funkcje, ktorej + * nikt nigdy nie przypisywal: warunek `&& window.START_RECORDING` byl zawsze + * falszywy, a nawet gdyby nie byl, wywolanie funkcji niczego nie wypisuje. + * **Kazde nagranie konczylo sie przez to bledem 412 "Start signal not + * received"** po okolo minucie, przy poprawnie dzialajacym pokoju, szablonie + * osiagalnym po sieci Dockera i wlasciwych danych MinIO. Objaw myli, bo + * wszystko poza jedna linia dziala. + * + * Sygnal idzie, gdy pokoj jest polaczony i sa w nim jakies sciezki: nagranie + * ma zaczynac sie od obrazu, a nie od pustej planszy. * * Ta strona nie jest dla ludzi: nie ma tu panelu interakcji, banerow ani * paska akcji. Ma pokazywac obraz spotkania i nic wiecej. */ -declare global { - interface Window { - START_RECORDING?: () => void - END_RECORDING?: () => void - } -} - export function RecordingTemplate() { const [params] = useSearchParams() const url = params.get('url') ?? '' @@ -79,13 +83,16 @@ function RecordingStage() { * Sygnal startu wysylamy raz, gdy pojawi sie pierwsza sciezka. Wyslanie go * od razu po polaczeniu dawaloby kilka sekund czarnego obrazu na poczatku * kazdego nagrania. + * + * `console.log` nie jest tu debugowaniem, tylko JEDYNYM kanalem rozmowy + * z Egress: proces nadrzedny czyta wyjscie konsoli przegladarki i czeka + * dokladnie na ten napis. Nie usuwac przy porzadkowaniu logow. */ + const started = useRef(false) useEffect(() => { - if (tracks.length > 0 && window.START_RECORDING) { - window.START_RECORDING() - // wolamy tylko raz: powtorne wywolanie Egress ignoruje, ale nie ma - // powodu go zasypywac przy kazdej zmianie liczby sciezek - window.START_RECORDING = undefined + if (tracks.length > 0 && !started.current) { + started.current = true + console.log('START_RECORDING') } }, [tracks.length])