Introduction
La consommation de vidéos en ligne a doublé au cours des cinq dernières années. Cette croissance crée un besoin concret : personnaliser la diffusion vidéo à grande échelle, sans reconstruire toute une infrastructure. Cloudflare Stream propose justement de nouvelles fonctionnalités pour créer des pipelines vidéo sur mesure, capables d'ajouter des annotations dynamiques ou des sous-titres incrustés en temps réel.
Cloudflare a récemment introduit Streamline, un outil qui exploite les capacités de Cloudflare Stream et des Workers pour développer des expériences vidéo personnalisées. Grâce à Streamline, vous pouvez concevoir des pipelines vidéo adaptés à vos besoins, que ce soit pour la diffusion en direct ou pour la modification de vidéos hébergées.
Voyons comment configurer un pipeline via Streamline, comprendre l'architecture sous-jacente, et éviter les pièges courants. L'objectif : vous permettre de concevoir des flux vidéo sur mesure, prêts pour la production.
Pourquoi créer un pipeline vidéo personnalisé
Un pipeline vidéo est une chaîne de traitement. Chaque étape prend un flux en entrée, applique une transformation, puis transmet le résultat à l'étape suivante. Concrètement, vous pouvez superposer un logo, incruster des sous-titres, redimensionner le flux, ou encore rediriger la sortie vers plusieurs destinations simultanément.
C'est utile. Voici quelques cas d'usage fréquents :
- Ajouter un filigrane (watermark) sur un flux en direct avant de le redistribuer.
- Incruster des sous-titres générés dynamiquement sur une vidéo hébergée.
- Rediriger un même flux vers plusieurs plateformes de diffusion (multicast).
- Appliquer des filtres ou des transformations visuelles à la volée.
Sans un outil dédié, chacune de ces opérations nécessite de gérer vous-même des serveurs de transcodage, des files d'attente, et une logique de reprise sur erreur. Streamline centralise tout cela sur l'infrastructure Cloudflare.
Comprendre l'architecture de Streamline
Streamline repose sur une architecture modulaire. Elle sépare la gestion du traitement des médias et le contrôle de l'application. La composante centrale, le moteur multimédia, est hébergée dans un conteneur. Elle gère l'entrée, la sortie et le traitement des médias.
Deux couches distinctes coexistent :
- Le plan de contrôle, géré par les Workers de Cloudflare, qui orchestre les sessions et expose une API.
- Le plan de données, géré par le moteur multimédia dans un conteneur, qui traite effectivement les flux audio et vidéo.
Cette séparation a un avantage direct : vous pouvez mettre à jour la logique applicative (via les Workers) sans toucher au moteur de traitement, et inversement.
Composants du moteur multimédia
Le moteur multimédia comprend deux éléments principaux : un contrôleur et un processeur.
Le contrôleur est écrit en Go. Il fonctionne comme un serveur HTTP qui reçoit et traduit les requêtes en opérations exécutables par le moteur. Le processeur utilise FFmpeg pour le traitement des médias, bien que cette implémentation puisse être modifiée à l'avenir. FFmpeg est un outil open source de référence pour le transcodage audio et vidéo.
// Exemple de création d'une session de pipeline vidéo
// createStreamline() initialise le client avec l'URL de votre moteur multimédia
const streamline = createStreamline({ baseUrl: 'https://media.example' });
// sessions.create() provisionne un nouveau conteneur de traitement
const session = await streamline.sessions.create();
// session.start(config) démarre le pipeline avec la configuration fournie
const result = await session.start(config);
console.log(result);Le moteur accepte des entrées vidéo de différentes sources : un flux RTMPS, un manifest HLS, ou un fichier hébergé. Il peut aussi publier des vidéos de prévisualisation via un WebSocket vers un objet durable (Durable Object), un composant de Cloudflare qui maintient un état persistant en mémoire.
Comparaison des types d'entrée et de sortie
| Type | Protocole | Usage principal | Latence |
|---|---|---|---|
| RTMP / RTMPS | TCP | Diffusion en direct (push) | Faible (1-3 s) |
| HLS (manifest) | HTTP | Lecture de flux existants (pull) | Moyenne (6-30 s) |
| WebSocket | WS / WSS | Prévisualisation temps réel | Très faible (< 1 s) |
| Fichier hébergé | HTTP | Traitement de vidéos à la demande | Variable |
Ce tableau résume les options disponibles. Le choix dépend de votre cas d'usage : la diffusion en direct privilégie RTMP, tandis que le traitement différé s'appuie sur des fichiers hébergés.
Configurer votre première session de pipeline
Passons à la pratique. Chaque session Streamline est définie par un objet JSON qui spécifie les entrées, les opérations, et les sorties désirées.
Exemple de configuration JSON
{
"input": {
"type": "rtmp",
"profile": "primary-input"
},
"pipeline": [
{
"op": "overlay",
"params": {
"image": "/app/assets/cf-logo.png",
"position": "top-right"
}
}
],
"output": {
"type": "rtmp",
"destination": "secondary-output"
}
}Dans cet exemple, un flux RTMP est utilisé comme entrée, une image est superposée en haut à droite, et le résultat est envoyé vers une destination RTMP. Ce type de configuration permet de modifier une diffusion en direct en temps réel.
Ajouter plusieurs opérations au pipeline
Un pipeline peut enchaîner plusieurs opérations. Chaque opération est un objet dans le tableau pipeline, exécuté dans l'ordre. Voici un exemple avec deux transformations successives :
{
"input": {
"type": "rtmp",
"profile": "primary-input"
},
"pipeline": [
{
"op": "overlay",
"params": {
"image": "/app/assets/cf-logo.png",
"position": "top-right"
}
},
{
"op": "resize",
"params": {
"width": 1280,
"height": 720
}
}
],
"output": {
"type": "rtmp",
"destination": "secondary-output"
}
}Ici, le flux est d'abord marqué avec un logo, puis redimensionné en 720p avant d'être envoyé vers la sortie. L'ordre compte : si vous redimensionnez avant de superposer le logo, la position et la taille du logo seront affectées.
Testez toujours vos configurations sur un environnement local avant de les déployer en production. Cela évite les interruptions involontaires sur un flux en direct.
Utiliser les Workers pour le contrôle et la surveillance
Les Workers de Cloudflare jouent un rôle central dans la gestion des pipelines vidéo. Ils servent à initier, configurer et observer les sessions de traitement multimédia.
Fonctionnalités des Workers
Les Workers permettent de créer des applications complètes avec une interface utilisateur, des politiques d'accès, et un orchestrateur qui coordonne les sessions et le cycle de vie des conteneurs. Ils assurent également la continuité du traitement même en cas de déconnexion du contrôleur.
Voici un exemple de Worker qui crée une session, la démarre, puis surveille son état :
export default {
async fetch(request, env) {
// Initialisation du client Streamline
const streamline = createStreamline({
baseUrl: env.STREAMLINE_URL
});
// Création d'une nouvelle session
const session = await streamline.sessions.create();
// Configuration du pipeline
const config = {
input: { type: 'rtmp', profile: 'primary-input' },
pipeline: [
{ op: 'overlay', params: { image: '/app/assets/logo.png', position: 'bottom-left' } }
],
output: { type: 'rtmp', destination: 'live-output' }
};
// Démarrage du pipeline
const result = await session.start(config);
// Retour de l'état de la session au client
return new Response(JSON.stringify(result), {
headers: { 'Content-Type': 'application/json' }
});
}
};Ce Worker expose un endpoint HTTP. À chaque requête, il provisionne un conteneur, lance le pipeline avec la configuration définie, puis retourne l'état de la session en JSON.
Surveiller les sessions actives
La surveillance est indispensable. Un pipeline vidéo en direct peut échouer pour de nombreuses raisons : coupure réseau, flux d'entrée interrompu, dépassement de la durée maximale. Les Workers peuvent interroger régulièrement l'état des sessions et déclencher des actions correctives.
Quelques indicateurs à surveiller :
- L'état de la session (active, en pause, terminée, en erreur).
- La durée écoulée depuis le démarrage.
- Le débit du flux d'entrée et de sortie.
- Les erreurs remontées par le moteur multimédia.
Pièges et erreurs courantes
Certaines erreurs reviennent souvent. Voici les plus fréquentes, et comment les éviter.
- Pas de durée maximale définie. Sans limite, une session peut bloquer des ressources indéfiniment. Définissez toujours un timeout explicite dans votre configuration.
- Configurations non testées localement. Déployer directement en production expose à des interruptions sur un flux en direct. Un test local prend quelques minutes et évite des heures de débogage.
- Gestion des erreurs absente. Si un script de traitement ne gère pas les erreurs, une entrée invalide peut faire planter silencieusement le pipeline. Encadrez chaque appel avec un bloc try/catch.
- Dépendances obsolètes. FFmpeg et les bibliothèques associées évoluent. Une version obsolète peut introduire des failles de sécurité ou des incompatibilités avec certains codecs.
Soyez rigoureux. Un pipeline vidéo en production traite des données en continu : chaque erreur se propage sur l'ensemble du flux.
// Gestion d'erreur autour du démarrage d'une session
try {
const result = await session.start(config);
console.log('Session démarrée :', result.sessionId);
} catch (error) {
// Loguer l'erreur et alerter l'équipe
console.error('Échec du démarrage :', error.message);
// Nettoyage : libérer le conteneur
await session.destroy();
}Conclusion
Cloudflare Stream et Workers permettent de créer des pipelines vidéo sur mesure, adaptés aux besoins spécifiques de votre audience. Streamline rend la personnalisation de la diffusion vidéo accessible et flexible, en direct comme en différé.
Retenez ces points :
- L'architecture de Streamline sépare le plan de contrôle (Workers) du plan de données (moteur multimédia).
- Chaque session est définie par un objet JSON clair, avec des entrées, des opérations et des sorties.
- Testez localement avant tout déploiement en production.
- Les Workers assurent l'orchestration, la surveillance et la reprise sur erreur.
- Définissez toujours une durée maximale et gérez les erreurs explicitement.
À vous de jouer. Configurez votre premier pipeline, testez-le, ajustez les paramètres, et itérez jusqu'à obtenir le résultat attendu.
Sources
- Streamline: custom video pipelines with Cloudflare Stream and Workers (Cloudflare, 2026-10-02)