El Atributo ONSTALLED

El atributo onstalled se activa cuando el navegador no puede recuperar datos multimedia de forma inesperada, generalmente debido a problemas de red o buffering.
El atributo onstalled
se activa cuando el navegador no puede recuperar datos multimedia de forma inesperada, generalmente debido a problemas de red o buffering. Es esencial para manejar interrupciones en la reproducción de <audio>
o <video>
.
???? Sintaxis básica
<video src="video.mp4" controls onstalled="manejarInterrupcion(event)" ></video>
// Método alternativo con JavaScript const video = document.getElementById("miVideo"); video.addEventListener("stalled", (event) => { // Lógica de manejo });
???? Cuándo se dispara
-
Pérdida de conexión durante la reproducción
-
Buffering prolongado
-
Errores de red inesperados
-
Servidor de medios no responde
???? Ejemplos prácticos
1. Mostrar mensaje de advertencia
<video id="reproductor" src="stream.mp4" controls onstalled="mostrarAlerta()" oncanplay="ocultarAlerta()" ></video> <div id="alerta" style="display: none; color: red;"> ¡Problema de conexión! </div> <script> function mostrarAlerta() { document.getElementById("alerta").style.display = "block"; console.log("Reproducción interrumpida"); } function ocultarAlerta() { document.getElementById("alerta").style.display = "none"; } </script>
2. Reintentar carga automáticamente
let reintentos = 0; video.addEventListener("stalled", () => { if (reintentos < 3) { reintentos++; video.load(); video.play(); } else { alert("No se puede recuperar la conexión"); } });
???? Casos de uso avanzados
1. Sistema de reintentos inteligente
video.addEventListener("stalled", async () => { video.pause(); // Esperar conexión const conexionRecuperada = await verificarConexion(); if (conexionRecuperada) { video.play(); } else { cambiarABitrateInferior(); } }); async function verificarConexion() { try { await fetch("https://ejemplo.com/ping", { method: "HEAD" }); return true; } catch { return false; } }
2. Registro de métricas de calidad
const metricas = { ultimoStalled: null, totalStalled: 0 }; video.addEventListener("stalled", () => { metricas.ultimoStalled = new Date(); metricas.totalStalled++; // Enviar datos al servidor fetch("/analiticas", { method: "POST", body: JSON.stringify(metricas) }); });
⚠️ Consideraciones importantes
1. Diferencias entre eventos relacionados
Evento | Descripción |
---|---|
onstalled |
Cuando el navegador no puede obtener datos |
onwaiting |
Cuando la reproducción se pausa por buffering |
onerror |
Cuando ocurre un error fatal |
2. Compatibilidad
Navegador | Soporte |
---|---|
Chrome | ✅ 3+ |
Firefox | ✅ 3.5+ |
Safari | ✅ 5+ |
Edge | ✅ 12+ |
3. Buenas prácticas
-
Combinar con
onwaiting
para manejar buffering -
Usar
preload="metadata"
para optimizar carga inicial -
Implementar timeout para evitar loops infinitos
???? Solución de problemas comunes
1. El evento no se dispara
// Forzar detección manual video.addEventListener("progress", () => { if (video.buffered.length === 0 && video.networkState === 2) { video.dispatchEvent(new Event("stalled")); } });
2. Manejo de conexiones lentas
let timeoutStalled; video.addEventListener("stalled", () => { timeoutStalled = setTimeout(() => { mostrarOpcionesAlternativas(); }, 5000); // Esperar 5 segundos }); video.addEventListener("playing", () => { clearTimeout(timeoutStalled); });
???? Conclusión
El atributo onstalled
permite:
-
Mejorar la experiencia de usuario durante fallos de red
-
Implementar sistemas de recuperación automática
-
Recopilar datos de calidad de reproducción
-
Crear interfaces adaptativas a condiciones de red
Ejemplo final avanzado (Streaming adaptativo):
<video id="stream" controls></video> <script> const bitrates = { low: "video_480p.mp4", medium: "video_720p.mp4", high: "video_1080p.mp4" }; let currentBitrate = "high"; video.addEventListener("stalled", () => { if (currentBitrate !== "low") { currentBitrate = "medium"; cambiarCalidad(currentBitrate); } else { mostrarErrorConexion(); } }); function cambiarCalidad(nuevaCalidad) { video.src = bitrates[nuevaCalidad]; video.play(); } </script>
Con este conocimiento, podrás crear reproductores multimedia más robustos y resilientes. ¡Experimenta con diferentes estrategias de manejo de errores! ????????