API del player video incorporato
Puoi usare la nostra API JavaScript per ascoltare e controllare il player incorporato. Il nostro player iframe è compatibile con lo standard API player.js di Embedly.
1. Configurazione iniziale
Per prima cosa includi la libreria player.js nella pagina:
CDN
<script type="text/javascript" src="//cdn.embed.ly/player-0.1.0.min.js"></script>Poi inizializza il player con il tuo 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
});Attendi sempre l’evento ready prima di chiamare i metodi del player. Il player metterà in coda i messaggi finché non viene emesso ready.
2. Metodi
Questi sono i metodi che puoi chiamare sul player per controllare la riproduzione:
Controllo della riproduzione
play() - Avvia la riproduzione
player.play();pause() - Mette in pausa la riproduzione
player.pause();Controllo del volume
mute() - Disattiva l’audio del player
player.mute();unmute() - Riattiva l’audio del player
player.unmute();setVolume(volume) - Imposta il volume (0-100)
player.setVolume(50); // Set to 50%Posizionamento nella timeline
setCurrentTime(seconds) - Salta a un istante specifico
player.setCurrentTime(30); // Seek to 30 secondsLettura dello stato
getPaused(callback) - Verifica se il player è in pausa
player.getPaused((paused) => {
console.log('Player is paused:', paused);
});getMuted(callback) - Verifica se l’audio è disattivato
player.getMuted((muted) => {
console.log('Player is muted:', muted);
});getVolume(callback) - Ottiene il volume corrente (0-100)
player.getVolume((volume) => {
console.log('Current volume:', volume);
});getDuration(callback) - Ottiene la durata del video in secondi
player.getDuration((duration) => {
console.log('Video duration:', duration, 'seconds');
});getCurrentTime(callback) - Ottiene il tempo di riproduzione corrente
player.getCurrentTime((time) => {
console.log('Current time:', time, 'seconds');
});Text tracks (sottotitoli e didascalie)
I metodi per i Text tracks non fanno parte della libreria player.js integrata, quindi devi associarli una volta. Aggiungi la seguente funzione di supporto e chiamala all’interno del tuo handler 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);
});Vengono esposti solo i Text tracks di tipo sottotitoli e didascalie. Le tracce dei capitoli sono escluse. Ogni traccia è un oggetto con i campi language, kind, label e mode.
getTextTracks(callback) - Ottiene tutti i Text tracks disponibili
player.getTextTracks((tracks) => {
// [{ language, kind, label, mode }, ...]
console.log('Available text tracks:', tracks);
});getTextTrack(callback) - Ottiene il Text track attivo, oppure null quando i Text tracks sono disattivati
player.getTextTrack((track) => {
console.log('Active text track:', track);
});enableTextTrack(track, callback) - Attiva un Text track per lingua, oppure per lingua e tipo
Se passi solo una lingua e questa corrisponde a più tracce, il player preferisce una corrispondenza esatta della lingua e poi subtitles rispetto a captions. Il callback opzionale riceve la traccia attivata.
// 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() - Disattiva i Text tracks
player.disableTextTrack();3. Eventi (listener)
Questi sono gli eventi a cui puoi sottoscriverti per i cambiamenti di stato del player:
Eventi di base
ready - Emesso quando il player è pronto a ricevere comandi
player.on('ready', () => {
console.log('Player is ready for interaction');
});play - Emesso quando inizia la riproduzione
player.on('play', () => {
console.log('Playback started');
});pause - Emesso quando la riproduzione va in pausa
player.on('pause', () => {
console.log('Playback paused');
});ended - Emesso al termine della riproduzione
player.on('ended', () => {
console.log('Playback finished');
});Eventi di avanzamento
timeupdate - Emesso durante la riproduzione con tempo corrente e durata
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 - Emesso durante il caricamento con dati sull’avanzamento del buffer
player.on('progress', (data) => {
console.log('Buffering progress:', data.percent * 100 + '%');
});Eventi dei Text tracks
texttrackchange - Emesso quando il Text track attivo cambia, tramite l’API o i controlli del player
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 - Emesso quando enableTextTrack non trova una traccia corrispondente
player.on('texttrackerror', (error) => {
// error.name: 'InvalidTrackLanguageError' | 'InvalidTrackError'
console.error('Text track error:', error.name);
});Per gli streaming dal vivo, le tracce di sottotitoli vengono rilevate man mano che il manifest viene caricato e potrebbero non essere disponibili subito dopo ready. Interroga di nuovo getTextTracks una volta avviata la riproduzione per recuperare le tracce che arrivano più tardi. L’evento texttrackchange viene emesso solo quando cambia la traccia attiva, quindi non affidarti a esso per rilevare le tracce appena scoperte.
Gestione degli errori
error - Emesso in caso di errore
player.on('error', (error) => {
console.error('Player error:', error);
});Esempio completo
Ecco un esempio completo che mostra come configurare e usare l’API del player:
// 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();
}Se hai più player nella stessa pagina con lo stesso src, puoi incontrare comportamenti incoerenti. Per evitarlo, aggiungi un identificatore univoco (UUID o timestamp) al src di ogni iframe.