Las etiquetas <video> y <source>

Preparaste correctamente un archivo de video para la Web. Le diste las dimensiones y la resolución correctas. Incluso creaste archivos WebM y MP4 independientes para diferentes navegadores.

Para que cualquier persona pueda ver tu video, debes agregarlo a una página web. Para hacerlo correctamente, se deben agregar dos elementos HTML: el elemento <video> y el elemento <source>. Además de los aspectos básicos sobre estas etiquetas, en este artículo, se explican los atributos que debes agregar a esas etiquetas para crear una buena experiencia del usuario.

Especifica un solo archivo

Aunque no se recomienda, puedes usar el elemento de video por sí solo. Usa siempre el atributo type como se muestra a continuación. El navegador usa este atributo para determinar si puede reproducir el archivo de video proporcionado. Si no puede, se muestra el texto adjunto.

<video src="chrome.webm" type="video/webm">
    <p>Your browser cannot play the provided video file.</p>
</video>

Especifica varios formatos de archivo

Recuerda que, en Conceptos básicos de los archivos multimedia, no todos los navegadores admiten los mismos formatos de video. El elemento <source> te permite especificar varios formatos como resguardo en caso de que el navegador del usuario no admita uno de ellos.

En el siguiente ejemplo, se produce el video incorporado que se usa como ejemplo más adelante en este artículo.

<video controls>
  <source src="chrome.webm" type="video/webm">
  <source src="chrome.mp4" type="video/mp4">
  <p>Your browser cannot play the provided video file.</p>
</video>

Siempre debes agregar un atributo type a las etiquetas <source>, aunque sea opcional. Esto garantiza que el navegador solo descargue el archivo que puede reproducir.

Este enfoque tiene varias ventajas en comparación con la publicación de diferentes HTML o secuencias de comandos del servidor, en especial en dispositivos móviles:

  • Puedes enumerar los formatos en orden de preferencia.
  • El cambio del lado del cliente reduce la latencia, ya que solo se realiza una solicitud para obtener contenido.
  • Permitir que el navegador elija un formato es más sencillo, rápido y, posiblemente, más confiable que usar una base de datos de compatibilidad del servidor con detección de usuario-agente.
  • Especificar el tipo de cada fuente de archivo mejora el rendimiento de la red; el navegador puede seleccionar una fuente de video sin tener que descargar parte del video para "detectar" el formato.

Estos problemas son especialmente importantes en contextos móviles, en los que el ancho de banda y la latencia son de suma importancia, y la paciencia del usuario probablemente sea limitada. Omitir el atributo type puede afectar el rendimiento cuando hay varias fuentes con tipos no admitidos.

Existen algunas formas de analizar los detalles. Consulta A Digital Media Primer for Geeks para obtener más información sobre cómo funcionan el video y el audio en la Web. También puedes usar la depuración remota en las Herramientas para desarrolladores para comparar la actividad de red con atributos de tipo y sin atributos de tipo.

Especifica la hora de inicio y finalización

Ahorra ancho de banda y haz que tu sitio se sienta más responsivo: usa fragmentos de contenido multimedia para agregar horas de inicio y finalización al elemento de video.

Para usar un fragmento de contenido multimedia, agrega #t=[start_time][,end_time] a la URL del contenido multimedia. Por ejemplo, para reproducir el video del segundo 5 al 10, especifica lo siguiente:

<source src="chrome.webm#t=5,10" type="video/webm">

También puedes especificar las horas en <hours>:<minutes>:<seconds>. Por ejemplo, #t=00:01:05 inicia el video en el minuto uno con cinco segundos. Para reproducir solo el primer minuto del video, especifica #t=,00:01:00.

Puedes usar esta función para ofrecer varias vistas del mismo video, como puntos de inserción en un DVD, sin tener que codificar y publicar varios archivos.

Para que esta función funcione, tu servidor debe admitir solicitudes de rango y esa capacidad debe estar habilitada. La mayoría de los servidores habilitan las solicitudes de rango de forma predeterminada. Debido a que algunos servicios de hosting las desactivan, debes confirmar que las solicitudes de rango estén disponibles para usar fragmentos en tu sitio.

Afortunadamente, puedes hacerlo en las herramientas para desarrolladores de tu navegador. En Chrome, por ejemplo, se encuentra en el panel de redes. Busca el encabezado Accept-Ranges y verifica que diga bytes. En la imagen, dibujé un cuadro rojo alrededor de este encabezado. Si no ves bytes como el valor, deberás comunicarte con tu proveedor de hosting.

Captura de pantalla de las Herramientas para desarrolladores de Chrome: Accept-Ranges: bytes.

Incluye una imagen de póster

Agrega un atributo poster al elemento video para que los usuarios tengan una idea del contenido en cuanto se cargue el elemento, sin necesidad de descargar el video ni iniciar la reproducción.

<video poster="poster.jpg" ...>
  …
</video>

Un póster también puede ser un resguardo si el video src está dañado o si no se admite ninguno de los formatos de video proporcionados. La única desventaja de las imágenes de póster es que se realiza una solicitud de archivo adicional, lo que consume algo de ancho de banda y requiere renderización. Para obtener más información, consulta Codifica imágenes de manera eficiente.

Qué no debes hacer
Vista previa del video sin miniatura.
Sin un póster de resguardo, el video se ve como si estuviera roto.
Qué debes hacer
Vista previa del video con una miniatura.
Un póster de resguardo hace que parezca que se capturó el primer fotograma.

Asegúrate de que los videos no desborden los contenedores

Cuando los elementos de video son demasiado grandes para el viewport, pueden desbordar su contenedor, lo que imposibilita que el usuario vea el contenido o use los controles.

Elemento de video en una página web vertical para dispositivos móviles que supera el ancho visible de la página.
Captura de pantalla de Chrome para Android, orientación vertical: el elemento de video sin diseño se desborda del viewport.
Elemento de video en una página web móvil horizontal que supera el ancho visible de la página.
Captura de pantalla de Chrome para Android, horizontal: el elemento de video sin diseño se desborda del viewport.

Puedes controlar las dimensiones del video con CSS. Si CSS no satisface todas tus necesidades, las bibliotecas y los complementos de JavaScript, como FitVids, pueden ayudarte, incluso para videos de YouTube y otras fuentes. Lamentablemente, estos recursos pueden aumentar los tamaños de las cargas útiles de red, lo que tiene consecuencias negativas para tus ingresos y las billeteras de tus usuarios.

Para usos simples como los que describo aquí, usa consultas de medios de CSS para especificar el tamaño de los elementos según las dimensiones del viewport; max-width: 100% es tu amigo.

Para el contenido multimedia en iframes (como los videos de YouTube), prueba un enfoque responsivo (como el que propone John Surdakowski).

CSS

.video-container {
    position: relative;
    padding-bottom: 56.25%;
    padding-top: 0;
    height: 0;
    overflow: hidden;
}

.video-container iframe,
.video-container object,
.video-container embed {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

HTML

<div class="video-container">
  <iframe
    src="//www.youtube.com/embed/l-BA9Ee2XuM"
    frameborder="0"
    width="560"
    height="315"
  ></iframe>
</div>

Probar

Compara la muestra responsiva con la versión no responsiva. Como puedes ver, la versión no responsiva no ofrece una buena experiencia del usuario.

Orientación del dispositivo

La orientación del dispositivo no es un problema para los monitores de escritorio o las laptops, pero es muy importante cuando se considera el diseño de páginas web para dispositivos móviles y tablets.

Safari en iPhone cambia correctamente entre la orientación vertical y la horizontal:

Captura de pantalla de un video que se reproduce en Safari en un iPhone, en modo vertical.
Captura de pantalla de un video que se reproduce en Safari en un iPhone, en modo horizontal y en pantalla completa.

La orientación del dispositivo en un iPad y Chrome en Android puede ser problemática. Por ejemplo, sin ninguna personalización, un video que se reproduce en un iPad en orientación horizontal se ve de la siguiente manera:

Una página de vista previa en la que se indican las especificaciones del video y se reproduce en su resolución nativa sin ajustar.
Captura de pantalla de un video que se reproduce en Safari en un iPad, en orientación horizontal.

Configurar el video width: 100% o max-width: 100% con CSS puede resolver muchos problemas de diseño de orientación del dispositivo.

Reproducción automática

El atributo autoplay controla si el navegador descarga y reproduce un video de inmediato. La forma precisa en que funciona depende de la plataforma y el navegador.

Incluso en las plataformas en las que es posible la reproducción automática, debes considerar si es una buena idea habilitarla:

  • El uso de datos puede ser costoso.
  • Reproducir contenido multimedia antes de que el usuario lo desee puede acaparar el ancho de banda y la CPU, y, por lo tanto, retrasar la renderización de la página.
  • Es posible que los usuarios se encuentren en un contexto en el que la reproducción de video o audio sea intrusiva.

Precargar

El atributo preload proporciona una sugerencia al navegador sobre la cantidad de información o contenido que se debe precargar.

Valor Descripción
none Es posible que el usuario decida no mirar el video, por lo que no debes precargar nada.
metadata Los metadatos (duración, dimensiones y pistas de texto) se deben cargar previamente, pero con un video mínimo.
auto Se considera deseable descargar todo el video de inmediato. Una cadena vacía produce el mismo resultado.

El atributo preload tiene diferentes efectos en distintas plataformas. Por ejemplo, Chrome almacena en búfer 25 segundos de video en computadoras, pero no en iOS ni Android. Esto significa que, en dispositivos móviles, puede haber demoras en el inicio de la reproducción que no ocurren en computadoras de escritorio. Consulta Reproducción rápida con carga previa de audio y video o el blog de Steve Souders para obtener más detalles.

Ahora que sabes cómo agregar contenido multimedia a tu página web, es momento de aprender sobre la accesibilidad de contenido multimedia, en la que agregarás subtítulos a tu video para personas con discapacidad auditiva o para cuando no sea posible reproducir el audio.