feat(videochat): implement LiveKit integration for video chat functionality
- Add LiveKit client setup and token generation for room access. - Implement room management functions including CreateRoom, OpenRoom, ListRooms, and DeleteRoom. - Introduce participant management with ListParticipants and RemoveParticipant functions. - Create tests for room and participant management, ensuring proper authentication and authorization. - Add error handling for LiveKit API interactions. - Define data structures for room metadata and token responses. - Implement status endpoint for service availability check.
This commit is contained in:
61
videochat/README.md
Normal file
61
videochat/README.md
Normal file
@@ -0,0 +1,61 @@
|
||||
# Broadcast LiveKit (uno a molti)
|
||||
|
||||
Configurare i secret Encore `LiveKitURL`, `LiveKitAPIKey` e `LiveKitAPISecret` sul server.
|
||||
Il frontend usa solo il token partecipante, mai la API secret.
|
||||
|
||||
## Accesso
|
||||
|
||||
- Solo gli amministratori possono creare stanze (`POST /videochat/rooms`).
|
||||
- Il creatore è l'unico proprietario; anche un altro amministratore entra come spettatore.
|
||||
- Tutti gli utenti autenticati possono elencare i broadcast e richiedere un token.
|
||||
- Il proprietario pubblica audio, videocamera e schermo. Gli spettatori hanno
|
||||
`canPublish=false`, `canPublishData=false`, `canSubscribe=true` nel JWT firmato.
|
||||
- Nessun token frontend ha permessi amministrativi o modifica metadati.
|
||||
- Elenco partecipanti, disconnessione partecipanti e chiusura richiedono il proprietario.
|
||||
|
||||
## API
|
||||
|
||||
| Metodo | Percorso | Accesso |
|
||||
| --- | --- | --- |
|
||||
| GET | `/videochat/status` | Pubblico |
|
||||
| POST | `/videochat/rooms` | Admin (diventa proprietario) |
|
||||
| GET | `/videochat/rooms` | Autenticato |
|
||||
| POST | `/videochat/token` | Autenticato |
|
||||
| DELETE | `/videochat/rooms/:roomName` | Proprietario |
|
||||
| GET | `/videochat/rooms/:roomName/participants` | Proprietario |
|
||||
| DELETE | `/videochat/rooms/:roomName/participants/:identity` | Proprietario |
|
||||
|
||||
La lista include i broadcast presenti su LiveKit (`active: true`) e le stanze
|
||||
di `personal_setup` con `can_broadcast: true` non ancora presenti (`active: false`).
|
||||
Il confronto usa il nome tecnico oppure proprietario e nome visualizzato.
|
||||
Le stanze inattive riportano il nome configurato, il proprietario e `mode: "broadcast"`;
|
||||
SID, partecipanti e data di creazione restano vuoti o zero. Non vengono create
|
||||
su LiveKit e non possono ricevere un token finché non sono avviate.
|
||||
|
||||
Le richieste usano `Authorization: Bearer <session-token>` o il cookie `session`.
|
||||
Creazione: `{"name":"Titolo della diretta","max_participants":0,"empty_timeout":300}`.
|
||||
Zero nei campi numerici usa i valori predefiniti di LiveKit; il massimo comprende
|
||||
anche il proprietario. Il timeout è in secondi.
|
||||
|
||||
La risposta stanza aggiunge `display_name`, `owner_id`, `mode: "broadcast"`.
|
||||
`name` è un identificativo univoco generato dal server: usarlo nei percorsi API e
|
||||
in `POST /videochat/token` con `{"room_name":"<name restituito>"}`.
|
||||
La risposta token include `role: "owner" | "viewer"`, `owner_id`, `server_url`,
|
||||
`participant_token`, `identity`, `room_name`, `expires_in`.
|
||||
|
||||
## Ciclo di vita
|
||||
|
||||
Le stanze sono effimere. Titolo e proprietario sono conservati nei metadati
|
||||
LiveKit per la durata della stanza, anche se Encore viene riavviato. Quando
|
||||
LiveKit elimina una stanza vuota, occorre crearne una nuova; non è un archivio
|
||||
persistente delle trasmissioni. I nomi interni non vengono riutilizzati.
|
||||
Le vecchie stanze senza metadati broadcast non compaiono nella lista e non
|
||||
ricevono nuovi token tramite questa API; non vengono eliminate automaticamente.
|
||||
I vecchi token meeting già emessi mantengono i permessi fino alla loro scadenza.
|
||||
|
||||
La disconnessione di uno spettatore non è un ban: può rientrare. La chiusura
|
||||
elimina la stanza e disconnette tutti. Su LiveKit self-hosted i JWT già emessi
|
||||
non sono revocabili da queste API: fino alla scadenza (10 minuti) possono ancora
|
||||
consentire accesso o ricreazione della vecchia stanza interna. Tale stanza non
|
||||
avrà metadati broadcast, non apparirà nella lista e non riceverà nuovi token.
|
||||
Per un blocco irrevocabile servono controllo dell'ammissione/revoca aggiuntivi.
|
||||
Reference in New Issue
Block a user