Il relay verso YouTube ora gestisce _air senza traccia audio, ritenta activate_broadcast finché l'ingest è active e riduce la finestra scheduledStartTime a ~20s. Co-authored-by: Cursor <cursoragent@cursor.com>
69 lines
3.1 KiB
Markdown
69 lines
3.1 KiB
Markdown
# Diretta YouTube dall’app (invito staff)
|
||
|
||
Percorso per il **responsabile trasmissione** invitato via email: accede in app e avvia la live su YouTube.
|
||
|
||
## Prerequisiti (società)
|
||
|
||
- Piano **Premium Light** o **Premium Full** attivo
|
||
- `YOUTUBE_CLIENT_ID` / `YOUTUBE_CLIENT_SECRET` configurati sul server
|
||
- Partita programmata per la squadra
|
||
|
||
### Canale usato
|
||
|
||
| Piano | Canale YouTube in diretta |
|
||
|-------|--------------------------|
|
||
| Premium Light | Sempre **Match Live TV** (nessun OAuth società) |
|
||
| Premium Full, canale collegato | Canale **della società** |
|
||
| Premium Full, canale non collegato | **Match Live TV** (default, come Light) |
|
||
|
||
Il collegamento del canale società è **opzionale** su Full: si fa dal sito (pagina società → sezione YouTube Live) o in futuro da app; finché non c’è OAuth, l’app trasmette sul canale piattaforma.
|
||
|
||
## 1. Invito
|
||
|
||
1. Il titolare società → **Responsabili trasmissione** → invita `tua@email.it`
|
||
2. L’invitato apre il link (web o **Apri invito nell’app**)
|
||
3. Registrazione / login con **la stessa email** dell’invito
|
||
4. L’app accetta l’invito automaticamente dopo il login
|
||
|
||
API: `GET /api/v1/invitations/:token`, `POST /api/v1/invitations/:token/accept`
|
||
|
||
## 2. Collega canale YouTube (opzionale, Premium Full)
|
||
|
||
Solo se la società vuole il **proprio** canale invece di Match Live TV:
|
||
|
||
1. Sul sito: pagina società (`/clubs/:id`) → **Collega il canale YouTube della società**
|
||
2. Oppure (se abilitato) OAuth da app al tocco YouTube quando non c’è ancora canale piattaforma
|
||
|
||
## 3. Scegli la partita
|
||
|
||
Nella home app (**Partite**):
|
||
|
||
- **Partita programmata** — scegli dal calendario una gara già inserita (sito o app)
|
||
- **Nuova partita** — programma data/ora oppure **Avvia subito** senza orario
|
||
|
||
Poi tocca la card o conferma dal foglio: si apre il wizard (Partita → Trasmissione → …).
|
||
|
||
## 4. Avvia diretta
|
||
|
||
1. Nel wizard, seleziona **YouTube Live** (se il piano lo consente e il canale è pronto)
|
||
2. Completa i passi → **Camera**
|
||
3. Il telefono invia RTMP a MediaMTX; il server inoltra su YouTube
|
||
|
||
## Sviluppo locale
|
||
|
||
- App: `flutter run --dart-define=API_BASE_URL=http://10.0.2.2:3000` (emulatore) o IP LAN del PC (telefono)
|
||
- Invito deep link: `matchlivetv://join/TOKEN` oppure incolla token aprendo `/login?invite=TOKEN`
|
||
- OAuth: utente in **Utenti di test** Google Cloud
|
||
|
||
## Troubleshooting
|
||
|
||
| Problema | Soluzione |
|
||
|----------|-----------|
|
||
| Nessuna squadra in app | Accetta invito con email corretta |
|
||
| YouTube disabilitato | Premium Light o Full |
|
||
| YouTube non selezionabile | Token canale Match Live TV sul server (`admin` → YouTube piattaforma) |
|
||
| OAuth «app non verificata» | Utente di test Google + Avanzate |
|
||
| Live non su YouTube | Verifica relay ffmpeg / `stream_key` in sessione |
|
||
| YouTube «tra X minuti» / COPERTINA | Relay ffmpeg verso YouTube non attivo o ingest `inactive`. Dopo deploy, riavvia la diretta dall’app; la live dovrebbe partire entro ~30s con segnale su `_air`. |
|
||
| YouTube resta in «waiting» | Verifica su server `log/youtube_relay_<session_id>.log` nel container **sidekiq**; attendi che `streamStatus` diventi `active` (il job ritenta l’attivazione per ~6 min). |
|