← Phase 5 / Live Travel Experiences
🎥 Module 27

Live Travel Experiences

Streaming live in-app avec latence < 300ms via Agora.io, rooms co-voyage immersives pour 2 à 8 voyageurs qui explorent ensemble en temps réel avec carte partagée multi-curseurs, vote collectif et copilote IA de groupe. Le voyage collaboratif réinventé.

Agora.io RTCLive StreamingCo-VoyageReal-Time MapSocket.io
14
User Stories
4 sem.
S38–S39
< 300ms
Latence live
8 max
Co-voyageurs/room
User Stories — M27

📋 14 User Stories — Live Travel Experiences

US27.1 En tant qu'utilisateur, je peux démarrer un live depuis n'importe quel écran de l'app (bouton persistant)
US27.2 En tant que spectateur, je reçois une notification push dès qu'un suivi démarre un live
US27.3 En tant qu'utilisateur, je vois une overlay carte en temps réel pendant le live (position du streamer)
US27.4 En tant que spectateur, je peux envoyer des réactions emoji flottantes pendant le live
US27.5 En tant que streamer, je vois les Super Comments (messages mis en avant, €0.99 chacun)
US27.6 En tant que système, j'archive automatiquement le live en Reel après la diffusion (HLS → MP4)
US27.7 En tant que système, je détecte le contenu inapproprié en temps réel via IA (modération live)
US27.8 En tant qu'utilisateur, je peux rejoindre une Room Co-Voyage (2–8 participants)
US27.9 En tant que participant, je vois une carte partagée avec multi-curseurs en temps réel
US27.10 En tant que participant, le copilote IA de groupe répond aux questions de toute la room
US27.11 En tant que participant, je peux voter pour une activité via sondage en temps réel (10s timer)
US27.12 En tant que participant, j'exporte l'itinéraire collectif élaboré en fin de session en 1 tap
US27.13 En tant que créateur de room, je choisis entre room publique (code d'accès) ou privée (invitations)
US27.14 En tant que système, je compresse la vidéo live avant upload (react-native-compressor + Lambda)
Architecture

📡 Infrastructure Live & Co-Voyage

📹 Pipeline Live Streaming

Mobile Client Capture caméra + micro → Agora RTC SDK (< 300ms)
Agora.io CDN Distribution mondiale avec edge nodes — < 300ms latence
RTMP Ingest Serveur RTMP (Lambda) → HLS chunks toutes les 2s
Cloudflare Stream Stockage + distribution HLS → spectateurs monde entier
Archive Job Lambda ffmpeg : HLS segments → MP4 Reel après fin live
Modération IA Frame sampling toutes les 5s → Hive Moderation API

🗺️ Architecture Co-Voyage Room

// Socket.io Events
room:join → broadcast positions
cursor:move → {userId, lat, lng}
map:pan → sync viewport all users
vote:start → {options[], duration:10}
vote:cast → {userId, optionId}
vote:result → broadcast winner
itinerary:add → append & sync
ai:ask → group GPT-4o context
room:leave → cleanup cursors
⚡ Performance targets
Cursor sync : < 50ms P95
Vote broadcast : < 100ms
IA réponse room : < 3s P95
Max 8 curseurs simultanés/room
Stack Technique

🛠️ Technologies M27

📹 Streaming Video

Agora.io RTC SDK
Streaming < 300ms — SDK React Native officiel
LiveKit (self-hosted)
Alternative open-source Agora (backup)
Cloudflare Stream
CDN vidéo HLS + archive live → Reel
RTMP Server (Lambda)
Ingestion RTMP → HLS segments
Mux Analytics
QoE metrics : rebuffering, bitrate, latence

🔄 Temps Réel

Socket.io clusters
Multi-curseurs & événements room (Redis adapter)
Redis Pub/Sub
Synchronisation état entre instances Socket.io
react-native-compressor
Compression vidéo client avant upload
AWS Lambda ffmpeg
Transcode & archive live après diffusion
Cloudflare Workers
Edge API cursor sync ultra-basse latence

💰 Monétisation Live

Stripe Payments
Super Comments €0.99 — paiement in-app
Split 70/30
70% streamer / 30% NOMIIQ sur Super Comments
Agora Token Server
Tokens JWT temporaires pour rejoindre rooms
Hive Moderation
Frame sampling + détection NSFW temps réel
PostHog Analytics
Funnel watch time, peak concurrent viewers
Schémas Base de Données

🗄️ Nouvelles Tables M27

🗄️ live_sessions
id UUID PRIMARY KEY
host_id UUID → users
title TEXT
agora_channel_id TEXT UNIQUE
status ENUM(scheduled, live, ended)
peak_viewers INT DEFAULT 0
super_comments_revenue DECIMAL DEFAULT 0
replay_url TEXT — URL Cloudflare Stream
reel_id UUID → posts (after archive)
started_at TIMESTAMPTZ
ended_at TIMESTAMPTZ
🗄️ co_voyage_rooms
id UUID PRIMARY KEY
name TEXT
host_id UUID → users
access_code CHAR(6) UNIQUE
is_public BOOLEAN DEFAULT false
participants UUID[] — max 8
itinerary_draft JSONB — itinéraire collectif
ai_messages JSONB[] — historique IA group
status ENUM(active, closed)
created_at TIMESTAMPTZ
closed_at TIMESTAMPTZ
API REST — M27

🔌 Endpoints Live & Co-Voyage

POST /api/v1/lives Créer un live (body: title, thumbnail) 🔒
GET /api/v1/lives/feed Feed des lives actifs en cours public
GET /api/v1/lives/:id Détail d'un live (viewers, titre, statut) public
POST /api/v1/lives/:id/end Terminer son live (archive → Reel) 🔒
POST /api/v1/lives/:id/super-comment Envoyer un Super Comment (€0.99) 🔒
GET /api/v1/lives/:id/token Obtenir token Agora RTC (viewer/host) 🔒
POST /api/v1/rooms Créer une room Co-Voyage (body: name, public) 🔒
GET /api/v1/rooms/:code Rejoindre une room via code d'accès 🔒
GET /api/v1/rooms/:id/state Snapshot état room (curseurs, itinéraire) 🔒
POST /api/v1/rooms/:id/vote Lancer un vote rapide (10s timer) 🔒
GET /api/v1/rooms/:id/itinerary Exporter l'itinéraire collectif 🔒
DELETE /api/v1/rooms/:id Fermer une room (host only) 🔒
Critères d'acceptation

✅ Definition of Done — M27

Latence Agora live < 300ms P95 mesurée sur 5 régions géographiques différentes
Archivage live → Reel effectif dans les 5 minutes après fin de diffusion
Modération IA : détection NSFW > 95% précision sur benchmark test (Hive API)
Room Co-Voyage : synchronisation curseurs < 50ms P95 pour 8 participants simultanés
Vote en room : résultat diffusé à tous les participants en < 100ms
Export itinéraire collectif : fonctionnel, contient toutes les destinations ajoutées par la room
Super Comments : paiement Stripe 100% opérationnel + split 70/30 vérifié en staging
Tests charge : 10k lives simultanés sans dégradation de service (stress test Agora)
KPIs M27

🎯 Objectifs de Succès

< 300ms
Latence live P95 (Agora)
50k+
Lives streamés / mois à 6 mois
5 min
Durée moyenne view live
30%
Lives archivés en Reel consultés
10k+
Rooms co-voyage créées / mois
4.2★
Note feature live in-app
€0.5
Revenu moyen Super Comments / live
< 50ms
Sync curseur co-voyage P95