# Guide DRM & Streaming Adaptatif - AfricanMusic

## Vue d'ensemble

Ce guide explique comment AfricanMusic protège le contenu audio et optimise la diffusion en streaming.

## 🔒 DRM (Digital Rights Management)

### Fonctionnement

1. **Génération de liens sécurisés**
   - Chaque demande de streaming génère un token unique
   - Le token expire après 24 heures (configurable)
   - Les URLs incluent une signature cryptographique pour prévenir la falsification

2. **Vérification**
   - Validation du token à chaque lecture
   - Vérification de l'adresse IP et du user agent
   - Suivi des appareils par device_id

3. **Protection**
   - Les URLs audio brutes ne sont jamais exposées au client
   - Les tokens sont liés à l'utilisateur et à la piste spécifique
   - Expiration automatique des liens

### API Endpoint

**Obtenir une URL de streaming sécurisée:**

```http
GET /api/stream/{trackId}?quality=high
Authorization: Bearer {user_token}
X-Device-ID: {device_id}

Response:
{
  "streamUrl": "https://cdn.africanmusic.online/audio/track.mp3?token=abc123&expires=1234567890&sig=xyz789",
  "expiresAt": "2025-12-19T12:00:00Z",
  "quality": "high",
  "isDrmProtected": true
}
```

## 📡 Streaming Adaptatif

### Qualités disponibles

| Qualité | Bitrate | Taille/min | Requis |
|---------|---------|------------|--------|
| Économique (low) | ~24 kbps | 0.5 Mo | Gratuit |
| Normal | ~96 kbps | 1 Mo | Gratuit |
| Élevé (high) | ~160 kbps | 2 Mo | Gratuit |
| Très élevé (very_high) | ~320 kbps | 3.5 Mo | Premium |

### Détection automatique

Le système détecte automatiquement la bande passante et recommande la qualité optimale:

```javascript
// Mesure de la bande passante
const bandwidth = await measureBandwidth()

// Recommandation automatique
if (bandwidth >= 2 Mbps) → very_high
if (bandwidth >= 1 Mbps) → high
if (bandwidth >= 0.5 Mbps) → normal
if (bandwidth < 0.5 Mbps) → low
```

### API de qualité réseau

```http
POST /api/network-quality
Authorization: Bearer {user_token}
Content-Type: application/json

{
  "connectionType": "4g",
  "effectiveBandwidth": 1.5,
  "qualitySelected": "high"
}

Response:
{
  "recommendedQuality": "high",
  "bandwidth": 1.5,
  "connectionType": "4g"
}
```

## 🎵 Intégration dans le lecteur

### Flux de streaming

1. **Utilisateur lance une piste**
2. **Player demande un stream token** via `/api/stream/{trackId}?quality=high`
3. **Backend génère token sécurisé** avec expiration
4. **Player reçoit URL signée** et commence la lecture
5. **CDN vérifie le token** avant de servir l'audio
6. **Surveillance de la qualité** - adaptation automatique si la connexion change

### Changement de qualité dynamique

```typescript
// Détection de problèmes réseau
if (bufferHealth < 0.3 && currentQuality > 'low') {
  // Réduction automatique de la qualité
  switchToLowerQuality()
}

// Amélioration de la connexion
if (bufferHealth > 0.8 && bandwidth > threshold) {
  // Augmentation de la qualité
  switchToHigherQuality()
}
```

## 🛡️ Sécurité

### Protection contre

- **Téléchargement non autorisé** - URLs expirables et signatures
- **Partage de liens** - Tokens liés à l'utilisateur et à l'appareil
- **Injection de contenu** - Validation cryptographique des URLs
- **Attaques DDoS** - Rate limiting sur les endpoints de streaming

### Variables d'environnement requises

```bash
STREAM_SECRET=votre-secret-aleatoire-tres-long
```

## 📊 Analytics & Monitoring

### Métriques suivies

- Qualité de streaming par utilisateur
- Type de connexion (WiFi, 4G, 3G)
- Bande passante effective
- Taux de changement de qualité
- Durée des tokens avant expiration

### Table de logs

```sql
SELECT 
  connection_type,
  AVG(effective_bandwidth_mbps) as avg_bandwidth,
  quality_selected,
  COUNT(*) as count
FROM network_quality_logs
WHERE created_at > NOW() - INTERVAL '7 days'
GROUP BY connection_type, quality_selected
ORDER BY count DESC
```

## 🚀 Optimisations futures

1. **Streaming HLS/DASH** - Segmentation adaptative en temps réel
2. **Cache intelligent** - Pré-buffering des pistes suivantes
3. **Compression avancée** - Opus codec pour meilleure qualité/taille
4. **Edge caching** - Distribution via CDN global
5. **Watermarking** - Traçabilité des fuites de contenu

## 📝 Notes d'implémentation

- Les tokens de streaming sont nettoyés automatiquement après expiration
- Le système supporte plusieurs appareils simultanés pour un utilisateur
- Les utilisateurs Premium ont accès à la qualité maximale (320 kbps)
- La qualité "Économique" est optimisée pour les connexions lentes (2G/3G)

---

**Documentation complète:** https://docs.africanmusic.online/drm-streaming
