Lire une vidéo¶
Objectif : servir une vidéo en streaming HTTP, sans écrire de code métier.
Ce que vous allez apprendre : register_video_routes(router).
Une seule ligne branche la route de lecture officielle GET /videos/{uuid}, qui sert le fichier en streaming HTTP avec support des requêtes Range (un lecteur peut se positionner dans la vidéo).
Le code vit dans le paquet forge-mvc-video ; votre application ne fait que le brancher : principe « lock + delegate ».
Palier 2 du niveau intermédiaire de la progression vidéo, après Téléverser une vidéo.
Ce que ce starter montre¶
- le branchement de la lecture officielle avec
register_video_routes(router); - la route
GET /videos/{uuid}en streaming Range ; - aucun contrôleur à écrire : on délègue au paquet.
Aucun contrôleur à créer ici : la lecture vient entièrement du paquet forge-mvc-video, branché par register_video_routes.
La table videos est garantie par la migration fournie plus bas.
Classes Forge utilisées¶
| Classe / fonction | Rôle dans ce starter | Référence |
|---|---|---|
forge_mvc_video.register_video_routes |
Brancher la route de lecture officielle sur le routeur. | Parcours vidéo |
Tester¶
Après avoir téléversé une vidéo (palier précédent), ouvrez son URL de lecture avec son UUID :
Le fichier est servi en streaming ; un lecteur vidéo peut se positionner grâce au support des requêtes Range.
La route¶
Branchez la route de lecture officielle dans mvc/routes/__init__.py.
Le code métier vit dans le paquet forge-mvc-video ; on ne fait que le brancher.
# mvc/routes/__init__.py
from forge_mvc_video import register_video_routes
register_video_routes(router)
Comprendre ce code¶
register_video_routes(router)enregistre la route officielle d'un coup.
Vous n'écrivez aucun contrôleur : le code métier appartient au paquet, l'application le branche explicitement (pas de découverte automatique, principe « refuser la magie cachée »).- La lecture gère le streaming Range : indispensable pour qu'un lecteur vidéo charge progressivement et se positionne sans tout télécharger.
- La route sert le fichier référencé par la ligne
videos: l'UUID, jamais le nom de fichier d'origine.
La migration¶
La route de lecture sert les fichiers référencés par la table videos.
Créez donc cette table si elle n'existe pas déjà.
CREATE TABLE IF NOT EXISTS reste sûr même si le palier upload l'a déjà créée.
-- mvc/migrations/20260601210000_create_videos.sql
CREATE TABLE IF NOT EXISTS videos (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
uuid CHAR(36) NOT NULL,
title VARCHAR(255) NULL,
original_path VARCHAR(500) NOT NULL,
mp4_path VARCHAR(500) NULL,
poster_path VARCHAR(500) NULL,
mime_type VARCHAR(120) NULL,
size_bytes BIGINT UNSIGNED NOT NULL,
duration_seconds INT UNSIGNED NULL,
width INT UNSIGNED NULL,
height INT UNSIGNED NULL,
status VARCHAR(30) NOT NULL,
error_message TEXT NULL,
created_at DATETIME(6) NOT NULL,
updated_at DATETIME(6) NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uq_videos_uuid (uuid),
INDEX idx_videos_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
À retenir¶
register_video_routes(router)branche la lecture officielle en une ligne.- Le streaming Range permet de se positionner dans la vidéo.
- L'application délègue au paquet au lieu de réécrire le service de fichiers.
Après ce starter¶
Vous savez servir une vidéo.
La suite : suivre son cycle de vie.