Skip to Content

API lecteur vidéo intégré

Tu peux utiliser notre API JavaScript pour écouter et contrôler le lecteur intégré. Notre lecteur iframe est compatible avec la norme API player.js  d’Embedly.

1. Mise en place

D’abord, inclus la bibliothèque player.js dans ta page :

<script type="text/javascript" src="//cdn.embed.ly/player-0.1.0.min.js"></script>

Ensuite, initialise le lecteur avec ton iframe :

// Get reference to your iframe element const iframe = document.getElementById('your-iframe-id'); // Create player instance const player = new playerjs.Player(iframe); // Wait for player to be ready before interacting player.on('ready', () => { console.log('Player is ready!'); // Now you can safely use player methods });

Attends toujours l’événement ready avant d’appeler les méthodes du lecteur. Le lecteur met les messages en file d’attente jusqu’à l’émission de ready.

2. Méthodes

Voici les méthodes que tu peux appeler sur le lecteur pour contrôler la lecture :

Contrôle de la lecture

play() — Démarre la lecture

player.play();

pause() — Met la lecture en pause

player.pause();

Contrôle du volume

mute() — Coupe le son du lecteur

player.mute();

unmute() — Rétablit le son du lecteur

player.unmute();

setVolume(volume) — Règle le volume (0-100)

player.setVolume(50); // Set to 50%

Repositionnement

setCurrentTime(seconds) — Va à un instant précis

player.setCurrentTime(30); // Seek to 30 seconds

Consultation de l’état

getPaused(callback) — Indique si le lecteur est en pause

player.getPaused((paused) => { console.log('Player is paused:', paused); });

getMuted(callback) — Indique si le lecteur est muet

player.getMuted((muted) => { console.log('Player is muted:', muted); });

getVolume(callback) — Obtient le volume actuel (0-100)

player.getVolume((volume) => { console.log('Current volume:', volume); });

getDuration(callback) — Obtient la durée de la vidéo en secondes

player.getDuration((duration) => { console.log('Video duration:', duration, 'seconds'); });

getCurrentTime(callback) — Obtient la position de lecture actuelle

player.getCurrentTime((time) => { console.log('Current time:', time, 'seconds'); });

Text tracks (sous-titres et légendes)

Les méthodes de Text track ne font pas partie de la bibliothèque player.js intégrée. Tu dois donc les lier une seule fois. Ajoute la fonction utilitaire suivante et appelle-la dans ton gestionnaire ready :

function bindTextTrackMethods(player) { player.enableTextTrack = (value, callback) => player.send({ method: 'enableTextTrack', value }, callback); player.disableTextTrack = () => player.send({ method: 'disableTextTrack' }); player.getTextTracks = (callback) => player.send({ method: 'getTextTracks' }, callback); player.getTextTrack = (callback) => player.send({ method: 'getTextTrack' }, callback); } player.on('ready', () => { bindTextTrackMethods(player); });

Seuls les Text tracks de type sous-titres et légendes sont exposés. Les pistes de chapitres sont exclues. Chaque piste est un objet avec les champs language, kind, label et mode.

getTextTracks(callback) — Récupère tous les Text tracks disponibles

player.getTextTracks((tracks) => { // [{ language, kind, label, mode }, ...] console.log('Available text tracks:', tracks); });

getTextTrack(callback) — Récupère le Text track actif, ou null si les Text tracks sont désactivés

player.getTextTrack((track) => { console.log('Active text track:', track); });

enableTextTrack(track, callback) — Active un Text track par langue, ou par langue et type

Si tu passes uniquement une langue et qu’elle correspond à plusieurs pistes, le lecteur privilégie une correspondance de langue exacte, puis subtitles plutôt que captions. Le callback optionnel reçoit la piste activée.

// Enable by language player.enableTextTrack('en'); // Enable by language and kind (when both exist for the same language) player.enableTextTrack({ language: 'en', kind: 'captions' }); // Read the enabled track from the optional callback player.enableTextTrack('en', (track) => { console.log('Enabled text track:', track); });

disableTextTrack() — Désactive les Text tracks

player.disableTextTrack();

3. Événements

Voici les événements auxquels tu peux t’abonner pour suivre les changements d’état du lecteur :

Événements de base

ready — Émis lorsque le lecteur est prêt à recevoir des commandes

player.on('ready', () => { console.log('Player is ready for interaction'); });

play — Émis au démarrage de la lecture

player.on('play', () => { console.log('Playback started'); });

pause — Émis lors d’une mise en pause

player.on('pause', () => { console.log('Playback paused'); });

ended — Émis à la fin de la lecture

player.on('ended', () => { console.log('Playback finished'); });

Événements de progression

timeupdate — Émis pendant la lecture avec la position et la durée

player.on('timeupdate', (data) => { console.log('Current time:', data.seconds); console.log('Duration:', data.duration); // Calculate progress percentage const progress = (data.seconds / data.duration) * 100; console.log('Progress:', progress + '%'); });

progress — Émis pendant le chargement avec la progression du tampon

player.on('progress', (data) => { console.log('Buffering progress:', data.percent * 100 + '%'); });

Événements de Text track

texttrackchange — Déclenché lorsque le Text track actif change, via l’API ou les commandes du lecteur

player.on('texttrackchange', (track) => { // `track` is the active track object, or null when text tracks are off console.log('Active text track:', track ? track.language : 'off'); });

texttrackerror — Déclenché lorsque enableTextTrack ne trouve pas de piste correspondante

player.on('texttrackerror', (error) => { // error.name: 'InvalidTrackLanguageError' | 'InvalidTrackError' console.error('Text track error:', error.name); });

Pour les diffusions en direct, les pistes de sous-titres sont détectées au fur et à mesure du chargement du manifeste et peuvent ne pas être disponibles immédiatement après ready. Interroge à nouveau getTextTracks une fois la lecture démarrée pour récupérer les pistes qui arrivent plus tard. L’événement texttrackchange ne se déclenche que lorsque la piste active change : ne compte donc pas dessus pour détecter les pistes nouvellement découvertes.

Gestion des erreurs

error — Émis en cas d’erreur

player.on('error', (error) => { console.error('Player error:', error); });

Exemple complet

Voici un exemple complet montrant comment configurer et utiliser l’API du lecteur :

// Initialize player const iframe = document.getElementById('video-player'); const player = new playerjs.Player(iframe); // Bind the text track methods (not part of the built-in player.js library) function bindTextTrackMethods(player) { player.enableTextTrack = (value, callback) => player.send({ method: 'enableTextTrack', value }, callback); player.disableTextTrack = () => player.send({ method: 'disableTextTrack' }); player.getTextTracks = (callback) => player.send({ method: 'getTextTracks' }, callback); player.getTextTrack = (callback) => player.send({ method: 'getTextTrack' }, callback); } // Set up event listeners player.on('ready', () => { console.log('Player ready!'); bindTextTrackMethods(player); // Get initial state player.getDuration((duration) => { console.log('Video duration:', duration); }); player.getVolume((volume) => { console.log('Current volume:', volume); }); // List available text tracks player.getTextTracks((tracks) => { console.log('Text tracks:', tracks); }); }); player.on('play', () => { console.log('Started playing'); }); player.on('pause', () => { console.log('Paused'); }); player.on('timeupdate', (data) => { // Update progress bar const progress = (data.seconds / data.duration) * 100; document.getElementById('progress-bar').style.width = progress + '%'; }); player.on('ended', () => { console.log('Video finished'); }); player.on('texttrackchange', (track) => { console.log('Active text track:', track ? track.language : 'off'); }); player.on('texttrackerror', (error) => { console.error('Text track error:', error.name); }); player.on('error', (error) => { console.error('Error:', error); }); // Example control functions function playVideo() { player.play(); } function pauseVideo() { player.pause(); } function setVolume(volume) { player.setVolume(volume); } function seekTo(seconds) { player.setCurrentTime(seconds); } function enableSubtitles(language) { player.enableTextTrack(language); } function disableSubtitles() { player.disableTextTrack(); }

Si tu as plusieurs lecteurs sur la même page avec la même valeur src, tu peux observer des incohérences. Pour éviter cela, ajoute un identifiant unique (UUID ou horodatage) au src de chaque iframe.