Aucun SDK requis : le flux de lecture tient en deux appels HTTP simples. Ce guide
utilise curl et un exemple serveur Python, mais la forme est identique dans
tout langage. Lisez d’abord
Comment fonctionne la lecture pour
le modèle de sécurité — en résumé : l’étape 1 nécessite votre clé secrète
(serveur uniquement) ; l’étape 2 utilise le jeton et convient au navigateur.
Étape 1 — émettre un jeton de player (serveur, nécessite la clé API)
curl -H "Authorization: Bearer $VIDEAS_API_KEY" \
https://api.videas.com/api/external/v1/videos/vid_123/player/
La réponse inclut les métadonnées du player et, surtout, un playback_token
(valide 4 h) :
{
"uid": "…",
"playback_token": "eyJhbGciOi…",
"player_config": { "auto_play": false, "theme": "dark" },
"items": [{ "asset": { "uid": "vid_123", "thumbnail_url": "https://api.videas.com/assets/vid_123/thumbnail-ab12cd34.jpg" } }]
}
Les champs URL comme
thumbnail_urlsont renvoyés en URLs absolues — prêts à l’emploi, aucun hôte à préfixer.
Étape 2 — résoudre les URLs de flux signées (jeton seul, aucune clé API)
curl -X POST https://api.videas.com/api/external/v1/playback/info/ \
-H "Content-Type: application/json" \
-d '{"asset_id":"vid_123","playback_token":"eyJhbGciOi…"}'
{
"type": "video",
"blocked": false,
"hls_url": { "url": "https://…/stream.m3u8?token=…", "expires_at": "2026-07-15T12:00:00Z" },
"source_url": { "url": "https://…/video.mp4?token=…", "expires_at": "…" },
"preview_sprites_url": { "url": "https://…", "expires_at": "…" },
"chapters": [{ "title": "Intro", "start_time": 0 }],
"resume_position_seconds": null
}
Remarquez l’absence d’en-tête Authorization à l’étape 2 — elle est
authentifiée par le jeton, d’où la possibilité de la lancer depuis le navigateur.
Assembler le tout (serveur Python)
Un pattern courant : votre backend émet le jeton, votre page le résout et lit. Avec le SDK Python, le côté serveur tient en un appel :
import os
from videas_sdk import VideasClient
client = VideasClient(api_key=os.environ["VIDEAS_API_KEY"])
def player_context(uid: str) -> dict:
player = client.videos.get_player(uid)
# Ne transmettez QUE des données sûres à votre template / endpoint JSON.
return {
"asset_id": uid,
"playback_token": player["playback_token"], # sûr à exposer ; valide 4h
"poster": player["items"][0]["asset"].get("thumbnail_url"),
}
Vous préférez la stdlib pure ? Les deux mêmes appels avec urllib :
import json, urllib.request
def mint_token(uid, api_key):
req = urllib.request.Request(
f"https://api.videas.com/api/external/v1/videos/{uid}/player/",
headers={"Authorization": f"Bearer {api_key}"},
)
with urllib.request.urlopen(req) as r:
return json.load(r)["playback_token"]
Transmettez ensuite playback_token + asset_id au navigateur et résolvez là.
Le lire dans le navigateur
Une fois que le navigateur a asset_id et playback_token, le code de
résolution-et-lecture est identique au guide SDK — seule change la provenance du
jeton. Voir
Player web avec le SDK JavaScript → Étape 2
pour l’extrait complet hls.js + HLS natif. En résumé :
const info = await (await fetch('https://api.videas.com/api/external/v1/playback/info/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ asset_id, playback_token }),
})).json()
// if (!info.blocked) → fournir info.hls_url.url à hls.js / une <video> native
Autres types d’asset
playback/info/ est polymorphe — branchez sur type :
video→ lisezhls_url(replisource_url).audio→ lisezsource; affichezsubtitle_tracksetwaveform_url.image→ choisissez une entréevariants[]selon la taille.document→ liez/prévisualisezurlet lesthumbnailspar page.third_party→ intégrez l’iframe du fournisseur viaembed_url(n’utilisez pas de player HLS).
Étapes suivantes
- Comment fonctionne la lecture
- Player web avec le SDK JavaScript
- Utiliser l’API REST
GET /videos/{uid}/player/etPOST /playback/info/dans la référence de l’API