Referencia de API
Referencia completa de la API del Reproductor M3U8 Online.
API del Reproductor
Inicialización
Constructor Player
const player = new M3U8Player(options);
Parámetros:
options
(Object): Opciones de configuración del reproductor
Opciones de configuración:
const options = {
container: '#player', // Selector del contenedor del reproductor
autoplay: false, // Reproducción automática
muted: true, // Estado silenciado
preload: 'metadata', // Configuración de precarga
width: '100%', // Ancho del reproductor
height: 'auto', // Altura del reproductor
controls: true, // Mostrar controles
fluid: true, // Responsivo
responsive: true, // Soporte responsivo
playbackRates: [0.5, 1, 1.25, 1.5, 2], // Velocidades de reproducción
defaultPlaybackRate: 1, // Velocidad de reproducción por defecto
language: 'es', // Configuración de idioma
techOrder: ['html5'], // Orden de prioridad de tecnologías
html5: {
vhs: {
overrideNative: true, // Anular HLS nativo
enableLowInitialPlaylist: true,
smoothQualityChange: true,
handlePartialData: true,
},
},
};
Métodos
load()
Carga un stream.
player.load(url);
Parámetros:
url
(String): URL del stream M3U8
Valor de retorno:
Promise
: Promise de carga completada
Ejemplo:
try {
await player.load('https://example.com/stream.m3u8');
console.log('Stream cargado exitosamente');
} catch (error) {
console.error('Error al cargar el stream:', error);
}
play()
Inicia la reproducción.
player.play();
Valor de retorno:
Promise
: Promise de inicio de reproducción
pause()
Pausa la reproducción.
player.pause();
currentTime()
Obtiene o establece el tiempo de reproducción actual.
// Obtener tiempo actual
const currentTime = player.currentTime();
// Establecer tiempo
player.currentTime(120); // Establecer a 2 minutos
duration()
Obtiene la duración total del stream.
const duration = player.duration();
volume()
Obtiene o establece el volumen.
// Obtener volumen (0.0 - 1.0)
const volume = player.volume();
// Establecer volumen
player.volume(0.5); // Establecer al 50%
muted()
Obtiene o establece el estado silenciado.
// Obtener estado silenciado
const isMuted = player.muted();
// Establecer estado silenciado
player.muted(true); // Silenciar
player.muted(false); // Desilenciar
paused()
Obtiene el estado de pausa.
const isPaused = player.paused();
ended()
Obtiene el estado de finalización.
const isEnded = player.ended();
readyState()
Obtiene el estado de preparación del reproductor.
const readyState = player.readyState();
Valores de retorno:
0
: HAVE_NOTHING - Sin información1
: HAVE_METADATA - Con metadatos2
: HAVE_CURRENT_DATA - Con datos de frame actual3
: HAVE_FUTURE_DATA - Con datos de frame futuro4
: HAVE_ENOUGH_DATA - Con datos suficientes
networkState()
Obtiene el estado de la red.
const networkState = player.networkState();
Valores de retorno:
0
: NETWORK_EMPTY - Estado inicial1
: NETWORK_IDLE - Estado inactivo2
: NETWORK_LOADING - Cargando3
: NETWORK_NO_SOURCE - Sin fuente
Eventos
loadstart
Se dispara cuando comienza la carga del stream.
player.on('loadstart', () => {
console.log('Iniciando carga del stream');
});
loadedmetadata
Se dispara cuando se cargan los metadatos.
player.on('loadedmetadata', () => {
console.log('Metadatos cargados');
console.log('Duración:', player.duration());
});
loadeddata
Se dispara cuando se carga el primer frame.
player.on('loadeddata', () => {
console.log('Primer frame cargado');
});
canplay
Se dispara cuando es posible reproducir.
player.on('canplay', () => {
console.log('Listo para reproducir');
});
canplaythrough
Se dispara cuando el buffering está completo y es posible reproducir hasta el final.
player.on('canplaythrough', () => {
console.log('Listo para reproducir hasta el final');
});
play
Se dispara cuando comienza la reproducción.
player.on('play', () => {
console.log('Reproducción iniciada');
});
pause
Se dispara cuando se pausa la reproducción.
player.on('pause', () => {
console.log('Reproducción pausada');
});
ended
Se dispara cuando termina la reproducción.
player.on('ended', () => {
console.log('Reproducción terminada');
});
timeupdate
Se dispara cuando se actualiza el tiempo de reproducción.
player.on('timeupdate', () => {
const currentTime = player.currentTime();
const duration = player.duration();
const progress = (currentTime / duration) * 100;
console.log(`Progreso: ${progress.toFixed(1)}%`);
});
volumechange
Se dispara cuando cambia el volumen.
player.on('volumechange', () => {
console.log('Volumen:', player.volume());
console.log('Silenciado:', player.muted());
});
error
Se dispara cuando ocurre un error.
player.on('error', (error) => {
console.error('Error del reproductor:', error);
});
API HLS
Propiedades
hls
Accede a la instancia HLS.
const hls = player.hls;
hls.levels
Obtiene los niveles de calidad disponibles.
const levels = player.hls.levels;
console.log('Niveles de calidad disponibles:', levels);
hls.currentLevel
Obtiene o establece el nivel de calidad actual.
// Obtener nivel actual
const currentLevel = player.hls.currentLevel;
// Establecer nivel
player.hls.currentLevel = 2; // Establecer al tercer nivel
hls.nextLevel
Obtiene o establece el siguiente nivel de calidad.
const nextLevel = player.hls.nextLevel;
hls.loadLevel
Obtiene el nivel de calidad que se está cargando.
const loadLevel = player.hls.loadLevel;
hls.bandwidth
Obtiene el ancho de banda estimado.
const bandwidth = player.hls.bandwidth;
console.log('Ancho de banda estimado:', bandwidth, 'bps');
hls.startLevel
Obtiene o establece el nivel de calidad inicial.
// Establecer nivel inicial
player.hls.startLevel = 1;
Métodos
hls.startLoad()
Inicia la carga HLS.
player.hls.startLoad();
hls.stopLoad()
Detiene la carga HLS.
player.hls.stopLoad();
hls.swapAudioCodec()
Intercambia el códec de audio.
player.hls.swapAudioCodec();
hls.recoverMediaError()
Intenta recuperarse de un error de medios.
player.hls.recoverMediaError();
Eventos
hlsEvent
Monitorea eventos relacionados con HLS.
player.on('hlsEvent', (event, data) => {
console.log('Evento HLS:', event, data);
});
levelLoaded
Se dispara cuando se carga un nivel de calidad.
player.on('levelLoaded', (event, data) => {
console.log('Nivel de calidad cargado:', data);
});
levelSwitched
Se dispara cuando cambia el nivel de calidad.
player.on('levelSwitched', (event, data) => {
console.log('Nivel de calidad cambiado:', data);
});
fragLoaded
Se dispara cuando se carga un fragmento.
player.on('fragLoaded', (event, data) => {
console.log('Fragmento cargado:', data);
});
API de Eventos
Agregar Escuchadores de Eventos
on()
Agrega un escuchador de eventos.
player.on('eventName', callback);
Parámetros:
eventName
(String): Nombre del eventocallback
(Function): Función de callback
off()
Elimina un escuchador de eventos.
player.off('eventName', callback);
one()
Agrega un escuchador de eventos que se ejecuta una sola vez.
player.one('eventName', callback);
trigger()
Dispara un evento manualmente.
player.trigger('customEvent', data);
Eventos Personalizados
qualitychange
Se dispara cuando cambia la calidad.
player.on('qualitychange', (event, data) => {
console.log('Cambio de calidad:', {
from: data.from,
to: data.to,
reason: data.reason,
});
});
bufferwarning
Se dispara cuando el buffer está bajo.
player.on('bufferwarning', (event, data) => {
console.log('Advertencia de buffer:', data);
});
Manejo de Errores
Tipos de Error
MediaError
Error relacionado con medios.
player.on('error', (error) => {
if (error.code === 1) {
console.log('Error de medios: Abortado');
} else if (error.code === 2) {
console.log('Error de medios: Red');
} else if (error.code === 3) {
console.log('Error de medios: Decodificación');
} else if (error.code === 4) {
console.log('Error de medios: Fuente no soportada');
}
});
HlsError
Error relacionado con HLS.
player.on('error', (error) => {
if (error.type === 'networkError') {
console.log('Error de red');
} else if (error.type === 'mediaError') {
console.log('Error de medios');
}
});
Recuperación de Errores
Recuperación Automática
El reproductor intenta automáticamente recuperarse de errores.
player.on('error', (error) => {
console.log('Error ocurrido:', error);
// El reproductor intenta automáticamente recuperarse
});
Recuperación Manual
Puedes intentar recuperarte manualmente de errores.
player.on('error', (error) => {
if (error.type === 'mediaError') {
// Para errores de medios, intentar recuperación manual
player.hls.recoverMediaError();
}
});
Funciones de Utilidad
Formato de Tiempo
formatTime()
Convierte segundos a formato de tiempo.
function formatTime(seconds) {
const hours = Math.floor(seconds / 3600);
const minutes = Math.floor((seconds % 3600) / 60);
const secs = Math.floor(seconds % 60);
if (hours > 0) {
return `${hours}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`;
} else {
return `${minutes}:${secs.toString().padStart(2, '0')}`;
}
}
// Ejemplo de uso
const currentTime = player.currentTime();
console.log('Tiempo actual:', formatTime(currentTime));
Gestión de Niveles de Calidad
getQualityLevels()
Obtiene los niveles de calidad disponibles.
function getQualityLevels() {
return player.hls.levels.map((level, index) => ({
index: index,
height: level.height,
width: level.width,
bitrate: level.bitrate,
name: `${level.height}p`,
}));
}
const qualityLevels = getQualityLevels();
console.log('Niveles de calidad disponibles:', qualityLevels);
setQualityLevel()
Establece el nivel de calidad.
function setQualityLevel(levelIndex) {
if (levelIndex >= 0 && levelIndex < player.hls.levels.length) {
player.hls.currentLevel = levelIndex;
console.log(`Nivel de calidad establecido a ${levelIndex}`);
} else {
console.error('Nivel de calidad inválido');
}
}
Esta referencia de API te permite aprovechar todas las funcionalidades del Reproductor M3U8 Online.