Aller au contenu principal

Streaming API

Gestion des tokens de streaming securises pour l'acces aux medias.

Base URL : /api/v2/streaming

Vue d'ensemble

Le streaming utilise des tokens temporaires pour securiser l'acces aux medias :

1. Le client demande un token de streaming
2. L'API verifie les droits (abonnement, profil, restrictions)
3. L'API genere un token signe avec expiration
4. Le client utilise le token pour acceder au stream
5. Le CDN/API verifie le token avant de servir le media

Endpoints

MethodeEndpointDescriptionAuth
POST/streaming/tokenGenerer un token de streamingOui
GET/streaming/verifyVerifier et valider un tokenNon
POST/streaming/revokeRevoquer un tokenOui
POST/streaming/drm/licenseObtenir une licence DRMOui

POST /streaming/token

Generer un token de streaming securise.

POST /api/v2/streaming/token
Authorization: Bearer <token>
Content-Type: application/json

{
"contentId": "uuid",
"contentType": "MOVIE",
"quality": "1080p"
}

Reponse 200 OK

{
"streamToken": "eyJhbG...",
"expiresAt": "2025-01-15T11:30:00.000Z",
"maxUses": 5,
"streamUrl": "https://cdn.mytelevision.app/stream/..."
}

GET /streaming/verify

Verifier et valider un token de streaming.

GET /api/v2/streaming/verify?token=eyJhbG...

Reponse 200 OK

{
"valid": true,
"contentId": "uuid",
"contentType": "MOVIE",
"quality": "1080p",
"remainingUses": 4,
"expiresAt": "2025-01-15T11:30:00.000Z"
}

POST /streaming/revoke

Revoquer un token de streaming.

POST /api/v2/streaming/revoke
Authorization: Bearer <token>
Content-Type: application/json

{
"streamToken": "eyJhbG..."
}

POST /streaming/drm/license

Obtenir une licence DRM pour le contenu premium.

POST /api/v2/streaming/drm/license
Authorization: Bearer <token>
Content-Type: application/json

{
"contentId": "uuid",
"drmType": "widevine",
"challenge": "base64-encoded-challenge"
}

Structure du token

{
// Claims standards
"sub": "user-uuid",
"iat": 1234567890,
"exp": 1234571490, // +1h

// Claims custom
"contentId": "content-uuid",
"contentType": "MOVIE",
"quality": "1080p",
"deviceId": "device-uuid",
"profileId": "profile-uuid",
"ipAddress": "192.168.1.1",
"maxUses": 5,
"jti": "token-uuid" // ID unique
}

Protections de securite

ProtectionDescription
ExpirationToken valide 1h maximum
Max Uses5 utilisations maximum par token
IP BindingToken lie a l'adresse IP d'origine
Device BindingToken lie a l'appareil
SignatureToken signe HMAC-SHA256
RevocationRevocation immediate possible via blacklist Redis

Verifications avant diffusion

Avant de servir un stream, le systeme verifie :

  1. Signature valide -- Token non modifie
  2. Non expire -- exp > now
  3. Uses restantes -- count < maxUses
  4. IP match -- IP actuelle = IP du token
  5. Non revoque -- Token absent de la blacklist Redis
  6. Abonnement actif -- L'utilisateur a acces au contenu

Qualites disponibles

QualiteResolutionBitrate approximatif
autoAdaptiveVariable
480p854x480~1.5 Mbps
720p1280x720~3 Mbps
1080p1920x1080~6 Mbps
4k3840x2160~15 Mbps

DRM (Digital Rights Management)

Pour le contenu premium, le DRM est applique selon la plateforme :

DRMPlateforme
WidevineAndroid, Chrome
FairPlayiOS, Safari
PlayReadyWindows

Bonnes pratiques

  1. Demander un nouveau token avant chaque lecture
  2. Ne pas stocker les tokens de streaming cote client
  3. Gerer les erreurs et redemander un token si necessaire
  4. Respecter les limites de qualite selon l'abonnement de l'utilisateur

Codes d'erreur

CodeMessageDescription
401Token expiredToken de streaming expire
403Subscription requiredAbonnement requis pour ce contenu
403Max uses exceededNombre maximum d'utilisations atteint
403IP mismatchAdresse IP differente de l'original
404Content not foundContenu introuvable
410Token revokedToken revoque