¿Por qué embeber un reproductor en tu sitio web?
Publicar videos en YouTube y compartir el enlace es gratis y fácil. Pero cuando necesitas que tu video viva dentro de tu propia página web — con tu marca, sin distracciones y con control total — necesitas aprender a embeber un reproductor de video correctamente.
Las razones más comunes para embeber video en tu sitio:
- 🏢 Marca profesional: Tu sitio web, no una plataforma de terceros
- 📊 Analytics propios: Medir quién ve, cuánto ve y desde dónde
- 🔐 Control de acceso: Proteger contenido premium o privado
- 💰 Monetización directa: Publicidad VAST sin compartir revenue
- 🚫 Sin contenido sugerido: Evitar que YouTube muestre videos de la competencia
- 📱 Experiencia integrada: El video forma parte de tu diseño web, no es un parche
💡 Dato: Los sitios que embeben video propio en lugar de compartir enlaces de YouTube reportan un 22% más de permanencia en la página y un 18% más de conversiones.
Método 1: iframe (el más simple)
El iframe es la forma más sencilla y universal de embeber un reproductor de video en cualquier página web. Funciona en WordPress, Wix, Squarespace, HTML estático y prácticamente cualquier CMS.
Código básico
<iframe
src="https://player.tuservidor.com/embed/CODIGO"
width="100%"
height="450"
frameborder="0"
allow="autoplay; fullscreen; picture-in-picture"
allowfullscreen>
</iframe>
Hacer el iframe responsivo
El código anterior tiene un problema: el alto es fijo (450px). En móviles se ve mal. Para hacerlo responsivo, envuélvelo en un contenedor con aspect ratio:
<div style="position:relative; padding-bottom:56.25%; height:0; overflow:hidden;">
<iframe
src="https://player.tuservidor.com/embed/CODIGO"
style="position:absolute; top:0; left:0; width:100%; height:100%;"
frameborder="0"
allow="autoplay; fullscreen; picture-in-picture"
allowfullscreen>
</iframe>
</div>
El padding-bottom: 56.25% crea un ratio 16:9 (9/16 = 0.5625). Si tu video es 4:3, usa 75%. Para 9:16 (vertical), usa 177.78%.
Ventajas del iframe
- ✅ Simple: Copia y pega, funciona en cualquier CMS
- ✅ Seguro: El contenido del iframe está aislado de tu página
- ✅ Universal: Funciona en todos los navegadores
Desventajas
- ⚠️ Control limitado: No puedes interactuar con el player desde tu código JS
- ⚠️ Rendimiento: Carga una página dentro de otra página (más pesado)
- ⚠️ SEO: El contenido dentro del iframe no es indexado por Google
Método 2: HLS.js (para desarrolladores)
Si necesitas control total sobre el reproductor — personalizar la interfaz, agregar eventos, implementar DRM o integrar analytics — necesitas usar una biblioteca de JavaScript que reproduzca video HLS directamente.
HLS.js es la librería más popular para reproducir streams HLS (M3U8) en navegadores web. Es open source, ligera y funciona en todos los navegadores modernos.
Ejemplo completo con HLS.js
<!-- 1. Incluye la librería -->
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<!-- 2. Crea el elemento video -->
<video id="mi-player" controls
style="width:100%; max-width:800px;">
</video>
<!-- 3. Inicializa HLS.js -->
<script>
const video = document.getElementById('mi-player');
const streamUrl = 'https://tu-servidor.com/canal/playlist.m3u8';
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource(streamUrl);
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, () => {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
// Safari soporta HLS nativamente
video.src = streamUrl;
video.play();
}
</script>
¿Por qué la doble verificación?
Safari (iOS y macOS) puede reproducir HLS nativamente sin HLS.js. El código verifica: si HLS.js funciona, lo usa. Si no (Safari), carga el stream directamente en el tag <video>.
Opciones avanzadas de HLS.js
const hls = new Hls({
maxBufferLength: 30, // Buffer máximo en segundos
maxMaxBufferLength: 60, // Buffer máximo absoluto
startLevel: -1, // -1 = auto (ABR)
capLevelToPlayerSize: true, // No cargar 1080p en un player de 360px
lowLatencyMode: true, // Modo baja latencia (LL-HLS)
});
Método 3: Player profesional (Video.js, JW Player, Player Advance™)
Si necesitas un reproductor con interfaz profesional lista para usar — con controles personalizables, soporte de publicidad VAST, Chromecast, Picture-in-Picture y analytics integrado — usa un player profesional.
Video.js (open source)
<link href="https://vjs.zencdn.net/8.5.2/video-js.css" rel="stylesheet">
<script src="https://vjs.zencdn.net/8.5.2/video.min.js"></script>
<video-js id="mi-player" class="vjs-big-play-centered"
controls preload="auto"
width="800" height="450">
<source src="https://tu-servidor.com/canal/playlist.m3u8"
type="application/x-mpegURL">
</video-js>
Comparativa de players
| Player | Precio | VAST | Chromecast | DRM | Custom skin |
|---|---|---|---|---|---|
| HLS.js puro | Gratis | ❌ | ❌ | ❌ | Manual |
| Video.js | Gratis | Con plugin | Con plugin | Con plugin | CSS |
| JW Player | $$$ | ✅ | ✅ | ✅ | ✅ |
| Player Advance™ | Incluido | ✅ | ✅ | ✅ | ✅ |
🎬 XtreamCast Player Advance™ es el reproductor incluido en todos los planes. Soporta HLS, Chromecast, PiP, Domain Guard anti-piratería, publicidad VAST y personalización completa de marca. Se embebe con un simple iframe o script JavaScript — sin necesidad de configurar HLS.js manualmente.
Errores comunes al embeber video (y cómo evitarlos)
1. No hacer el reproductor responsivo
El error más común: el video se ve perfecto en desktop pero se sale del contenedor en móvil. Siempre usa la técnica del contenedor con padding-bottom para mantener el aspect ratio.
2. Autoplay sin mute
Los navegadores modernos bloquean el autoplay si el video tiene audio. Si necesitas autoplay, el video debe empezar muteado:
<video autoplay muted playsinline>
3. No usar HTTPS
Si tu sitio es HTTPS (debería ser) y tu video se carga desde HTTP, el navegador lo bloqueará como "contenido mixto". Asegúrate de que la URL del video también sea HTTPS.
4. No activar Domain Guard
Si embedas contenido premium sin Domain Guard, alguien puede copiar tu código iframe y ponerlo en su propio sitio. Domain Guard restringe la reproducción solo a los dominios que tú autorices.
5. Olvidar el atributo playsinline
En iOS, sin playsinline, el video se abre en pantalla completa automáticamente. Si quieres que se reproduzca inline (dentro de la página), agrégalo siempre.
6. No optimizar para velocidad
- Usa
preload="none"si tienes muchos videos en una página (no precargues todos) - Usa
preload="metadata"si solo tienes 1-2 videos (carga la duración y thumbnail) - Carga las librerías JS del player con
deferoasync
✅ Checklist de embed profesional: HTTPS ✓ | Responsivo ✓ | Domain Guard ✓ | playsinline ✓ | preload optimizado ✓ | Autoplay muted (si aplica) ✓
¿Necesitas un reproductor profesional sin complicaciones?
XtreamCast Player Advance™ se embebe con un iframe o script. Chromecast, VAST, Domain Guard y personalización incluidos. Sin configurar HLS.js manualmente.