Documentos de Académico
Documentos de Profesional
Documentos de Cultura
com
HTML5
Multimedia
DESARROLLARYDISEÑO
Ian Devlin
HTML5 Multimedia: Desarrollo y Diseño
Ian Devlin
Editor:Rebeca Gulick
Editor de desarrollo y copia:Anne-Marie Walker Revisor
técnico:chris molinos Coordinador de produccion:
Myrna Vladić Compositor:david van ness Corrector de
pruebas:patricia pane Indexador:Valerie Haynes-Perry
Diseño de portada:Aren Howell Straiger Producción de
portada:Jaime Brenner Diseño de interiores:Mimi Heft
Aviso de Derechos
Reservados todos los derechos. Ninguna parte de este libro puede ser reproducida o transmitida de ninguna forma por ningún
medio, ya sea electrónico, mecánico, fotocopiado, grabación o cualquier otro, sin el permiso previo por escrito del editor. Para
obtener información sobre cómo obtener permiso para reimpresiones y extractos, comuníquese con permisos@peachpit.com.
Aviso de responsabilidad
La información de este libro se distribuye "tal cual", sin garantía. Si bien se han tomado todas las precauciones en la
preparación del libro, ni el autor ni Peachpit Press serán responsables ante ninguna persona o entidad con respecto a
cualquier pérdida o daño causado o presuntamente causado directa o indirectamente por las instrucciones contenidas
en este libro o por los productos de software y hardware informáticos descritos en él.
Marcas registradas
Muchas de las designaciones utilizadas por los fabricantes y vendedores para distinguir sus productos se reclaman como marcas
comerciales. Cuando esas designaciones aparecen en este libro, y Peachpit tenía conocimiento de un reclamo de marca registrada,
las designaciones aparecen según lo solicitado por el propietario de la marca registrada. Todos los demás nombres de productos y
servicios identificados a lo largo de este libro se utilizan únicamente de forma editorial y en beneficio de dichas empresas sin
intención de infringir la marca registrada. Ningún uso de este tipo, o el uso de cualquier nombre comercial, pretende transmitir
respaldo u otra afiliación con este libro.
ISBN-13: 978-0-321-79393-5
ISBN-10: 0-321-79393-5
987654321
Escribir un libro es un proceso difícil y que lleva mucho tiempo, y del que no sabía
nada antes de embarcarme en este proyecto. Varias personas me han ayudado en
el proceso de escritura del libro y otras me han ayudado en el proceso de HTML5,
lo sepan o no. Todos merecen mi agradecimiento.
A Rebecca Gulick por darme la oportunidad de escribir este libro y por
explicarme claramente los pasos a seguir.
A Anne Marie Walker por asegurar que mis palabras sean claras y comprensibles. A
Chris Mills por sus habilidades de edición y revisión técnica, y por brindarme
muchas buenas sugerencias y modificaciones a lo largo del texto.
A Rich Clark por darme la oportunidad de ser curador de HTML5 Gallery
(www.html5gallery.com), lo que no solo aumentó mi interés y conocimiento sobre
HTML5, sino que también me llevó a escribir este libro.
A Remy Sharp por llamar mi atención por primera vez sobre HTML5 en un artículo
en.red revista en octubre de 2009.
A usted, lector, por decidir adquirir este libro con la intención de
aprender. Espero que lo encuentres ameno y educativo.
IVMULTIMEDIA HTML5
CONTENIDO
Introducción. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xi
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 <figura> y
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21
multimedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
elementos HTML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
¡Bienvenido, Multimedia Nativa!. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 El
CONTENIDOV
CAPÍTULO 3 USO DE SONIDO. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .44 Códecs de
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 MP3
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47 WAV
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 ACA
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 MP4
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .48 Soporte de
Terminando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62MP4 (H.264)
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 WebM
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 Soporte de
VI MULTIMEDIA HTML5
CAPÍTULO 5 API DE JAVASCRIPT Y CONTROLES PERSONALIZADOS . . . . . . . . . . . . . . . . . . .84
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123 esquinas
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136
Terminando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137
CONTENIDOVII
CAPÍTULO 7 TRANSICIONES, TRANSFORMACIONES Y ANIMACIÓN. . . . . . . . . . . .138
Uso de transiciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
Uso de transiciones con audio y video. . . . . . . . . . . . . . . . . . . . . . . . . . . .143
Estilo con transiciones CSS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .144 transiciones
de desvanecimiento. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 Explorando
transformaciones 2D. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 Escalar un video
Terminando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
viiiMULTIMEDIA HTML5
CAPÍTULO 9 USO DE VÍDEO CON CANVAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196 El
elemento lienzo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .198 La API
2D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .200
Tomar una captura de pantalla de un video HTML5 . . . . . . . . . . . . . . . . . . . . . . . . . .202
Terminando . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
CONTENIDOIX
CAPÍTULO 11 CARACTERÍSTICAS FUTURAS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238 API
de audio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240 API de
datos de audio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .240 API de
audio web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .245 API
getUserMedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .247 API de
conexión de pares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .249 API de
transmisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250 El
objeto MediaStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .250 API de
WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252 La interfaz
WebSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .252 Uso de WebSockets
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .254 Terminando
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
Índice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260
XMULTIMEDIA HTML5
INTRODUCCIÓN
Como desarrollador web o diseñador web, o aquellos de ustedes que solo mantienen su propio sitio
web, saben que la web cambia constantemente y que las herramientas y los métodos que se utilizan
para crear sitios web están en constante desarrollo. Como las dunas de arena en el Sahara, se
Este libro está dirigido a aquellos que comienzan con HTML5 y agregan audio y video
HTML5 a sus sitios web, y aquellos que ya están familiarizados con HTML5 multimedia
pero desean aprender más.
Se asume algún conocimiento básico de HTML y CSS, y los últimos capítulos requieren al
menos un conocimiento rudimentario de JavaScript. Dicho esto, todos los ejemplos en el sitio
web que acompaña al libro en www.html5multimedia.com están completos.
INTRODUCCIÓNXI
CAPTURAS DE PANTALLA Y VERSIONES DEL NAVEGADOR
Mientras escribía este libro, algunos proveedores de navegadores lanzaron versiones más
nuevas de sus productos. Firefox ahora está en la versión 7, Chrome está en la versión 14 y
Safari se ha movido a 5.1. Las capturas de pantalla del libro suelen indicar de qué navegador y
versión se tomó en el momento en que se escribió el capítulo. Esto, por supuesto, significa
que algunas de las capturas de pantalla son de versiones anteriores del navegador. Pero
tenga la seguridad de que todavía funcionan igual de bien en las últimas versiones, y si no lo
hacen, está claramente marcado.
Todo el código utilizado en los ejemplos de este libro se encuentra en el sitio web adjunto en
www.html5multimedia.com. Puede descargar los archivos en su totalidad o navegar a los
distintos archivos a través del sitio web y verlos funcionando en línea.
CONTACTO
En los capítulos posteriores de este libro, parte de lo que leerá es experimental debido a las
especificaciones que aún estaban en desarrollo en el momento de escribir este artículo y el
soporte deficiente o inexistente en los navegadores. Esto, por supuesto, puede haber
cambiado para cuando tenga este libro en sus manos. El sitio web del libro indicará soporte
mejorado cuando corresponda.
¡Es tiempo de empezar! Comencemos por echar un vistazo rápido a HTML5, qué es y
de dónde viene.
XIIMULTIMEDIA HTML5
Esta página se dejó en blanco intencionalmente
1
UNINTRODUCCIÓN
AHTML5
HTML5 es una revisión importante del
también se incluye una gran cantidad de API de JavaScript para brindar a los
¡Salgamos y aprendamos!
3
QUÉESHTML5?
HTML5 es la última y mejor versión del lenguaje central de la World Wide Web y es uno de los
desarrollos más emocionantes que le han ocurrido a la web y a la comunidad web en mucho
tiempo. HTML (HyperText Markup Language) es el lenguaje que ha estado en el corazón de
todos los documentos web desde su concepción a principios de la década de 1990.
El predecesor de HTML5 es HTML 4.01, y una de las principales diferencias entre HTML
4.01 y HTML5 es la adición de muchas API de JavaScript (interfaces de programación de
aplicaciones) a la especificación. Por supuesto, una de estas especificaciones está directamente
relacionada con el tema de este libro: la API que permite interacciones con elementos
multimedia dentro del navegador. Además de estas nuevas API, HTML5 también altera el
significado de algunos elementos HTML existentes, elimina otros y, lo que es más importante,
agrega otros nuevos, algunos de los cuales le permiten brindar un significado más semántico
a su contenido.
Vale la pena señalar que la mayoría de estos nuevos elementos en realidad no agregan ninguna
funcionalidad nueva que no haya visto antes.
ELPROGRESIÓNDEHTML5
Es de conocimiento bastante común que Tim Berners-Lee es el padre de HTML y lo que todo
el mundo reconoce como la web hoy en día.
No hay necesidad de entrar en una historia larga y detallada del crecimiento de
HTML desde la versión inicial en 1990 hasta la versión en la que la mayoría de ustedes
habrán crecido, HTML 4.01. Pero vale la pena ver cómo HTML5 llegó a buen término y
luego evolucionó.
En 1998, los miembros del World Wide Web Consortium (W3C; www.w3.org)
decidieron que no valdría la pena extender la especificación HTML más allá de HTML
4.01. Decidieron que el futuro de la web estaba en XML (lenguaje de marcado extensible)
debido a su sintaxis más estricta, que también facilitaba mucho el procesamiento de
documentos web XML.
Dejando descansar HTML 4.01, comenzaron a trabajar en una nueva especificación para
XHTML 1.0, que básicamente era una reformulación de HTML 4.01 como un vocabulario XML
que contenía varias reglas de sintaxis estrictas. En lo personal, yo era bastante fan de esto,
porque me gustaba la uniformidad de todo, pero no a todos les convencía. Entonces, dos
HTML5YCOMPATIBILIDAD AL REVÉS
En febrero de 2004, un grupo separado, que incluía personas de Opera, Mozilla y, más
tarde, Apple, llamado WHATWG (Grupo de tecnología de aplicaciones de hipertexto web;
www.whatwg.org) publicó un borrador de una nueva especificación, Web Forms 2.0, que
destinado a ampliar los formularios HTML. Esta especificación no tenía relación con el W3C y,
de hecho, la especificación establece:
“Este documento actualmente no tiene ningún estatus oficial dentro del W3C. Eso
es el resultado de una colaboración informal entre las partes interesadas durante la cena, en varias
¿QUÉ ES HTML5?5
La situación cambió para mejor en 2006 cuando el W3C cambió de opinión con
respecto a XHTML y decidió no continuar con él. En 2007, se instituyó el Quinto
Grupo de Trabajo de HTML del W3C, y el W3C también anunció que permitiría que
la constitución del Grupo de Trabajo de XHTML 2 expirara a fines de 2009. Usando
la especificación de Aplicaciones Web de WHATWG como base, tanto el W3C y el
WHATWG comenzó a desarrollar una nueva especificación HTML, aunque algo
extraño, no fue un proceso colaborativo.
Como resultado, en realidad hay dos versiones diferentes de la especificación, aunque el
editor de ambas es Ian Hickson de Google. Afortunadamente, no hay muchas diferencias entre
los dos; la principal diferencia es cómo se mantienen. La especificación WHATWG es un
"estándar de vida mantenido continuamente"; se mantiene en una escala granular sección por
sección. La especificación W3C, por otro lado, sigue el estilo más tradicional de los
lanzamientos por etapas. En cuanto al contenido, son prácticamente iguales, aunque una de
las principales diferencias (al momento de escribir este artículo) es que la versión WHATWG
incluye el formato de archivo WebVTT y algunas características de la API de seguimiento de
texto (que se analizan en el Capítulo 8) que el La versión W3C no lo hace.
Actualmente, las versiones W3C y WHATWG de la especificación HTML5 se encuentran en
una etapa llamada "Última llamada", lo que significa que las comunidades internas y externas
del W3C están invitadas a confirmar la solidez técnica de la especificación.
HTML5ESPECIFICACIONES
Hay dos versiones diferentes de la especificación HTML5 disponibles en este momento, pero hay algunas otras versiones
que también vale la pena echarle un vistazo:
- Especificación W3C HTML5.La última versión publicada se encuentra en www.w3.org/TR/html5. Esta versión es la que más
se acerca a ser definitiva.
- Especificación HTML5 de WHATWG: edición para desarrolladores web.La edición para desarrolladores web se encuentra en
http://developers.whatwg.org. Esta es una versión agradable y fácil de ver de la especificación WHATWG que generalmente se
En realidad, ahora puedes usar HTML5. Muchos sitios web existentes están escritos en
HTML5, que probablemente ya conozca. Aunque la fecha objetivo actual para que la
especificación HTML5 alcance el estado de recomendación es 2014, esto no significa que
no pueda usarla.
En el momento de escribir este artículo, todas las últimas versiones de los principales navegadores
admiten algunas, si no la mayoría, de las características de HTML5. Incluso IE9 finalmente es compatible con
el marcado y la funcionalidad de HTML5. Esto debería ayudar a eliminar cualquier duda que pueda tener con
¿QUÉ ES HTML5?7
PRINCIPAL HTML5
ELEMENTOS ESTRUCTURALES
Cualquier uso de los elementos multimedia HTML5 y las API que se analizan en este libro
requerirá, naturalmente, la escritura de marcado HTML. Por supuesto, podría usar el
marcado HTML 4.01 (aunque necesita usar HTML5DOCTIPO mencionado en esta
sección), pero debido a que este libro trata sobre multimedia HTML5, tiene sentido que
utilice el marcado HTML5. Todos los ejemplos a lo largo de este libro y en el sitio web
usan marcado HTML5.
Comencemos por echar un vistazo rápido a los principales elementos estructurales que pueden
DOCTYPE Y CHARSET
Al igual que con cualquier documento HTML, debe comenzar un documento HTML5 con un
DOCTIPO. A DOCTIPO le dice al navegador qué versión de HTML usa la página en
cuestión, y el navegador, a su vez, usa esto para determinar cómo mostrar la
página. Lo bueno de HTML5DOCTIPO es su sencillez.
Con HTML 4.01, podría escribir esto:
“http://www.w3.org/TR/html4/strict.dtd”>
<!DOCTYPEhtml>
Los navegadores modernos pueden usar dos modos diferentes para interpretar el CSS de un
En modo capricho por otro lado, hace que el navegador muestre el CSS de acuerdo con reglas
antiguas que no especifican. Este modo existe para la compatibilidad con versiones anteriores
porque los navegadores más antiguos no representaban CSS de acuerdo con las especificaciones.
En estos días, el modo estándar es el que desea usar, porque en la mayoría de los
casos, el navegador más antiguo que admitirá será IE6, que no necesita el modo
peculiar para funcionar correctamente (aunque probablemente requerirá algún CSS
específico de IE6, pero es probable que ¡Ya lo sabes!).
En HTML5, usarías:
Algunos de los nuevos elementos que se utilizado para elementos HTML. Puede leer este análisis en
incluyeron en la especificación HTML5 no se http://code.google.com/webstats/2005-12/classes.html. Los 10
eligieron al azar. principales nombres de clase CSS y sus elementos HTML5
correspondientes se enumeran enTabla 1.1.
En 2004, el editor de la especificación HTML5, Ian Hickson de
Google, llevó a cabo un experimento de extracción de datos Aunque la Tabla 1.1 no cubre todos los nuevos
usando el índice de Google en más de 1000 millones de páginas elementos de HTML5 que se agregaron, sí muestra
web para tener una mejor idea de lo que realmente estaba hecha que hubo algo de reflexión detrás de la denominación
la web con respecto al contenido del documento web. . Publicó una de los nuevos elementos de HTML5 y el contenido
serie de análisis, uno de los cuales identifica los nombres de clases semántico que representan.
de CSS más populares.
TABLA 1.1Los 10 nombres de clases HTML más populares y sus elementos HTML5 correspondientes
2 menú <menú>
3 título <encabezado>
4 pequeña <pequeño>
7 encabezamiento <encabezado>
8 navegación <navegación>
10 botón n/A
Casi todos los documentos HTML tienen un encabezado y un pie de página. La especificación HTML5
reconoce esto e incluye dos elementos específicos que puede usar para identificar semánticamente
un encabezado y un pie de página. Sin embargo, estos elementos no están restringidos a uno por
documento y se pueden usar para especificar las áreas de encabezado y pie de página de un
<encabezado>
<pie de página>
<pequeño>Copyright © 2011</pequeño>
</pie de página>
Elencabezamiento elemento no tiene que aparecer en la parte superior del documento web, al
igual que el pie de página elemento no tiene que ser colocado en la parte inferior. De hecho, puedes
colocar cualquiera de los dos donde quieras. Dicho esto, a menudo tiene sentido hacerlo, solo para
que la fuente del documento sea más fácil de leer.
<encabezado>
<hgrupo>
</hgrupo>
<a href=”home.html”>Inicio</a>
</encabezado>
HGROUP¡CONTROVERSIA!
Cuando está diseñando una página web con HTML, a menudo usa eldivisiónelemento para
indicar secciones específicas de su documento. Esto generalmente funciona bien y es todo lo
que se necesita. Pero, ¿qué pasaría si quisiera darle a su sección un significado semántico
particular para que sea más que "solo undiv”?
Aquí es donde elartículoysecciónentran elementos, y a menudo hay un poco de
confusión sobre cuál usar y cuándo. La confusión surge porque te ves obligado a
pensar un poco más sobre lo que estás escribiendo y la forma en que lo presentas.
Si simplemente desea contener información solo con fines de estilo, eldivisión
elemento es el que se va a utilizar. La razón es que el contenido dentro deldivisiónno tiene ningún
significado semántico específico, por ejemplo, cuando se usa como un elemento de "envoltura" para
<div class=”envoltura”>
<div class=”columnOne”>Esta es la columna uno</div>
</div>
secciónEl elemento es probablemente el camino a seguir. Pero antes de tomar la decisión final
contener varias secciones, cada una de las cuales tiene su propio encabezado. Pero en general,
periódico, solo con la forma en que se presenta. Unartículotambién puede representar una prenda de
vestir en su guardarropa, porque es un término genérico que se refiere a una sola unidad de
contenido que es independiente y se puede sindicar. Pero también puede relacionarse con otros
Por supuesto, la analogía del artículo periodístico también muestra que puedes anidarsección
elementos dentroartículoelementos y viceversa. Pero como con eldivisiónelemento, ¡no haga que el
<artículo>
<encabezado>
<h1>Multimedios HTML5</h1>
<sección>
<encabezado>
<h2>Vídeo</h2>
</encabezado>
<h2>Sonido</h2>
</encabezado>
</artículo>
contenidos dentro de un artículo, por ejemplo, en una página de resumen de noticias que contiene
<sección>
<encabezado>
<h1>Noticias HTML5</h1>
</encabezado>
<artículo>
<encabezado>
<h2>Multimedios HTML5</h2>
</encabezado>
<encabezado>
</encabezado>
</sección>
Como también ilustran los ejemplos, elartículoysecciónLos elementos también pueden contener
encabezamiento ypie de página elementos si tienen sentido semántico, como lo hacen aquí.
HELEMENTOS ENHTML5
Como habrás notado en los ejemplos de la sección “<artículo> y <sección>”, unh1elemento ha sido utilizado en la principal
encabezado (ya sea en generalartículoo sección)yh2elementos en el subencabezado de sección/artículoelementos. Esto se hizo con
fines de compatibilidad con versiones anteriores debido a la compatibilidad deficiente del navegador (excepto Firefox 5 y Chrome
12) para lo que se conoce como elAlgoritmo de esquematización HTML5.
El algoritmo de esquematización de HTML5 se define como parte de la especificación de HTML5 y se utiliza para determinar la
estructura de un documento de HTML5 utilizando sus encabezados, títulos, etc. para trazar el documento. Puede leer acerca de
los esquemas de documentos HTML5 en http://html5doctor.com/document-outlines.
Por el momento es recomendable ceñirse al uso de los diferenteshelementos para mantener la compatibilidad con navegadores
más antiguos. Naturalmente, la compatibilidad con el algoritmo mejorará con más lanzamientos de navegadores, pero como con
todo, la decisión final es suya.
ElnavegaciónEl elemento se utiliza para contener la navegación principal en todo su sitio. Por lo tanto,
cualquier enlace a páginas separadas, como Acerca de, Noticias y su blog, puede incluirse aquí.
supuesto, también puede contener simplemente una serie de hipervínculos a las páginas en cuestión:
<navegación>
<ul>
<li>
<a href=”index.html”>Inicio</a>
</li>
<li>
<a href=”about.html”>Acerca de</a>
</li>
<li>
<a href=”contacto.html”>Contacto</a>
</li>
</ul>
</nav>
serlo. También puede estar contenido dentro de unpie de página elemento, pero solo si es la navegación
principal de su sitio web. Debido a que los pies de página en estos días a menudo contienen un conjunto de
enlaces de navegación de sitios secundarios, no deben estar contenidos dentro de unnavegaciónelemento. Sin
embargo, está bien tener más de unanavegaciónelemento en la misma página, en caso de que se justifique su
uso.
ElaparteEl elemento se usa para contener contenido no principal de la página que es relevante para el
contenido principal al que se encuentra, pero el contenido principal tiene perfecto sentido por sí solo
sin él. el contenido de laaparteEl elemento también puede tener sentido por sí solo, aunque no
necesariamente.
Un uso actual, en el mundo real, delaparteEl elemento es para las barras laterales, que por supuesto
pueden contener cualquier cosa, desde widgets y fuentes de redes sociales hasta enlaces e imágenes
relacionados:
<aparte>
<encabezado>
<h1>Fuente de Twitter</h1>
</encabezado>
<ul>
<li>#HTML5 es increíble. - 26 de junio de 2011 a las 14:30</li>
<a href=”http://twitter.com/iandevlin”>¡sígueme!</a>
</pie de página>
</aparte>
<FIGURA> Y <FIGCAPTION>
Se introdujeron dos nuevos elementos para permitir relacionar un elemento multimedia (imagen,
video o audio) con un subtítulo específico, lo que por supuesto hace que el contenido dentro de estos
nuevos elementos sea más semántico (¡ahí está esa palabra otra vez!): elfigura
elemento y elfigcaptionelemento.
Elfigcaptionelemento sólo puede existir dentro de unfiguraelemento, aunque no
tiene porque estar ahí; obviamente, no todo el contenido tendrá un título:
<figura>
<img src=”images/html5-logo.gif” alt=”El logotipo de HTML5 “ />
<figcaption>
<strong>Figura 1: </strong>¡El logotipo de HTML5 en todo su esplendor!
</figcaption>
</figura>
una imagen o en la parte inferior (Figura 1.1). ¡Pero, por supuesto, no tienes que hacerlo y
En el momento de escribir este artículo, las últimas versiones de todos los principales navegadores son compatibles con varios de los nuevos elementos
de HTML5, especialmente los mencionados en este capítulo. IE8 y anteriores, sin embargo, no lo hacen. Estos nuevos elementos son completamente
desconocidos para estos navegadores y, por lo tanto, los navegadores no los renderizarán en absoluto.
<!--[si es IE 9]>
<script src=”//html5shim.googlecode.com/svn/trunk/html5.js”></script> <!
[endif]-->
Este script le dice a IE todo sobre los nuevos elementos que puede encontrar al renderizar el documento, por lo que felizmente
lo hace.
Para estos navegadores más antiguos, también debe agregar un estilo CSS predeterminado a ciertos elementos para que el navegador
sepa representarlos como elementos a nivel de bloque:
<!--[si es IE 9]>
<estilo>
artículo, aparte, figura, pie de página, encabezado, hgroup, menú, navegación, sección {
bloqueo de pantalla;
}
</estilo>
<![finalizar]-->
Si tiene la intención de configurar el HTML interno de un elemento o usa jQuery con HTML5 y versiones anteriores de IE,
debe agregar el interiorShiv script (http://jdbartlett.com/innershiv) a su documento web.
Deberá descargar este archivo JavaScript y alojarlo usted mismo, y luego agregarlo de la misma manera que agregaría el
calza interior archivo mencionado anteriormente:
<!--[si es IE 9]>
<script src=”innershiv.js”></script> <!
[endif]-->
Elcalza interior yinteriorShiv Los archivos funcionan juntos para permitirle trabajar con HTML5 en versiones anteriores de IE.
Tenga en cuenta que cada una de estas adiciones está contenida en comentarios condicionales que se dirigen a versiones de IE
anteriores a la versión 8. Esto es para evitar la adición y el procesamiento innecesarios de scripts para navegadores que no los necesitan.
<script>
alert(“¡No tuve que especificar el atributo de tipo!”);
</script>
ENVASE ARRIBA
Los procesos involucrados para que las especificaciones HTML5 actuales llegaran a donde
están ahora fueron, por supuesto, un poco más complicados de lo que se ha descrito en este
capítulo. Pero la breve explicación debería darle una base en el proceso.
Además, los elementos mencionados son solo una porción muy pequeña de los nuevos
elementos contenidos en la especificación HTML5, y también se han realizado cambios en
elementos que existían en HTML 4.01 y versiones anteriores. Puede leer una lista completa de
estas diferencias en www.w3.org/TR/html5-diff.
Sin embargo, los elementos que encontró en este capítulo son suficientes para
crear sus propios documentos HTML5 simples. Este conocimiento también le ayudará a
comprender los ejemplos y recursos proporcionados en este libro.
En el próximo capítulo, aprenderá un poco sobre la historia de multimedia dentro de los
navegadores, y también observará de cerca los elementos HTML5 que son específicamente
relevantes para multimedia HTML5.
TERMINANDO21
2
HTML5MULTIMEDIA
ELEMENTOS
Ahora que está armado con la historia
básica de HTML5 y sus elementos de
estructura, puede comenzar a aprender ab
HTML 4.01 no tenía un método definido para llevar audio y video a un sitio
esta estructura tan necesaria para entregar audio y video a través de Internet a
23
HISTORIADEWEB MULTIMEDIA
Cuando los navegadores y la idea de la web aparecieron por primera vez a principios de la
década de 1990, no había multimedia web. Poco después, comenzaron a incorporarse
imágenes, pero en el mejor de los casos eran multimedia de pobres. Aunque podían animarse
con la llegada de los GIF animados, por supuesto no eran interactivos en absoluto.
Incluso con la existencia de archivos de audio y video, la capacidad de la tecnología de
Internet para entregar este multimedia a través de la web era limitada. Las conexiones a
Internet eran lentas, los archivos de audio y video eran grandes y nadie quería esperar a que
se descargaran los archivos grandes. Una vez que llegó el archivo, se tuvo que usar un
reproductor externo para ver el contenido, que estaba separado del navegador web. Esta era
la norma, y pocos se quejaron.
El aumento fenomenal en las velocidades de conexión a Internet trajo consigo la capacidad de
enviar multimedia a través de la web aún más rápido, y la tecnología de navegador web tuvo que
moverse con la misma rapidez, lo que por supuesto sucedió con la introducción de lo que ahora se
conoce como multimedia nativa.
Antes de sumergirse en la multimedia nativa, echemos un vistazo rápido a una descripción general de
los reproductores externos que se usaban (y aún se usan como reproductores de escritorio) para reproducir
REPRODUCTORES DE MEDIOS
Un reproductor multimedia es un término estándar utilizado para describir una pieza de software que tiene la
capacidad de reproducir archivos multimedia, como audio y video, generalmente a través de una interfaz
gráfica de usuario.
musicales) se usaba para reproducir música de fondo en documentos web y la música generalmente
multimedia a través del navegador. Luego se desarrolló una gran cantidad de otros jugadores de
RealNetworks lanzó su reproductor de audio RealAudio en 1995, que introdujo por primera vez la idea de
reproducir audio a través de la web usando un sistema propietario.real academia de bellas artes y
Con el lanzamiento de Windows 2000, Microsoft también lanzó la versión 7.1 de Windows
Media Player. Este tenía una interfaz gráfica muy mejorada y, en general, ofrecía una mejor
experiencia. Con este lanzamiento vinocódecs—protocolos de archivos especiales que
permiten crear y reproducir contenido multimedia.
habilidades específicas a otras aplicaciones de software más grandes (en este caso, un navegador web) y otras
aplicaciones de Internet enriquecidas. Lanzado inicialmente en 2007, Microsoft Silverlight admitía muchos
tipos diferentes de formatos de archivo de audio y video, así como animación e interactividad. Originalmente,
tenía una tasa de adopción lenta, pero a partir de junio de 2011, tenía una penetración de mercado de
aproximadamente el 73 por ciento, con Adobe Flash con una participación de mercado del 97 por ciento.
Apple también estuvo en el juego de los reproductores multimedia desde los primeros
días. Su primera versión de QuickTime se lanzó en 1991 para el sistema operativo System
Software 6. QuickTime continuó siendo una pieza de software solo para Mac hasta el
lanzamiento de QuickTime 4.0 en 1999, que también se ejecutaba en Windows y admitía la
reproducción de audio MP3. QuickTime 5 y 6 ofrecieron reproducción de video y Flash, y la
versión 6 también admitió la reproducción de MP4. La versión 7 salió en 2005 y mejoró la
reproducción de MP4, pero dejó de admitir contenido Flash. La última versión de QuickTime
en el momento de escribir este artículo es la versión 10 para Mac OS, y diferentes sabores de
Microsoft Windows tienen versiones anteriores.
Cada proveedor tenía su propia forma de entregar multimedia, pero, por supuesto,
ninguno era perfecto. No había un método estandarizado para incrustar audio y video en un
documento web, y es por esta razón, para estandarizar la incrustación de multimedia, que el
audioyvideoLos elementos se convirtieron en parte de la especificación HTML5.
Todos los reproductores multimedia tenían un problema importante en común: los usuarios finales
necesitaban tener instalado el complemento adecuado para poder reproducir el audio o el video necesarios.
Inicialmente, todo lo que hicieron estos complementos fue iniciar el reproductor multimedia respectivo
para reproducir el audio o el video. La capacidad de mostrar multimedia dentro del navegador llegó más
tarde, aunque las ventanas emergentes (donde el reproductor multimedia apropiado se iniciaba fuera del
navegador) todavía eran comunes. Si el complemento requerido no existía en su sistema, tenía que
las principales áreas de destino del malware. Un ejemplo de esto se identificó en marzo de 2011
cuando se determinó que una vulnerabilidad crítica en Flash Player 10.2 podría permitir a atacantes
Por supuesto, tan pronto como se detectan estas vulnerabilidades, los proveedores se mueven
rápidamente para parchearlas y lanzar una versión. Pero nuevamente, esto significa que el usuario
Apple de abril de 2010 de no admitir Flash en iPhones y iPads. Por supuesto, esto hace que el
Veamos ahora cómo se pueden aprovechar estos reproductores multimedia a través de sus
- subprograma
- empotrar
- objeto
Elsubprograma El elemento, como sugiere su nombre, solo se usó para incrustar applets de
Java y en realidad quedó obsoleto en HTML 4.01. Permitió que un applet de Java se incrustara
en cualquier lugar dentro del documento web donde se colocó el elemento. Lo más probable
es que nunca necesite usar este elemento porque ahora está obsoleto, así que sigamos
adelante.
ElempotrarEl elemento fue introducido por el navegador Netscape 2.0 para permitir a los
advertencia junto con un cuadro vacío. Un ejemplo de código incrustado que se usa para reproducir
puedes ver, uno de losparámetro elementos aquí se utiliza para establecer un parámetro llamado
entienden la primera configuración en la declaración del objeto. Se establecen otros dos parámetros:
permitir el acceso al script, que permite que la página HTML interactúe con el objeto si el objeto tiene
algo con lo que interactuar; ypermitir pantalla completa,lo que permite que el objeto llene la pantalla
inicialmente. Afortunadamente, HTML5 hace que la incrustación de objetos multimedia sea mucho
Con multimedia nativa, el objeto ya no está incrustado en el documento web, sino que
el navegador lo trata como un objeto nativo y, por lo tanto, lo integra. Esto brinda
beneficios inmediatos, como:
- Ya no se requieren complementos.
- Velocidad: todo lo que sea nativo de un navegador será más rápido que cualquier complemento de
terceros.
HTML5 proporciona cuatro nuevos elementos de marcado que lo ayudan a lograr contenido
multimedia nativo en el navegador. Echemos un vistazo a cada uno de estos elementos y sus posibles
atributos.
<audio src=”sayHello.mp3”></audio>
ATRIBUTO DESCRIPCIÓN
origen Proporciona la dirección del recurso multimedia, en este caso, un archivo de audio o
una secuencia. Este atributo debe contener una URL válida para la fuente de audio.
precarga Se utiliza para indicarle al navegador cómo precargar la fuente de audio, si es que lo hace.
Solo le informa al navegador qué hacer, pero en última instancia, el navegador hará lo que
ATRIBUTO DESCRIPCIÓN
auto-reproducción Es un atributo booleano que informa al navegador para que comience a reproducir
automáticamente la fuente de audio cuando se carga la página. Use esto con precaución
porque la reproducción automática de audio puede ser una molestia para los usuarios.
control S También es un atributo booleano que, si está presente, le dice al navegador que proporcione
círculo Otro atributo booleano, que indica que el audio se reproducirá continuamente
en un bucle. Es recomendable usar esto con precaución porque puede ser una
molestia para los usuarios, ¡especialmente si no proporciona ningún control
para que lo detengan! Este atributo actualmente no es compatible con Firefox
5.
grupo de medios Permite vincular varios elementos multimedia, en este caso fuentes de audio.
Esto puede, por ejemplo, permitir la reproducción y sincronización de dos
fuentes de audio diferentes en dos lugares diferentes de la pantalla.
Como puede ver en la Tabla 2.1, se pueden usar varias configuraciones diferentes con el audio
algunos de los cuales tienen una serie de configuraciones. Una declaración de audio de muestra en
un documento web podría verse así:
Este simple fragmento de código le informa al navegador que incruste el archivo de audio especificado en
el navegador y que utilice los propios controles multimedia del navegador. Varios navegadores tienen
diferentes controles predeterminados, por lo que la apariencia de los controles de audio depende del
navegador que esté usando el espectador. Puede ver ejemplos de cómo estos controles se representan de
ElvideoEl elemento le permite incrustar contenido de video en su documento web y, una vez
más, puede especificar una serie de atributos para controlar este contenido de video.
Muchos atributos son los mismos que los especificados para elaudioelemento, pero hay
algunos extras, y todos están enumerados enCuadro 2.2.
ATRIBUTO DESCRIPCIÓN
origen Proporciona la dirección del recurso multimedia, en este caso, un archivo de video o una transmisión. Este atributo debe contener
precarga Se utiliza para indicarle al navegador cómo precargar la fuente de video, si es que lo hace. Nuevamente, es solo una sugerencia para
el navegador, que puede optar por anularlo con una posible configuración de usuario.
ninguna Informa al navegador que no se espera que el usuario quiera ver el video, por lo que no es
necesario realizar ninguna carga previa.
metadatos Informa al navegador que el usuario puede querer ver el video y, por lo tanto, sus metadatos (por ejemplo,
dimensiones, duración) deben cargarse previamente.
auto Le dice al navegador que decida si descargar los metadatos, la fuente completa o no
descargar nada. Este es el valor predeterminado siprecargano se especifica
auto-reproducción Es un atributo booleano que informa al navegador para que comience a reproducir automáticamente la fuente de video tan pronto como
control S También es un atributo booleano que, si está presente, le dice al navegador que proporcione un conjunto predeterminado de controles para el
video.
apagado Controla el estado predeterminado de la fuente de video. Esto significa que puede especificar que un video que se reproduce
automáticamente se puede silenciar cuando comienza a reproducirse, evitando así cualquier irritación para el usuario.
círculo Otro atributo booleano, que indica que el video se reproducirá continuamente en un bucle.
póster Permite que se muestre un archivo de imagen cuando no hay datos de video disponibles.
Sipósterno está especificado, el navegador mostrará el primer cuadro del video, que por supuesto puede
no ser la imagen que desea mostrar. Debe contener una URL válida para la imagen en cuestión.
ATRIBUTO DESCRIPCIÓN
origen cruzado Indica si la fuente de video se puede compartir entre dominios o no. De forma predeterminada, la fuente se puede compartir
entre dominios.
Si no se especifica ningún ajuste en particular, peroorigen cruzadoestá presente, por defecto anónimo ajuste.
Debido a que este atributo es tan nuevo en la especificación, aún no se ha implementado en ninguno de los navegadores.
grupo de medios Permite que múltiples elementos multimedia, en este caso fuentes de video, se vinculen entre sí. Esto puede, por ejemplo,
permitir la reproducción y sincronización de dos videos diferentes en dos lugares diferentes de la pantalla.
ORIGEN CRUZADO
origen cruzadoes una adición muy reciente a la especificación HTML5 y, como tal,
actualmente no tiene aplicación en el mundo real. Ninguno de los principales
navegadores lo admite. Utiliza la especificación CORS (Cross-Origin Resource Sharing),
sobre la que puede leer en www.w3.org/TR/cors.
GRUPO DE MEDIOS
Me gustaorigen cruzado, grupo de medioses una adición muy nueva a la especificación HTML5
y en el momento de escribir este artículo aún no se ha implementado en ninguno de los
principales navegadores. Una vez implementado, será muy útil para la accesibilidad, ya que
permite escenarios como reproducir un video en lenguaje de señas junto con un video
normal y los mantiene sincronizados.
Como puede ver, muchos de losaudioyvideoLos atributos de los elementos son los
mismos, lo que por supuesto hace que sea mucho más fácil especificarlos porque solo
necesita recordar un conjunto de atributos.
Un ejemplo de uso de lavideoEl elemento para mostrar un video en un documento web
completo con controles de navegador podría verse así:
Este ejemplo simple le informa al navegador que muestre un reproductor de video de un tamaño de 300
píxeles por 176 píxeles con controles de medios predeterminados que contienen elárbol-nevado.mp4
archivo de vídeo.
Al igual que con el audio, varios navegadores muestran los controles y el video de manera
Debido a los diferentes requisitos del navegador (más sobre esto en los Capítulos 3 y 4), a
menudo se requiere que especifique diferentes fuentes para el mismoaudioo videoelemento.
Como viste anteriormente, tanto elaudioyvideoelementos proporcionan unorigenatributo
en el que colocar una URL a la fuente de audio o video. Pero ese atributo solo permite una
fuente. Entonces, ¿cómo puedes agregar múltiples fuentes?
Aquí es donde elfuenteelemento entra. Cualquier número defuenteLos elementos pueden
estar contenidos dentro de unaudioo videodeclaración del elemento, y es a través de este
elemento que puede especificar múltiples fuentes de medios.
Elfuenteelemento puede contener los atributos enumerados enTabla 2.3.
Entonces elfuenteEl elemento le permite especificar diferentes fuentes para una oferta
multimedia en particular, un ejemplo de lo que sigue:
<controles de audio>
</audio>
En este ejemplo, se presentan dos formatos de archivo de audio diferentes al navegador para
que los reproduzca. El navegador reproducirá el primer formato que reconozca e ignorará cualquier
formato que no reconozca. Si no puede encontrar un formato que pueda reproducir, le informará al
usuario que el navegador no puede reproducir el audio mostrando el texto "Lo sentimos, su
navegador no es compatible con el elemento de audio".
Este proceso de un navegador que ignora lo que no puede entender resulta muy útil cuando se
ofrece una solución multimedia para compatibilidad entre navegadores. Como se mencionó
anteriormente, los diferentes navegadores admiten diferentes formatos de archivos multimedia,
sobre los cuales leerá con más detalle en los próximos dos capítulos.
ATRIBUTO DESCRIPCIÓN
En algunos casos, es posible que también deba especificarse el códec con el que está
codificada la fuente para garantizar que se pueda reproducir. Aprenderá más sobre
el tipo MIME y los códecs en los Capítulos 3 y 4.
medios de comunicación Especifica el tipo de medio previsto del recurso en cuestión, ya que podría dirigirse a
un determinado tipo de dispositivo con una determinada altura, anchura, resolución o
relación de aspecto.
Este valor debe ser una consulta de medios válida. Puede leer más
sobre este atributo en la especificación de consultas de medios en
http://dev.w3.org/csswg/css3-mediaqueries.
Al igual que los otros elementos descritos anteriormente, elpistaelemento puede tomar una serie
<video src=”sayHello.mp4”>
<track kind=”subtítulos” src=”hola-en.vtt” srclang=”en” pags
label=”Inglés”>
<tipo de pista=”subtítulos” src=”hola-de.vtt” srclang=”de” pags
label=”Alemán”>
</vídeo>
Este ejemplo especifica dos archivos diferentes para eldi hola.mp4video para
dos idiomas diferentes, inglés y alemán.
ATRIBUTO DESCRIPCIÓN
capítulos Especifica los títulos de los capítulos y se utiliza para navegar por el
origen Proporciona la dirección de los datos de la pista de texto, que debe ser una URL válida.
El archivo proporcionado en esta fuente debe estar en un formato específico para que
se entienda, dos de los cuales son WebSRT y WebVTT. Ambos formatos se analizan en
el Capítulo 8.
etiqueta Especifica un título legible por el usuario para la pista, lo que proporciona un
título más comprensible para que el usuario lo lea. Debe ser único en todopista
elementos del mismoamableatributo para el mismo recurso.
Pero.
TERMINANDO43
3
UTILIZANDO AUDIO
Agregar audio nativo a su documento
web usando multimedia HTML5
podría ser más fácil. Si querías sh
fragmentos de sonido, grabaciones de voz o su propia música con usuarios en
terceros.
que están disponibles para usar y cómo puede convertir el audio existente de
45
CÓDECS DE AUDIOY
FORMATOS DE ARCHIVO
La plétora de diferentes complementos y formatos que están disponibles para codificar archivos
multimedia para su presentación en la web podría causar un poco de dolor de cabeza si el
El objetivo del códec suele ser mantener la alta calidad de la señal de audio
utilizando el menor número de bits posible para reducir el tamaño del archivo en
cuestión y, por tanto, el ancho de banda necesario para la transferencia.
Se pueden usar diferentes códecs de audio para generar diferentes formatos de archivos de audio,
OGG VORBIS
Ogg Vorbis es un formato de archivo gratuito, sin patente y de código abierto creado por Xiph.
Fundación Org (www.xiph.org). Debido a que es gratuito, tiende a ser bastante atractivo como
formato de uso.
Ogg es el nombre del formato contenedor y Vorbis es la compresión de audio específica que
utiliza. Según el sitio web de Vorbis (www.vorbis.com), los archivos de Vorbis pueden comprimirse a
un tamaño de archivo pequeño y aun así mantener una buena calidad de sonido. Esto, por supuesto,
es ideal para la entrega a través de la web porque reduce los costos de ancho de banda.
El formato Ogg Vorbis ha demostrado ser bastante popular entre la comunidad de juegos
con compañías como Epic Games, Crystal Dynamics y EA Games que lo utilizan para ofrecer
música de juegos.
Ogg Vorbis utiliza el aplicación/ogg tipo MIME yaudio/ogg códec
inicialmente para describir el contenido del correo electrónico. Ahora se ha extendido mucho más
allá de eso. Los tipos MIME se utilizan para identificar el tipo de información que contiene un
archivo en particular.
tipo/subtipo
Para obtener una lista de tipos MIME comunes y sus extensiones de archivo correspondientes,
consulte http://hul.harvard.edu/ois/systems/wax/wax-public-help/mimetypes.htm.
MP3
MP3 tiene un nombre bastante engañoso porque también se conoce como MPEG-1 o MPEG-2
Audio Layer III. Desarrollado por Moving Picture Expert Group (www.mpeg.org), MP3 se
diferencia de Ogg Vorbis en que está protegido por una patente propiedad de Fraunhofer
(www.fraunhofer.de/en), que recibe un porcentaje de cada venta.
El estándar MP3 en realidad no incluye una especificación exacta sobre cómo codificar
MP3, pero sí especifica cómo decodificar el formato. Esto, por supuesto, ha resultado en
muchos codificadores de MP3 diferentes, cada uno de los cuales produce archivos de audio
de diferente calidad de sonido.
A pesar de la patente, MP3 ha demostrado ser uno de los formatos de audio más populares para
llama WAV debido a su extensión de archivo. WAV es un formato de audio que fue creado por primera vez por
Aunque puede contener datos comprimidos, por lo general no los contiene, lo que, por
supuesto, puede generar archivos de tamaño bastante grande. Es por esta razón que ha disminuido
CAA
La codificación de audio avanzada (AAC) es un formato de audio utilizado por Apple y se ha
hecho popular como el formato predeterminado para la tienda iTunes de Apple. Fue diseñado
para ser el sucesor del formato MP3 y por eso suele tener una mejor calidad de sonido que el
MP3.
CAA utiliza elaudio/actipo MIME yaudio/accódec
MP4
Aunque se usa principalmente como formato de archivo de video (más sobre eso en el Capítulo 4), MP4
también se puede usar para codificar audio solamente. Al igual que AAC, se ha popularizado gracias a Apple,
que también lo utiliza para codificar algunos archivos de audio con la extensión .m4a extensión.
FORMATO NAVEGADOR
Una vez que tenga su archivo de audio, ya sea que lo haya grabado usted mismo o lo haya obtenido de otro
lugar, generalmente estará en un solo formato. Lo más probable es que esté en uno de los formatos
Por supuesto, podría decidir admitir solo un tipo de audio. Puede saber, por
ejemplo, que todos sus usuarios usarán Firefox y, por lo tanto, solo tiene que
admitir Ogg Vorbis.
Por el bien del argumento, digamos que desea admitir todos los navegadores principales,
por lo que necesita convertir su archivo de audio a los otros formatos. ¿Cómo haces esto?
Bueno, muchos codificadores harán el trabajo por ti, y la mayoría de ellos son gratuitos.
Estos son dos de mis codificadores favoritos para convertir varios formatos de audio de uno a
otro:
Por supuesto, hay muchos otros codificadores disponibles, pero prefiero estos dos porque uno
es una aplicación de escritorio y el otro está en línea. Esto se adapta a todas las ocasiones porque la
aplicación de escritorio es útil cuando no estoy conectado y, por supuesto, el convertidor web es útil
cuando quiero una conversión rápida de archivos y estoy en línea.
Sin embargo, debe enfrentar un problema particular si desea admitir navegadores que no
tienen capacidades de reproducción multimedia HTML5.
Los ojos de águila entre ustedes habrán notado que en ningún momento he abierto Internet
Explorer 6 a 8. Como se mencionó en el Capítulo 2, estos navegadores no son compatibles con
HTML5 y necesitan ayuda de JavaScript para que puedan representar los elementos. . Y
empeora un poco con respecto a la multimedia, porque, naturalmente, no hay soporte nativo
para ninguno de los formatos de archivo de audio antes mencionados.
Entonces, ¿cuál es la solución? Utiliza un método que las versiones de Internet Explorer hacer
entender, lo que significa Flash, QuickTime o algún otro complemento de terceros. O simplemente
proporciona un enlace al archivo de audio en cuestión para que cualquier usuario desafortunado
pueda descargar el archivo y reproducirlo al estilo antiguo a través de un reproductor de audio en sus
Un ejemplo completo de cómo usar elaudioyfuenteelementos para hacer esto, junto con
cómo proporcionar respaldo de Flash se proporciona en la siguiente sección, así como otros
ejemplos sobre cómo usar elaudioelemento.
Ya ha leído lo suficiente sobre el audio HTML5 y está ansioso por ver algunos ejemplos
adecuados de cómo usarlo en un documento web. Bueno, aquí vas a hacer precisamente eso.
Todos los elementos y atributos que se utilizan en el código de esta sección se
presentaron en el Capítulo 2.
Si simplemente desea reproducir un archivo de audio, solo necesita usar una instancia del
audioelemento. Por ejemplo, para permitir que el usuario reproduzca un archivo de audio Ogg Vorbis,
Elcontrol SEl atributo le dice al navegador que muestre sus controles predeterminados a los usuarios
Sin embargo, si fuera malvado y quisiera reproducir el archivo antes de que sus usuarios
tuvieran la oportunidad de hacer algo al respecto, agregaría elauto-reproducciónatributo:
Si fueras aún más malvado, podrías reproducir el archivo de audio a los usuarios
automáticamente y en bucle, así:
También puede silenciar el archivo cuando se carga por primera vez usando el apagado atributo. Esto
especifica el estado predeterminado del audio, lo que es posible que desee hacer para anular potencialmente
Y, por supuesto, puede solicitar que el navegador cargue solo los metadatos. Esto puede
ser adecuado cuando el archivo de audio es bastante largo o si sabe que el usuario puede
optar por no escuchar el archivo de audio:
Cualquier uso de laprecargaEl atributo es simplemente una sugerencia para el navegador y en realidad
puede ser anulado por el propio navegador, tal vez en función de la configuración del usuario.
Todos los ejemplos anteriores utilizan una sola fuente de audio. Entonces, ¿qué sucede si
necesita servir múltiples fuentes para diferentes navegadores?
Supongamos que desea proporcionar audio en formato Ogg Vorbis y MP3 para
admitir Firefox, Chrome, Opera, Safari e IE9. Puedes hacer esto usando elfuente
elemento junto con elaudioelemento. El código se vería así:
<controles de audio>
<controles de audio>
También puede incorporar cualquiera de los atributos mencionados anteriormente aquí. Entonces, hacer
que cualquier fuente que elija el navegador se reproduzca automáticamente simplemente requeriría este
código:
complemento Flash? Sí, me temo que sí, a menos que esté satisfecho con simplemente proporcionar un
De la misma manera que los navegadores compatibles con HTML5 se abren camino a través de las
fuentes que les presenta su documento para encontrar un formato de audio que puedan reproducir, los
navegadores heredados ignorarán todos estos formatos de audio hasta que encuentren un archivo que
<controles de audio>
value=”player.swf?audioUrl=sayHello.mp3&autoPlay=true”>
</objeto>
</audio>
<controles de audio>
src=”player.swf?audioUrl=sayHello.mp3&autoPlay=true”
altura=”27”
ancho=”320”>
</audio>
<controles de audio>
src=”http://www.google.com/reader/ui/3523697345-audio-
pagsplayer.swf?audioUrl=sayHello.mp3&autoPlay=true”
altura=”27”
ancho=”320”>
</audio>
Todos los ejemplos anteriores funcionarán en navegadores compatibles con audio HTML5, como
<controles de audio>
value=”player.swf?audioUrl=sayHello.mp3&autoPlay=true”>
</objeto>
<a href=”sayHello.mp3”>Descargar el archivo de audio</a>
</audio>
FIGURA 3.3Internet
Explorer 8 que muestra el
reproductor Flash y el enlace
de descarga del archivo de
audio.
FIGURA 3.4Firefox
muestra un cuadro feo si no
puede reproducir ninguno de los
archivos de audio HTML5
proporcionados.
<controles de audio>
</audio>
reproducción de audio HTML5. Si el navegador es compatible con HTML5 pero no puede reproducir
ninguna de las fuentes provistas, no volverá a reproducir ningún contenido Flash que usted también
haya proporcionado ni mostrará el enlace de descarga si hay uno presente. En su lugar, se puede
mostrar un reproductor roto o, como en el caso de Firefox, una caja negra bastante fea (Figura 3.4).
Independientemente de lo que decida hacer, hay suficientes mecanismos alternativos disponibles para ayudarlo a
En este momento, los principales navegadores web admiten diferentes formatos de archivos de
audio, lo que requiere que su contenido de audio se proporcione en varios formatos para que estos
pueden admitirse a través de complementos de terceros (como Flash) como lo eran antes.
existir. Pero aún puede garantizar que sus usuarios accedan a su audio.
Los ejemplos de este capítulo cubren una amplia gama de escenarios de la vida real que
puede encontrar al agregar audio a sus documentos web. Sin embargo, no son en modo
alguno exhaustivos. Y aunque todo el código utilizado en los ejemplos está disponible en el
sitio web, se agregarán ejemplos adicionales en el futuro, por lo que definitivamente vale la
pena revisarlos.
El audio nativo es un gran paso adelante en la tecnología web y al menos es igualado, y
tal vez incluso superado, por el video, que es el tema central del próximo capítulo.
TERMINANDO59
4
UTILIZANDOVIDEO
La popularidad de los sitios para compartir videos, como
documentos web. Sin embargo, hasta hace poco, la única forma era usar
método estándar que falta para incrustar videos en documentos web. Los
lo que puede estar seguro de que los navegadores modernos pueden manejar su
contenido de video.
Este capítulo cubre los formatos de archivo y los códecs compatibles con
61
CÓDECS DE VÍDEO Y
FORMATOS DE ARCHIVO
Al igual que con el audio, el video HTML5 tiene varios formatos diferentes que puede usar para
codificar contenido de video debido a que los proveedores de navegadores no pueden ponerse de
acuerdo sobre un estándar. Los formatos de archivo de video disponibles incluyen Theora Ogg, MP4
(H.264) y WebM. Veamos cada uno en detalle.
CÓDECSYCONTENEDORES
de compresión para codificar y/o decodificar un flujo digital de datos, haciéndolo más adecuado
para la reproducción.
TEORA OGG
Al igual que con el audio, Ogg es el nombre del formato contenedor y, en este caso, Theora se
refiere al formato de compresión de video que utiliza. Las versiones anteriores del códec Theora
demostraron que era inferior a otros códecs similares en ese momento, pero ha mejorado mucho y
ahora se considera comparable a la salida H.264 de YouTube (antes de que YouTube comenzara a
MPEG-4 Parte 10, o MP4, es un formato de video comprimido que, al igual que el formato de audio MP3
(consulte el Capítulo 3), fue definido por el Grupo de expertos en imágenes en movimiento (MPEG;
www.mpeg.org). Fue desarrollado para ofrecer video y audio con calidad de DVD en un paquete pequeño. Este
tamaño de archivo pequeño hace que los archivos MP4 sean muy adecuados para reproductores portátiles y,
para usar con video HTML5, mientras que otros no. Los perfiles Baseline y Main se usan generalmente
para video HTML5. Para obtener una lista completa de estos perfiles, consulte en.wikipedia.org/wiki/
H.264#Profiles.
MP4 utiliza elvídeo/mpegtipo MIME y elvídeo/mp4tipo de atributo de vídeo.
WEBM
WebM es un proyecto (www.webmproject.org) respaldado por gigantes de la industria web,
como Mozilla, Opera, Adobe y Google. El objetivo del proyecto es producir un formato de video
abierto de alta calidad y libre de regalías.
El contenido de video está comprimido con el códec VP8, que fue desarrollado por
On2 Technologies (la compañía fue adquirida por Google en febrero de 2010). El códec
tiende a usarse dentro del contenedor WebM.
WebM utiliza elvideo/webmtipo MIME y elvideo/webm tipo de atributo de vídeo.
navegadores.
FORMATO NAVEGADOR
NOTA: Chrome actualmente es compatible con MP4/H.264, pero dejará de admitirlo pronto.
Internet Explorer 9 admitirá WebM siempre que esté instalado un complemento de terceros que
pueda reproducirlo.
De hecho, debe ofrecer al menos dos formatos diferentes, MP4 y WebM, para admitir las
últimas versiones de los principales navegadores. Esto no es una gran tarea si solo está
publicando algunos videos, porque se puede hacer fácilmente usando elvideo y fuente
elementos mencionados en el Capítulo 2. Para los sitios con gran cantidad de videos,
desafortunadamente puede ser una carga porque muchos archivos deben existir en al menos
dos formatos diferentes, duplicando así el espacio de almacenamiento requerido.
Otra buena razón para usar video HTML5 es la decisión de Apple de no admitir Flash
en el iPhone y el iPad. iOS, el sistema operativo que se ejecuta en estos teléfonos,
tiene soporte para video MP4.
Los teléfonos Android también son compatibles con MP4 (y WebM desde la versión 2.3),
Windows Phone 7 tiene soporte nativo tanto para MP4 como para WebM, y Blackberry es
PROPINA:Es aconsejable admitir al menos MP4 y WebM para cubrir las últimas versiones
de los principales navegadores. Safari admite MP4; Firefox y Opera son compatibles con
WebM; y Chrome e Internet Explorer 9 actualmente son compatibles con MP4 y WebM,
aunque Chrome dejará de ser compatible con MP4 en un futuro cercano e IE9 necesita un
complemento para WebM. Sin embargo, también puede optar por admitir Theora Ogg,
porque WebM no fue compatible con Firefox hasta la versión 4, y Firefox no admite MP4
en absoluto.
Aunque puede elegir entre muchos otros codificadores, estos son tres codificadores
sólidos que puede usar para comenzar.
A veces, la forma en que se codifica un archivo MP4 puede causar problemas con su
reproducción. Es decir, el archivo no comienza a reproducirse hasta que se haya descargado por
completo. Esto se debe a que el proceso de codificación coloca el índice del archivo (con todos los
metadatos sobre la longitud del archivo, etc.) al final del archivo en lugar de al principio.
Si encuentra que esto le sucede a sus archivos MP4, puede solucionar el problema
ejecutando los archivos a través de QTIndexSwapper (http://renaun.com/blog/
code/qtindexswapper) de Renaun Erickson de Adobe. QTIndexSwapper
simplemente mueve el índice al principio del archivo.
Ahora que ha convertido sus archivos, ¡está listo para comenzar a usarlos en
sus documentos!
El ejemplo más fácil de todos es reproducir un archivo de video simple de un formato con controles de
ElcontrolEl atributo informa al navegador que debe mostrar un conjunto de controles de video básicos
Si desea que el video comience a reproducirse tan pronto como se cargue la página, simplemente puede
agregar elauto-reproducciónatributo:
También es posible que desee que el video comience a reproducirse de inmediato y luego continúe
Sin embargo, se recomienda encarecidamente no hacer esto: no solo es molesto, sino que puede ser
una pesadilla de accesibilidad porque un archivo de video en bucle puede reproducirse sobre el audio
Cualquier ajuste de laprecargaEl atributo simplemente sugiere al navegador cuáles son sus
intenciones, pero en última instancia, el navegador decidirá qué hacer. El navegador puede, por
También puede eliminar los controles por completo omitiendo elcontrol Satributo:
<video src=”árbol-nevado.webm”></video>
Tenga en cuenta que el usuario puede restaurar los controles predeterminados en la mayoría de los
navegadores haciendo clic derecho en el video y seleccionando los controles del menú desplegable que se
muestra.Figura 4.1.
Todos los ejemplos anteriores usan solo un formato de archivo de video. Pero debido a que necesitará
servir más de un formato de archivo de video para cubrir todos los principales navegadores, echemos un
Presentar diferentes formatos de archivos de video al navegador es bastante fácil usando elfuente
<controles de vídeo>
</vídeo>
Pero también apoyemos a Theora Ogg, en caso de que un usuario de Firefox 3.5 u Opera
10.5 quiera ver su video:
<controles de vídeo>
</vídeo>
Cuando usas el fuente elemento dentro del video elemento, notará que el escribeatributo se mueve desde el video
elemento a la fuente elemento. La razón es que la idea de servir diferentes fuentes se debe a que usan diferentes
formatos, y cada elemento fuente debe especificar el formato en el que se encuentra la fuente a través de su propia
escribeatributo.
ElescribeEl atributo también puede contener el códec real en el que está codificado el archivo de video. Por ejemplo:
Incluir el códec en elescribeEl atributo puede ser beneficioso porque ayuda al navegador a decidir si puede reproducir el
archivo o no. Lo mejor es incluir el códec solo si sabe con certeza qué códec se usó para codificar el contenido de su
video.
Si decide incluir el códec, asegúresemuy cuidadosoy asegúrese de formatear la cadena correctamente, prestando
especial atención a las comillas utilizadas; de lo contrario, el navegador no reconocerá la fuente.
En el ejemplo anterior, observe cómo la cadena completa está encerrada entre comillas simples, elescribey códecs Los atributos
están separados por un punto y coma, y elcódecslos valores están contenidos entre comillas dobles.
</vídeo>
Por supuesto, también puede reproducir automáticamente y eliminar los controles de esta manera:
</vídeo>
</vídeo>
Puedes hacerte una idea de cómopósterel atributo funciona enFigura 4.2. Ahora que sabe cómo
reproducir archivos de video, es posible que desee pensar en el respaldo del navegador
A lo largo de este capítulo, he recomendado proporcionar una alternativa para los navegadores
heredados, como Internet Explorer 6 a 8, que no son compatibles con HTML5 y multimedia nativa.
Por supuesto, esto significa volver a un antiguo complemento de terceros que estos navegadores
Debido a que los navegadores ignoran lo que no entienden, los navegadores heredados
ignorarán lavideo y fuente elementos y actuar como si no existieran. Por supuesto, esto le
permite proporcionar un enlace simple al archivo de video para que pueda descargarse:
Es posible que prefiera proporcionar un enlace de imagen en lugar de un enlace de texto simple:
<figura>
<a href=”árbol-nevado.mp4”>
es necesario crear otro archivo en un formato diferente. El siguiente código muestra cómo se puede
<tipo de objeto=”aplicación/x-shockwave-flash”
data=”player.swf?videoUrl=árbol-nevado.mp4&autoPlay=true”
value=”player.swf?videoUrl=árbol nevado.mp4&autoPlay=true”>
</objeto>
</vídeo>
Un navegador que no sea HTML5 ignorará los dosfuente elementos porque no sabe
qué hacer con ellos. Entonces reconocerá laobjetoy siempre que Flash esté instalado,
reproducirá el video a través del reproductor Flash.
otro recurso alternativo en caso de que lo necesite. Como se puede ver en el anterior
<tipo de objeto=”aplicación/x-shockwave-flash”
data=”player.swf?videoUrl=árbol-nevado.mp4&autoPlay=true”
value=”player.swf?videoUrl=árbol nevado.mp4&autoPlay=true”>
</objeto>
<a href=”snowy-tree.mp4”>Descargar el video: snowy-tree.mp4</a>
</vídeo>
VIDEOPOR¡TODOS!
Por supuesto, en estos días no solo debe preocuparse por la compatibilidad con los navegadores de
escritorio modernos y heredados. También debe hacer que su contenido esté disponible para los usuarios de
dispositivos móviles, tabletas y otros dispositivos de navegación alternativos con capacidades de reproducción
de video. Para optimizar su contenido web para tales dispositivos, también necesita aprender acerca detipos
Supongamos que desea mostrar un archivo de video diferente según las capacidades y el tamaño del
navegador. Por ejemplo, es posible que desee reproducir un video más pequeño, tanto en
dimensiones como en tamaño de archivo, en un teléfono móvil que tenga una pantalla pequeña y
posiblemente esté recuperando datos a través de una conexión 3G. ¿Es esto posible? Lo es si usas una
fuente elemento.
Los tipos de medios se introdujeron en CSS2 (www.w3.org/TR/CSS2/media.html) para
permitirle orientar diferentes dispositivos con estilos específicos y/u hojas de estilo. Tabla 4.2(
en la página siguiente) enumera los tipos de medios.
ESCRIBE DEFINICIÓN
impresión Apunta a material paginado y material para mostrar en el modo de vista previa de impresión.
tty Dirigido a dispositivos con una cuadrícula de caracteres de paso fijo, como una terminal.
Es posible que haya encontrado algunos de los tipos de medios enumerados en la Tabla 4.2
antes, aunque la mayoría de ellos probablemente le resulten extraños. Si alguna vez ha creado una
hoja de estilo para imprimir contenido, estará familiarizado con elimpresióntipo de medio; si alguna
pero es elManotipo que ha causado problemas particulares a medida que avanza la tecnología.
Inicialmente, los teléfonos no tenían navegadores que fueran capaces de representar sitios HTML, por lo que
los desarrolladores los ignoraron en gran medida. Cuando los teléfonos se volvieron "más inteligentes" y
llegaron con navegadores mejorados, laManoel tipo de medio no se usaba en los sitios web. Luego, los
proveedores eligieron ignorarlo y usar por defecto elpantallatipo de medio en su lugar. Pero se necesitaba
algo para ayudar a combatir esto porque las configuraciones del sitio web que estaban destinadas a los
navegadores de pantalla completa ahora se procesaban en los teléfonos, lo que generaba una molesta barra
Las consultas de medios fueron creadas por el W3C y tienen una especificación
completa propia (consulte www.w3.org/TR/css3-mediaqueries). Son una extensión de
los tipos de medios CSS3 que le permiten verificar las condiciones de funciones de
medios particulares, comoancho, alto,y orientación, para entregar contenido o estilo
diferente. Puede comprobar una serie de funciones del dispositivo, cuya lista aparece en
Cuadro 4.3.
relación de aspecto del dispositivo sí Ratio de ancho del dispositivo al altura del dispositivo.
Lo bueno es que puede combinar tipos de medios y consultas de medios para dirigirse a ciertos
También puede apuntar a todos los dispositivos que no coincidan con una configuración particular mediante el uso de la
Elsolo La palabra clave también se puede usar para ocultar la configuración de los navegadores más antiguos:
El siguiente ejemplo de código sirve un video diferente para todos los tipos de medios que
tienen un ancho máximo de 600 píxeles. Se proporcionan los formatos WebM y MP4. Todo lo
que no coincida con estas características pasará a las siguientes definiciones de origen:
<controles de vídeo>
</vídeo>
<controles de vídeo>
</vídeo>
Quizás se pregunte cómo demonios probaría los servidor) y cambiar la vista a la de un puñado de
tipos de medios y las consultas si no tiene teléfonos (como Blackberry y iPhone) y monitores de
dispositivos específicos disponibles. varios tamaños, entre otros dispositivos.
Con los ejemplos que proporcioné, el simple hecho de cambiar el Puede ver cómo funciona el código en la sección "Dispositivos
tamaño de la ventana del navegador y luego actualizar la página de destino con diferentes archivos de video usando tipos de
generalmente dará como resultado el resultado deseado. medios y consultas" en ProtoFluid en Figura 4.4 y Figura 4.5.
También puede usar la aplicación ProtoFluid (http:// Por supuesto, nada supera a probar su código en la
app.protofluid.com), que le permite cargar un sitio realidad, pero esa no siempre es una opción viable
web (incluso aquellos que se ejecutan en su dada la gran cantidad de dispositivos en el mercado.
NOTA: Firefox ignora por completo las consultas de medios, por lo que cambiar el tamaño de la ventana del
navegador no tendrá ningún efecto. Sugiero usar Opera, que hace exactamente lo que se supone que debe hacer.
FIGURA 4.4 Al seleccionar el tamaño del iPhone en ProtoFluid, se muestra el archivo de FIGURA 4.5 Al seleccionar el tamaño de escritorio
video más pequeño. de 800 × 600 en ProtoFluid, se muestra el archivo
de video mediano.
Estos son solo algunos ejemplos simples de lo que podría querer lograr al apuntar a diferentes
dispositivos. Al combinar tipos de medios y consultas, puede dirigirse a cualquier dispositivo para
cumplir con sus requisitos específicos. Desafortunadamente, ninguno de los ejemplos anteriores
ANDROID Y VÍDEO
propios controles a través de la API de JavaScript (que es el tema del Capítulo 5), o para lograr la
Android tampoco mostrará el primer cuadro del video como una imagen; en su lugar,
muestra un icono de video. Sin embargo, reconoce y comprende lapósteratributo, por lo que si
especifica una imagen con ese atributo, mostrará esa imagen correctamente.
A continuación se muestra el código para especificar un video para Android, junto con el JavaScript
requerido para reproducir el video en Android cuando el usuario presiona el ícono de video. Aplazaré la
<html>
<cabeza>
<script>
función reproducir () {
},falso);
}
</script>
</cabeza>
<controles de vídeo>
</vídeo>
</cuerpo>
</html>
Ahora debe ser consciente de lo fácil que es agregar video a su sitio web usando
multimedia nativa HTML5. Probablemente también sepa que todavía hay una serie de
detalles que debe considerar antes de hacerlo. Por ejemplo:
Estas son solo algunas de las preguntas que quizás deba hacerse antes de seguir
adelante. Sin embargo, una vez que haya tomado esas decisiones, aprovechar el poder de
la multimedia HTML5 para entregar video a sus usuarios es relativamente simple. Con el
método estandarizado de entrega que trae la parte multimedia de la especificación HTML5,
usted sabe a qué espectadores llegará y qué tipo de experiencia tendrán.
Hasta ahora, ha dejado que el navegador proporcione los controles de video (y
audio). Y estos controles varían de un navegador a otro.
En el próximo capítulo, aprenderá a utilizar las API de JavaScript multimedia de HTML5
incluidas como parte de la especificación de HTML5 para crear sus propios controles
personalizados para audio y video. ¡Vamos!
Media JavaScript API completamente fácil de usar que puede usar para ampliar
Todos han visto los controles predeterminados que los navegadores agregan a
¡Tomemos el control!
85
QUÉ ES ¿JAVASCRIPT?
JavaScript es un lenguaje de secuencias de comandos del lado del cliente de uso común que puede
usar para proporcionar funcionalidad adicional a un sitio web. Debido a que el código es del lado del
cliente, es parte de la página HTML y depende del navegador hacer algo con él. Por lo tanto, tener
Media API como parte de la especificación HTML5 garantiza una implementación estándar de la API
La API de medios que se analiza aquí es una API de JavaScript y se supone que
tiene conocimientos de este idioma. Si no lo hace, le recomiendo el tutorial de
JavaScript en www.quirksmode.org/js/intro.html. Le brindará una buena
introducción al lenguaje JavaScript, que lo ayudará a comprender el contenido de
este capítulo.
Cuando haya terminado el tutorial, o si ya está familiarizado con JavaScript, ¡siga
leyendo!
Es importante que conozcas los atributos que puede tener cada elemento multimedia
como parte de la API de JavaScript. Cada atributo junto con su descripción se enumeran
enCuadro 5.1.
Algunos atributos son específicos solo para video; estos se enumeran enCuadro 5.2. Para aquellos
atributos que generan un evento cuando se cambia su valor, se proporciona el nombre del evento para
facilitar la referencia. Consulte la sección "Aprovechamiento de los eventos de API" más adelante en este
ATRIBUTO DESCRIPCIÓN
duración Contiene la duración del audio o video. Este es un atributo de solo lectura y es posible que solo esté
disponible si el video se ha cargado previamente.
Cuando este valor esté disponible para lectura, elduracióncambiarse levanta el evento.
en pausa Es un atributo booleano que indica si el recurso de audio o video está actualmente en pausa o
no.
tasa de reproducción Indica la velocidad requerida a la que se reproducirá el recurso de audio o video. Los valores válidos
oscilan entre −1,0 y 1,0.
Un valor negativo reproduce el recurso hacia atrás más rápido; un valor positivo lo reproduce más rápido.
terminado Es un atributo booleano que indica si el recurso de audio o video ha terminado de reproducirse (¡y la dirección de reproducción
es hacia adelante! Vertasa de reproducción predeterminadamás adelante en esta tabla ytasa de reproducción más temprano).
auto-reproducción Es un atributo booleano que indica si el audio o el video se reproducirán automáticamente o no.
ATRIBUTO DESCRIPCIÓN
círculo Es un atributo booleano que indica si el recurso de audio o video está configurado para reproducirse en bucle o no.
control S Es un atributo booleano que indica si el navegador debe mostrar o no su conjunto de controles
predeterminado en el audio o el video.
apagado Es un atributo booleano que indica si el audio o el video están silenciados o no.
origen Contiene la URL de la fuente de medios tal como se establece en el atributo del audioovideo elemento.
fuente actual Inicialmente vacío, contiene la URL de la fuente de medios que realmente está seleccionada para reproducir por el audioovideo
hora de inicio Contiene el valor de la hora de inicio de la audioovideo elemento. Por lo general, es 0, pero ocasionalmente puede
ser un valor positivo por varias razones, como ser parte de una transmisión en vivo o si es un fragmento de un
recurso de audio o video más grande.
origencruz Contiene la configuración para elaudioovideo elementosorigencruzatributo. Esto tiene como objetivo permitir o prohibir
medios de origen cruzado de la fuente de audio utilizando la especificación CORS (intercambio de recursos de origen cruzado)
Puede tener una de cuatro configuraciones (el valor numérico se proporciona entre paréntesis después del nombre de la
configuración):
actualmente.
RED_SIN_FUENTE (3) El elemento está buscando actualmente un recurso para jugar, pero aún no lo
ha encontrado.
ATRIBUTO DESCRIPCIÓN
precarga Contiene el valor del elementoprecargaatributo, que se utiliza para proporcionar una pista al navegador sobre
cómo se debe precargar la fuente de medios (consulte el Capítulo 2 para obtener más detalles).
amortiguado Contiene el intervalo de tiempo de laaudioovideo elemento que el navegador ha almacenado actualmente en el búfer (si lo
hay).
listoestado Contiene el estado listo actual delaudioovideo elemento y puede contener uno de los cinco valores
posibles (el valor numérico se proporciona entre paréntesis después del nombre del valor):
TENER_DATOS_ACTUALES (2) Se recuperaron suficientes datos para conocer la posición de inicio del
audio o video, pero no los suficientes para reproducirlo.
TENER_DATOS_FUTUROS (3) Se han recuperado suficientes datos para que se pueda reproducir el
recurso. Sin embargo, reproducir el recurso ahora puede significar que la
reproducción puede intentar superar la cantidad del recurso recuperado.
TENER_SUFICIENTE_DATOS (4) Se han recuperado suficientes datos para que el recurso se pueda
reproducir sin temor a que la reproducción llegue al final de los datos
disponibles antes de que se haya cargado el final del recurso.
Puede verificar este atributo periódicamente para ver cuándo comenzar/dejar de mostrar un ícono de espera, por
ejemplo.
buscando Es un atributo booleano que indica si el navegador está buscando actualmente una posición de reproducción
diferente dentro del recurso de audio o video. Por ejemplo, el usuario puede haber arrastrado los controles
predeterminados hacia adelante para reproducirlos en un punto posterior del recurso.
ATRIBUTO DESCRIPCIÓN
tiempo actual Contiene el tiempo actual en segundos que ha alcanzado la posición de reproducción dentro del
recurso de audio o video.
Cuando este valor es igual al final del recurso multimedia, elterminadose levanta el evento.
tiempo inicial Contiene la posición de reproducción inicial del recurso de audio o video.
startOffsetTime Contiene unaFechaobjeto que representa el desplazamiento de la línea de tiempo actual (la fecha y hora
explícitas correspondientes a la hora cero en el recurso) dentro del recurso.
tasa de reproducción predeterminada Indica la velocidad requerida a la que se debe reproducir el recurso de audio o video cuando se inicia. Los
valores válidos oscilan entre -1,0 y 1,0.
Un valor negativo reproduce el recurso hacia atrás más rápido; un valor positivo lo reproduce más rápido.
jugó Devuelve unRangos de tiempoobjeto que indica los intervalos de tiempo, si los hay, que el navegador ha reproducido hasta ahora
del recurso.
buscable Devuelve unRangos de tiempoobjeto que indica los rangos de tiempo, si los hay, del recurso de medios que el
navegador puede "buscar" (es decir, mirar hacia adelante), que depende de la cantidad del recurso que se carga
realmente.
grupo de medios Contiene el recursogrupo de mediosvalor de atributo, que permite vincular varios elementos multimedia a través de un
nombre/grupo común (consulte el Capítulo 2 para obtener más detalles), si está configurado.
controlador Contiene el controlador de medios actual del recurso, si está establecido; de lo contrarionulo.
por defecto silenciado Es un valor booleano que refleja el valor del recursoapagadoatributo (ver Capítulo 2).
pistas de audio Contiene la lista de pistas de audio en vivo que está disponible en el recurso del elemento multimedia, si lo hay.
videopistas Contiene la lista de pistas de video en vivo que está disponible en el recurso del elemento multimedia, si lo hay.
pistas de texto Es un atributo de solo lectura que contiene una lista de las pistas de texto disponibles en el recurso del elemento
multimedia, si lo hay.
Así, si un determinadoIntervalo de tiempola longitud del objeto es 1, puede acceder a las marcas
de tiempo de inicio y finalización de ese objeto en particular a través deinicio(0)y fin (0),
respectivamente.
ATRIBUTO DESCRIPCIÓN
ancho de video Es un atributo de solo lectura que contiene el ancho real del archivo multimedia
de video en píxeles, o 0 si no se conoce, en el momento en que se carga el video.
videoAltura Es un atributo de solo lectura que contiene la altura real del archivo
multimedia de video en píxeles, o 0 si no se conoce, en el momento en que se
carga el video.
¡Uf, esa es una gran lista de atributos! Pero no te preocupes; muchos de ellos quizás
nunca los uses. He hecho un intento de ponerlos en orden de aquellos que podrían
interesarle más.
<script>
var video = document.getElementsByTagName(“video”)[0];
alerta (video. hora actual);
</script>
<script>
var video = document.getElementsByTagName(“video”)[0];
if (video.bucle) video.bucle = falso;
</script>
Como puede ver, puede lograr esto comprobando si elcírculoEl atributo es verdadero y, de ser así,
Debido a que JavaScript agrega interactividad a los documentos web, cuando un usuario realiza una
acción, debe haber una forma de detectar que se produjo la acción. Este es el papel de los
acontecimientos.
Se pueden generar una serie de eventos en Media JavaScript API en función de los
cambios de valor, las llamadas a métodos y las acciones del navegador. Escuchar ciertos
eventos y responder a ellos puede ser clave al implementar su propio conjunto de control
para recursos de audio y video.
Se proporciona una lista completa de los eventos que se pueden generar enCuadro 5.3.
introducción sólida.
EVENTO DESCRIPCIÓN
inicio de carga Se genera cuando el navegador comienza a buscar datos multimedia para cargar.
suspender Se genera cuando el navegador estaba obteniendo datos de medios, pero se detuvo y aún no ha obtenido todo el
recurso de medios.
abortar Se genera cuando el navegador deja de obtener datos multimedia, pero no debido a un error.
error Se genera cuando se produjo un error mientras el navegador recuperaba los datos multimedia.
vaciado Se genera cuando se perdió la conexión de red mientras el navegador estaba obteniendo datos multimedia o el
carga() El método fue llamado cuando uno de esos métodos ya estaba en progreso.
estancado Se genera cuando el navegador intenta obtener datos multimedia, pero por alguna razón los
datos no se transfieren.
metadatos cargados Se genera cuando el navegador ha adquirido la duración y las dimensiones del recurso
multimedia.
datos cargados Se genera cuando el navegador conoce la posición de inicio del recurso multimedia.
Poder jugar Aparece cuando el navegador puede iniciar la reproducción por primera vez, pero no puede garantizar que si la
reproducción comienza ahora, no tendrá que hacer una pausa para obtener más datos multimedia.
EVENTO DESCRIPCIÓN
puede jugar Aparece cuando el navegador es capaz de reproducir el recurso multimedia de principio a fin sin tener que
hacer una pausa para obtener más datos multimedia.
jugando Se genera cuando la reproducción de un recurso multimedia está lista para comenzar después de haber sido pausada o retrasada
espera Aparece cuando el navegador ha detenido la reproducción debido a que no hay suficientes datos
multimedia disponibles. Sin embargo, espera que los datos requeridos estén disponibles en breve.
actualización de tiempo Se eleva cuando se ha cambiado la posición de reproducción actual del recurso de medios (por ejemplo, como parte de la
reproducción normal).
tocar Se genera cuando el recurso multimedia que se detuvo anteriormente ya no está en pausa y se ha reanudado la
reproducción normal.
cambio de tasa Se genera cuando el recurso multimediatasa de reproducción predeterminadaotasa de reproducciónse modifican
los atributos.
estados de recursos de medios, incluso si es solo para actualizar una visualización en pantalla.
Reutilicemos uno de los ejemplos breves anteriores. Si desea capturar y mostrar la hora actual
del video mientras se reproduce, naturalmente querrá actualizar la hora a medida que cambia. Para
<div id=”tiempo”>0</div>
<script>
var video = document.getElementsByTagName(“video”)[0];
video.addEventListener('cambio de hora', function() {
documento.getElementById(“tiempo”).innerHTML =
pagsvideo.tiempoActual;
}, falso);
</script>
Este código agrega un detector de eventos (más sobre esto más adelante) para elcambio de tiempo
evento. Cuando se eleva, actualiza la hora.divisióncon el tiempo de reproducción del video actual. Porque el
cambio de tiempoel evento se genera como el videotiempo actualse cambia el atributo, este código
Utilizará un video en los ejemplos a lo largo del resto del capítulo (a menos que se
indique lo contrario). Aunque casi todos los atributos, eventos y métodos se aplican
tanto al audio como al video, un ejemplo de video ayuda a visualizarlos mejor.
Mientras se reproduce el video, deberá moverse o dar la impresión de movimiento dentro
de una barra de progreso. Simplemente reaccionando a laactualización de tiempoevento puede
facilitar esa tarea, porque puede leer fácilmente eltiempo actualatributo y calcule el porcentaje
del video reproducido. Volverá a visitar las barras de progreso más adelante en el capítulo
cuando aprenda a crear una.
Pero antes de comenzar a mirar el código y cómo usa realmente la API,
necesita conocer los métodos.
Los métodos son pequeñas subrutinas que le dicen a un objeto, en este caso un objeto
de audio o video, qué hacer. No necesita conocer los entresijos de lo que hace
internamente un método en particular. Solo necesita saber que existe, se puede llamar,
qué hace y el resultado esperado.
La API Media JavaScript contiene un puñado de métodos que tienen nombres apropiados y
Seguro que no es una lista larga de métodos, pero es suficiente para poder crear su propio
conjunto simple de controles de medios y usarlo para manipular sus medios de audio y video.
Si desea reproducir el video cuando se hace clic en un botón determinado (lo que, por
supuesto, hará cuando implemente sus propios controles de medios), podría hacer lo
siguiente:
<script>
función reproducir vídeo () {
}
</script>
Este código define un botón HTML simple y especifica que elreproduce el video()
La función de JavaScript debe llamarse cuando se hace clic en el botón. Elreproduce el video()
función simplemente llama al vídeotocar()método, que inicia la reproducción del video!
A estas alturas, está absolutamente aburrido de ver listas de atributos, eventos y métodos.
Bueno, tan interesantes y útiles como pueden ser, yo también lo soy. Entonces, avancemos
para ver qué tan útiles pueden ser a medida que crea un reproductor de video HTML5 simple
con controles personalizados.
MÉTODO DESCRIPCIÓN
carga( ) Hace que toda la actividad en un recurso de medios se suspenda inmediatamente y el elemento en cuestión se
restablece a los valores predeterminados (para obtener una lista completa de los valores predeterminados que
se establecen, vaya a www.whatwg.org/specs/web-apps/current -work/multipage/the-video-
element.html#dom-media-load).
Esto hará que el elemento multimediaen pausaatributo se establezca en verdadero y, por lo tanto, genere un
pausaevento.
canPlayType(tipo) Toma una representación de cadena de un tipo MIME (por ejemplo,audio/ogg, vídeo/mp4)como parámetro y devuelve
un valor de cadena que indica la capacidad percibida del navegador para reproducir ese tipo de medio en particular.
Una cadena vacía El navegador no puede reproducir un recurso multimedia de este tipo.
"probablemente" El navegador está bastante seguro de que puede reproducir un recurso multimedia de este tipo.
addTextTrack(tipo, Devuelve y agrega una pista de texto, que también se agrega a la lista de pistas de texto del elemento multimedia.
[etiqueta], [idioma])
Elamable parámetro puede ser uno de:
subtitulos
subtítulos
descripciones
capítulos
metadatos
el opcional etiqueta y idioma los parámetros predeterminados son una cadena vacía si no se proporcionan.
Leerá más sobre las pistas de texto en el Capítulo 8.
<controles de vídeo>
</vídeo>
NOTAS:El código para este sencillo ejemplo de reproductor de video está disponible en
el sitio web en www.html5multimedia.com.
lograr a través de Media JavaScript API. Por lo tanto, creo que es más fácil verlo
aburrido.
Usando HTML simple, nuevamente nada con lo que no esté familiarizado, agregará los dos
botones en undivisiónbajo elvideo definición de elemento:
<div id=”controles”>
<button id=”playpause” title=”play”>reproducir</button>
</div>
Y ahí lo tienes; dos botones simples, pero actualmente inútiles, que puedes
diseñar como quieras. Por ahora, dejémoslos como están (Figura 5.1).
Usarás el mismo botón para reproducir y pausar el video porque solo tendrás uno y no el
otro. Consulte los controles de medios predeterminados del navegador. Cuando hace clic en
Reproducir, se convierte en un botón de Pausa. Imitarás ese comportamiento.
Tenga en cuenta que he añadido uncontrol Satribuir a lavideo elemento. ¿Por qué? Estoy jugando
a lo seguro. Debido a que agregará todos sus controles personalizados mediante la API de JavaScript,
si los usuarios tienen JavaScript desactivado, no tendrán ningún control. Así que dejarás el
control Satributo donde está y luego eliminarlo a través de JavaScript, lo que tampoco sucederá
si los usuarios tienen JavaScript desactivado. Por lo tanto, el atributo no es un problema.
<script>
var video = document.getElementsByTagName(“video”)[0];
video.controles = falso;
</script>
función detenerVideo() {
video.pausa();
video.tiempoActual = 0;
}
<button id=”detener” title=”detener” onclick=”stopVideo()”>detener</button>
función alternarReproducir() {
if (video.pausado || video.finalizado) {
if (video.finalizado) video.currentTime = 0;
ppbutton.título = “pausa”;
ppbutton.innerHTML = “pausa”;
video.reproducir();
}
demás {
ppbutton.título = “reproducir”;
ppbutton.innerHTML = “reproducir”;
video.pausa();
}
}
<button id=”playpause” title=”play” onclick=”togglePlay()”>reproducir
pags</botón>
Tal como está ahora, el reproductor de video cambia el botón Reproducir a Pausa cuando hace clic en él y
viceversa (Figura 5.3). Los botones Reproducir/Pausar y Detener ahora hacen exactamente lo que se supone
Has hecho un buen comienzo en la personalización de tus controles. Pero, ¿y si los usuarios
lograran reproducir o pausar el video sin usar los controles? ¿Cómo pueden hacer eso, te
preguntarás? Bueno, algunos navegadores (p. ej., Firefox) le permiten restablecer los controles
haciendo clic derecho en el video y seleccionando Mostrar controles. Si un usuario hace clic en su
botón Reproducir y luego usa estos controles predeterminados para pausar el video, sus controles se
ven dañados porque los valores que se muestran en los botones Reproducir/Pausar no están
sincronizados con el estado real del video. Aquí es donde entran los eventos.
ESCUCHANDO EVENTOS
Como se menciona en la Tabla 5.4, cuando elpausa()y tocar()se llaman métodos, generan dos
eventos,pausay tocar,respectivamente. Entonces, todo lo que su código debe hacer es
escucharlos y actuar en consecuencia.
Para escuchar un evento, utilice elagregarEventListener()(que vio brevemente
antes) para llamar al objeto de video. Así que para escuchar elpausay tocar
eventos, necesitas agregar esto:
video.addEventListener('reproducir', función() {
/*...hacer cosas...*/
}, falso);
video.addEventListener('pausar', function() {
/*...hacer cosas...*/
}, falso);
video.addEventListener('reproducir', función() {
ppbutton.título = “pausa”;
ppbutton.innerHTML = “pausa”;
}, falso);
video.addEventListener('pausar', function() {
ppbutton.título = “reproducir”;
ppbutton.innerHTML = “reproducir”;
}, falso);
Ahora, si usa los controles predeterminados del navegador para reproducir/pausar el video, sus
Debido a que ahora agregó la actualización de los valores de los botones a los detectores
de eventos, ya no necesita hacerlo en elalternarReproducir()función; ahora sucederá
automáticamente cuando se genere el evento. EntoncesalternarReproducir()ahora se ve así:
función alternarReproducir() {
if (video.pausado || video.finalizado) {
if (video.finalizado) video.currentTime = 0;
video.reproducir();
}
demás {
video.pausa();
}
}
También necesita agregar un detector de eventos para elterminadoevento para que pueda actualizar
correctamente los botones cuando la reproducción de video finaliza normalmente. Hazlo así:
Esta misma lógica se aplica a todos los controles predeterminados que verá en el
navegador, porque su código también deberá escucharlos todos y actuar en
consecuencia. Agregará detectores de eventos y actuará sobre ellos en el resto de los
ejemplos de este capítulo.
A continuación, debe controlar el volumen y silenciar.
Al igual que con los botones Reproducir/Pausar y Detener, el principio de agregar botones de Volumen y
Silencio es el mismo:
- Agregue eventos apropiados para capturar el comportamiento del control predeterminado (si es necesario)
Entonces, una vez más, agregará nuevos botones, nada especial por el momento,
solo tres botones simples, uno para aumentar y disminuir el volumen, y también para
silenciar/reactivar el sonido:
todos los navegadores actualmente admiten este elemento; Opera, Chrome y Safari
son los únicos que lo hacen. Por lo tanto, los botones se utilizan en el ejemplo.
función cambiarVolumen(dirección) {
var volumen = Matemáticas.piso(video.volumen * 10) / 10;
video.silenciado = falso;
si (dirección == “-”) {
if (volumen <= 0.1) video.volumen = 0;
más video.volumen -= 0.1;
}
demás {
tiene que hacer esto, pero si alguien está cambiando el volumen, esa persona probablemente
quiera activar el video automáticamente si está silenciado).
Luego revisas eldirecciónparámetro pasado por la llamada del botón a
cambiarVolumen()para ver si se debe disminuir o aumentar el volumen. Un “-” indica
una disminución y un “+” indica un aumento. Si es una disminución, verifica si el
volumen actual ya es inferior a 0.1 (disminuye y aumenta el volumen en pasos de
0.1), y si es así, simplemente configura el video.volumenatributo a 0. De lo
contrario, disminuye el volumen en 0,1. Casi lo contrario ocurre con un aumento
de volumen; 1 es el valor más alto.
mudo.título = “mudo”;
mudo.innerHTML = “mudo”;
video.silenciado = falso;
}
demás {
video.silenciado = verdadero;
}
}
Como puede ver en el código anterior, primero debe obtener una referencia al objeto del
botón de silencio para poder usarlo, ya que, al igual que con el botón Reproducir/Pausar,
debe cambiar el texto y el valor.
Luego revisas los videos apagadoatributo para ver si ya está silenciado. Si es así, cambie el
valor del botón a "silenciar" y configure el videoapagadoatribuye a "falso". De lo contrario,
establezca el valor y el título del botón en "no silenciar" y configure el video
apagadoatribuir a "verdadero".
En este caso, no necesita escuchar ningún evento a menos que esté actualizando una
visualización de los controles actuales del reproductor. Si desea reaccionar a los cambios de
volumen, puede agregar un oyente para elcambio de volumenevento, que se genera cuando se
cambian los valores de volumen o silencio.
Los botones están terminados. Su reproductor ahora tiene tres botones de trabajo más (
Figura 5.4), y son completamente funcionales.
Suficiente con los botones por el momento. ¿Cómo puedes mostrar a tus usuarios cuánto
del video han visto? Para eso necesitas una barra de progreso.
Para agregar una barra de progreso, nuevamente debe agregar el HTML primero:
Además, también debe diseñarlo con un poco de CSS simple para que funcione
visualmente:
# barra de progreso {
altura: 20px;
}
# jugó {
color de fondo:#aaa;
altura: 20px;
pantalla: bloque en línea;
El ancho y la altura son bastante arbitrarios, pero eso no importa en este momento
porque puede diseñar la barra de progreso como lo desee. Con este código, ahora tiene
una barra de progreso cruda (Figura 5.5).
Básicamente, lo que hará a continuación es aumentar el ancho porcentual de lalapso jugado
función actualizarProgreso() {
valor variable = 0;
if (video.horaActual > 0) {
valor = Matemáticas.piso((100 / video.duración) *
pagsvideo.horaActual);
}
document.getElementById(“reproducido”).style.width = valor + “%”;
La función calcula el porcentaje del video reproducido utilizando la duración total del video en
comparación con eltiempo actual (que es en qué parte del tiempo completo del video se encuentra
actualmente).
Por supuesto, para que la barra de progreso funcione, debe escuchar un evento que le
indique cuándotiempo actualha cambiado para que pueda llamar alprogreso de actualización()
y actualizar la barra de progreso, en este caso, elactualización de tiempoevento:
Para hacer que este simple reproductor de video sea aún más útil, ¿por qué no agregar botones de
Sí, me temo que ha vuelto a agregar botones. Pero ya eres un experto en agregarlos, así
que no tendré que decirte qué hacer hasta que llegues a la etapa de JavaScript.
Definamos los botones y agreguemos los nombres de función para elal hacer clic
eventos porque ahora sabes qué es qué:
Usará las entidades HTML «y »para imitar los símbolos típicos que se
encuentran en dichos botones: « y » respectivamente.
Observe que el nombre de la función que definirá escambiar la velocidad de
reproducción (). El atributo que cambiará para que esto funcione es eltasa de reproducción
atributo que encontró en la Tabla 5.1.
Sin embargo, hay una advertencia: actualmente, solo los navegadores basados en
WebKit, Safari y Chrome, admiten eltasa de reproducciónatributo. Por lo tanto, la única forma
en que puede imitar la funcionalidad prevista en otros navegadores es alterar el video
tiempo actualatributo, moviéndolo hacia adelante o hacia atrás:
if (video.playbackRate != indefinido) {
if (dirección == “-”) video.playbackRate -= 1;
else video.playbackRate += 1;
}
demás {
Su reproductor multimedia simple pero un poco más impresionante de lo que era al comienzo del
capítulo ahora tiene un conjunto completo de botones bastante grises pero funcionales y una barra de
progreso.
www.html5multimedia.com.
La funcionalidad de búsqueda de la barra de progreso permite a los usuarios hacer clic en cualquier
parte de la barra de progreso para mover el video a ese punto. No se necesita HTML nuevo para esto;
todo lo que necesita hacer para agregar esta funcionalidad está en JavaScript. Solo necesita agregar
eventos para el ratón arriba evento (que se genera cuando un usuario suelta el botón del mouse al
ProgressBar.addEventListener(“mouseup”, function(e)
pags{setPlayPosition(e.pageX); }, falso);
función establecerPosiciónJuego(x) {
video.currentTime = timeToSet;
}
function buscarPos(obj) {
var curva izquierda = 0;
if (obj.offsetParent) {
do { curleft += obj.offsetLeft; } mientras
pags(obj = obj.offsetParent);
}
curva de retorno;
}
NOTA: ElencontrarPos()encuentra la posición real de un elemento HTML,
teniendo en cuenta la posición de sus padres. Puede leer más sobre el
código detrás de él en www.quirksmode.org/js/findpos.html.
usuario haga clic en la barra de progreso, el video se moverá a esa posición y la reproducción continuará
El reproductor que acaba de crear es, por supuesto, solo HTML5, y para los navegadores que no
admiten HTML5, como Internet Explorer 6 a 8, el reproductor no funcionará. Entonces, ¿cómo puede
Para que su reproductor sea compatible con navegadores que no sean HTML5, primero
deberá agregar un recurso Flash (como se explica en el Capítulo 4) alvideo para que estos
navegadores lo utilicen. Luego realice una verificación para ver si el navegador admite video
HTML5. Si es así, puede continuar con todo ese elegante JavaScript que agrega controles,
eventos y funciones. Si el navegador no es compatible con video HTML5, ocultará sus controles
personalizados y permitirá que Flash Player maneje la reproducción de video y proporcione
controles de usuario.
Puede verificar la compatibilidad con el navegador de video utilizando la siguiente pieza de
JavaScript:
var v = documento.createElement(“video”);
si (v.jugar) {
/* ...el navegador soporta video HTML5...*/
}
demás {
Este código crea un dummyvideo elemento y luego comprueba para ver si eltocar
existe la función. De lo contrario, el navegador no admite la reproducción de video.
También puede verificar la compatibilidad del navegador de video utilizando la muy útil biblioteca de detección Modernizr
(www.modernizr.com), que le permite simplemente escribir:
si (Modernizr.video) {
/* ...el navegador soporta video HTML5...*/
}
demás {
Además, Modernizr le permite verificar la compatibilidad del navegador con una multitud de otros elementos, funciones y
capacidades de HTML5, así como verificar la compatibilidad con CSS3.
ENVASEARRIBA
Ahora está familiarizado con la mayoría de los atributos, eventos y métodos de la API JavaScript de
medios de HTML5 y para qué se pueden utilizar. Aprendió a usarlos para crear un reproductor de
video HTML5 simple con controles personalizados que también reacciona a los cambios en la
después de todo es bastante simple y básico. Puede ir más allá y agregar una lista de reproducción
que cargue videos en el reproductor según la selección del usuario de una lista. Pero esa función está
TERMINANDO115
6
ESTILO MEDIOS DE COMUNICACIÓN
div, encabezado, artículo, y sección. Esto, por supuesto, significa que el audioy
web (bueno, excepto para los navegadores que no son HTML5, por supuesto).
Ahora puede ponerse su sombrero CSS y usar sus habilidades para hacer que
117
SIMPLEESTILO CSS
Las hojas de estilo en cascada (CSS) es un lenguaje que se utiliza para describir la presentación
de un documento escrito en un lenguaje de marcado, en este caso HTML5. CSS básicamente
separa el contenido del documento del estilo del documento, que incluye colores, imágenes
de fondo, fuentes y posicionamiento.
Un estudio completo y completo de CSS, su sintaxis y sus propiedades está
fuera del alcance de este libro. Si es nuevo en CSS, consulte los numerosos libros y
recursos en línea disponibles para familiarizarse con el concepto.
Antes de sumergirnos en estilos más avanzados, primero veamos algunos ejemplos simples de
cómo puede usar CSS básico para diseñar el aspecto de unvideo elemento.
cuerpo {
color de fondo:#262626;
margen: 0 automático;
El cuerpo tiene un color de fondo de #262626 (una especie de carbón), y su contenido está
alineado en el centro. Elvideo El elemento tiene un borde blanco grueso de 20 píxeles y se
coloca a 100 píxeles de la parte superior de la página. Esto mejora el aspecto general del
video.
NOTA: Puedes usarmargen: 0 automático;sobre el
video elemento si desea centrar videos dentro de
contenido diferentedivisióncolumnas
Si desea agregar un título en la parte superior del video, puede usar el método habitual
de posicionamiento relativo e índices z para asegurarse de que el título se coloque donde lo
desea. El siguiente HTML define un contenedor simpledivisión,adivisiónque contiene el título, y
luego elvideo elemento:
<div class=”contenedor”>
<div class=”title”>Loros</div>
<controles de video precargados=”metadatos”>
. envase {
ancho: 340px;
. título {
ancho: 200px;
altura: 30px;
color de fondo:#aaa;
índice z: 2;
posición: relativa;
margen: 10px automático;
en la parte superior para colocarlo debajo del título.división,y luego céntrelo horizontalmente dentro
video {
margen:-35px automático;
ancho: 305px;
altura: 152px;
borde: 20px sólido #fff;
posición: relativa;
índice z: 1;
}
video {
margen: 20px;
color de fondo:#fff;
ancho: 305px;
altura: 200px;
}
CSS3, la última versión de CSS que surgió, tiene una gran cantidad de nuevas reglas y
propiedades que su predecesor, CSS2.1, no tenía. Y puede usar estas nuevas características
para diseñar elementos HTML al contenido de su corazón.
Un estudio y una lista de estas reglas y propiedades están fuera del alcance de este libro,
pero puede ver la especificación en www.w3.org/TR/CSS.
Algunas de las propiedades más interesantes que agregan nuevas funcionalidades se analizan
OPACIDAD
video {
opacidad: 0,5;
Esta pieza de CSS hace que el video sea 50 por ciento transparente (Figura 6.4). Luego,
puede llevar el video al 100 por ciento de opacidad al pasar el mouse usando lo siguiente:
opacidad: 1;
Opacity funciona en las últimas versiones de Firefox, Opera, Internet Explorer y Safari.
Chrome hace que los controles de video sean transparentes pero no el video.
DEGRADADO
ancho: 305px;
altura: 152px;
margen:-187px 30px 30px;
posición: relativa;
índice z: 2;
imagen de fondo: -webkit-linear-gradient(
cima,
rgba(255,255,255,0),
rgba(255,255,255,1)
);
imagen de fondo: -moz-linear-gradient(
cima,
rgba(255,255,255,0),
rgba(255,255,255,1)
);
imagen de fondo: -o-linear-gradient(
cima,
rgba(255,255,255,0),
rgba(255,255,255,1)
);
imagen de fondo: degradado lineal (
cima,
rgba(255,255,255,0),
rgba(255,255,255,1)
);
}
navegador (si existen), así como la versión de especificación real para garantizar que todos
Puedes ver cómo se ve el degradado enFigura 6.5. Tenga en cuenta que los controles están
cubiertos y no se pueden usar, por lo que debe implementarlos a través de la API de JavaScript, como
se describe en el Capítulo 5.
Gradiente funciona en Firefox, Chrome y Safari.
NOTA: Puede hacer más con las reglas de gradiente lineal de CSS3 de lo que se
muestra en los ejemplos, pero cualquier explicación adicional está fuera del
alcance de este libro. Puede leer más sobre los gradientes lineales de CSS3 en
http://dev.opera.com/articles/view/css3-linear-gradients.
ESQUINAS REDONDEADAS
Las esquinas redondeadas alguna vez fueron la ruina de la vida del desarrollador web, con
muchas horas dedicadas a manipular imágenes de fondo para agregar esquinas redondeadas
a un elemento HTML. Ese dolor se alivia en CSS3 con la adición deborde-radio,que te permite
agregar esquinas redondeadas a cualquier elemento HTML, y eso incluye los elementos
multimedia:
video {
- moz-border-radio:20px;
- webkit-border-radio:20px;
borde-radio: 20px;
}
Una vez más, hay una serie de definiciones específicas del navegador, pero cada una le da al
elemento un radio de esquina redondeada de 20 píxeles (Figura 6.6).
Por el momento, las esquinas redondeadas de los elementos multimedia actualmente solo funcionan en
Firefox.
SOMBRA
Junto con las esquinas redondeadas, agregar una sombra a un elemento HTML es otra
tarea común de los desarrolladores web. Una vez mas. CSS3 viene al rescate y lo agrega
a la especificación.
Usando el siguiente código, puede agregar un color de sombra de #999a los 10 píxeles en
la parte inferior derecha del video con una extensión de 5 píxeles:
video {
- moz-caja-sombra: 10px 10px 5px #999;
REDONDEADOESQUINASMÁSSOMBRA
Combinando esquinas redondeadas con sombra y aplicándolas a unvideo El elemento tiene un efecto extraño en todos los
navegadores que no sean Firefox.
Firefox presenta las propiedades correctamente, pero otros navegadores ignoran las esquinas redondeadas en elvideo
elemento y en su lugar mostrar las esquinas redondeadas en la sombra (Figura 6.8)!
FIGURA 6.8El video con esquinas redondeadas y una sombra proyectada en Firefox (izquierda) y luego en Chrome (derecha).
<controles de audio>
sonido {
borde-radio: 10px;
caja-sombra:10px 10px 5px #888;
DIMENSIONANDO SU CONTENIDO
video {
borde: 1px sólido #000;
bloqueo de pantalla;
}
vídeo#v1 {
- o-objeto-ajuste:ninguno;
}
vídeo#v2 {
- o-objeto-encajar:contener;
}
vídeo#v3 {
- o-objeto-encajar:cubierta;
}
vídeo#v4 {
- o-objeto-encajar:llenar;
}
vídeo#v5 {
- o-objeto-ajuste:reducción de escala;
video {
borde: 1px sólido #000;
bloqueo de pantalla;
ancho: 300px;
altura: 180px;
- o-objeto-ajuste:ninguno;
}
vídeo#v1 {
- o-posición-del-objeto:arriba a la izquierda;
}
vídeo#v2 {
- posición del objeto o: centro derecho;
}
vídeo#v3 {
- o-posición-del-objeto:abajo a la derecha;
}
vídeo#v4 {
- o-posición-objeto:centro;
}
Ahora ha definido cuatro videos, cada uno con un borde y dimensiones especificadas pero con
diferentes configuraciones paraposición del objeto.
FIGURA 6.17El contenido del video se coloca usando FIGURA 6.18El contenido del video se coloca usando
posición del objeto: abajo a la derecha. posición del objeto: centro.
Vale la pena mirar dos divertidas propiedades específicas de WebKit:reflejarymáscara. Se espera que
se conviertan en parte de una especificación más amplia. Incluso si no lo hacen, ahora puede
sorprender a los usuarios de su navegador WebKit con los efectos que producen.
REFLEJAR
video {
- webkit-box-reflect:por debajo de 0px;
video {
- webkit-box-reflect:derecha 30px;
}
MÁSCARA
video {
- webkit-mask-box-image:url('oval-mask.png');
color de fondo:#262626;
}
Este ejemplo utiliza una imagen de máscara simple en forma de óvalo; el área ovalada es
donde debe aparecer el video (Figura 6.21).
Si los controles están ocultos o parcialmente ocultos detrás de la imagen de la máscara, serán
través de JavaScript.
Si quisiera que los usuarios vieran un video a través de una imagen en particular para obtener un efecto
adicional, por ejemplo, para ver un video del mar a través de un ojo de buey, podría usar una imagen de
máscara.
Es una pena que el reflejarymáscara las propiedades son específicas de WebKit. Pero
quién sabe; tal vez algún día se estandaricen y se conviertan en la próxima
especificación CSS.
ENVASEARRIBA
Aprendió cómo puede crear elementos multimedia HTML5 como cualquier otro
elemento HTML dentro de su documento web y cómo diseñarlos y colocarlos de la
misma manera también. Este capítulo solo le ha dado una idea de lo que puede hacer al
diseñar sus elementos. Asegúrese de experimentar con el estilo y ver qué puede
descubrir y qué resultados puede lograr.
También aprendió sobre algunas de las nuevas funciones que vienen con algunas de las últimas
propiedades de CSS3. Pero CSS3 se extiende un poco más. El Capítulo 7 analiza las transiciones, las
transformaciones y la animación en CSS3.
TERMINANDO137
7
TRANSICIONES,
TRANSFORMA,
YANIMACIÓN
Usted sabe que puede usar CSS para darle estilo a sus
139
UTILIZANDO TRANSICIONES
Una de las definiciones del diccionario para una transición es un "paso de una forma,
estado, estilo o lugar a otro". Esto es lo mismo con los elementos HTML y
particularmente con el estilo. Es este color o aquel color, colocado en esta posición o en
aquella posición. No hay un estado intermedio; Es uno o el otro. Las transiciones
agregan un estado intermedio entre un estilo, posición o estado y otro.
Por ejemplo, supongamos que tiene un elemento HTML para el que ha definido dimensiones
establecidas y que, al pasar el mouse, desea que ese elemento en particular aumente de tamaño.
imagenelemento:
imagen {
ancho: 183px;
altura: 164px;
}
img: flotar {
ancho: 275px;
altura: 246px;
}
"CSS Transitions permite que los cambios de propiedad en los valores de CSS se produzcan sin problemas
Para crear esta transición, utilizará algunas de las propiedades de transición enumeradas en
Tabla 7.1.
NOMBRE DESCRIPCIÓN
propiedad de transición Especifica los nombres de la transición a la que se aplicará la transición (p. ej.,
fondo, color, tamaño de fuente, ninguno, otodo).
duración de la transición Define la cantidad de tiempo en segundos que realmente tomará la transición. un valor de 0s
indica que la transición se llevará a cabo inmediatamente.
función de temporización de transición Especifica la función que se utilizará para calcular los valores intermedios durante la transición. Hay
una serie de valores predefinidos para esta propiedad:facilidad, lineal, facilidad de entrada, facilidad de
salida, facilidad de entrada, ycubic-bezier(), que le permite definir el suyo propio.
transición-retraso Define cuándo comenzará la transición. un valor de0, la configuración predeterminada, hace que la
transición comience inmediatamente.
USO DE TRANSICIONES141
Dado que debe agregar todas las diferentes reglas específicas del proveedor para cada propiedad de
transición especificada, ¡esto puede generar una lista bastante larga! Solo para Mozilla, definir una regla de
- moz-transition-property:all;
- moz-transición-duración:1s;
- moz-transition-timing-function:facilidad;
PROPINA:Para obtener una lista de todas las propiedades a las que puede aplicar transiciones, consulte
¡Agregar reglas para los otros tres proveedores más la definición de regla no
específica del proveedor haría que 15 líneas de CSS solo para una transición!
Afortunadamente, puede solucionar esto utilizando la regla abreviada, que le permite
definir las diversas propiedades juntas, por ejemplo:
diferentes reglas abreviadas específicas del proveedor, puede definir la transición de esta manera:
imagen {
ancho: 183px;
altura: 164px;
- webkit-transition: todos los 1 son sencillos;
tu pones eltransiciónregla sobre el estado normal del elemento en cuestión en lugar FIGURA 7.2Aunque tendrá que
de:flotarExpresar. El motivo es que es posible que desee que la transición se aplique a usar su imaginación aquí, la
imagen ahora aumenta
todos los estados de este elemento, como:enfocar. suavemente de un tamaño (A) a
Ahora, la transición entre los dos estados al pasar el mouse es mucho más suave, ya que otro (C) con estados de transición
la imagen cambia gradualmente de un tamaño a otro (Figura 7.2). en el medio (representados por
B).
Debido a que puede aplicar transiciones a cualquier elemento HTML, por supuesto puede usar
transicióncon elaudioyvideoelementos:
video {
ancho: 146px;
altura: 76px;
- webkit-transition: todos los 1 son sencillos;
USO DE TRANSICIONES143
A
B
C
FIGURA 7.3Al pasar el mouse, el video cambia suavemente de un tamaño (A) a otro (C) con transiciones intermedias (representadas por B).
ancho: 292px;
altura: 152px;
}
Con CSS Transitions, puede diseñar su video de diferentes maneras para crear una mejor
experiencia para sus usuarios. Por ejemplo, suponga que tiene un video que ha diseñado con
una sombra paralela, como esta:
Pero desea aumentar la sombra paralela cuando un usuario pasa el mouse sobre el
video. Nada sofisticado; solo desea agregar una acción de respuesta sutil al usuario.
Definiría el estado de desplazamiento del video y luego agregaría la transición al estado
normal delvideoelemento:
video {
margen: 100px;
}
vídeo: pasar el cursor {
USO DE TRANSICIONES145
TRANSICIONES QUE SE DESVANECEN
También puede usar una transición para desvanecer el video de un opacidad valor de 0,5 a 1 en
:flotar y :enfocar. Es posible que desee hacer esto si tiene una lista de videos que se muestran
en la pantalla al mismo tiempo y desea que el video sobre el que el usuario se desplaza y
reproduce se vuelva opaco:
video {
opacidad: 0,5;
opacidad: 1;
Los ejemplos anteriores le dan una idea de lo que puede hacer con las transiciones CSS:
crear nuevos estados para el elemento y realizar una transición a ellos sin problemas.
Pero eso no es todo lo que puedes hacer. También puede aplicar transformaciones
bidimensionales y tridimensionales a elementos HTML.
USO DE TRANSICIONES147
EXPLORADORTRANSFORMACIONES 2D
Hay dos tipos de transformaciones CSS, 2D y 3D. Primero echemos un vistazo a las
transformaciones 2D.
ESCALA DE UN VÍDEO
La mejor manera de comenzar a ver las transformaciones 2D es trabajar con un ejemplo simple. Usando el
video de loros coloridos, agregará una transformación de escala para escalar el tamaño del video en el estado
NOTA:Al igual que las transiciones CSS3, las transformaciones 2D son compatibles con los
navegadores modernos, siempre que use reglas CSS específicas del proveedor.
que desea que el elemento se transforme. Un valor mayor que 1 escala hacia arriba; cualquier FIGURA 7.7 La transformación de escala
ahora es mucho más suave y agradable de
valor inferior a 1 se reduce. Los valores funcionan como porcentajes;escala (0.75)
ver a medida que se mueve de un tamaño
indica una escala del 75 por ciento, mientras que escala (1.25) indicaría una escala de 125 por pequeño (A) a un tamaño más grande (C) a
ciento. En este ejemplo, aumentará la escala del video en un valor de 1,5 (150 por ciento): través de un estado intermedio (B).
- moz-transform:escala(1.5);
- o-transformar:escala(1.5);
- ms-transform:escala(1.5);
- transformar: escala (1.5);
Ahora, cuando el usuario se desplaza sobre el video, se escalará hacia arriba en un factor de 1.5 (
Figura 7.6).
Pero al igual que el primer ejemplo de transición anterior en el capítulo, la transición entre los
estados es torpe y fea. ¿Entonces que puedes hacer? Bueno, ¡agrega una transición, por supuesto!
Usando lo que ya aprendió, puede aplicar una transición simple al estado normal
del videoelemento para hacer el escalatransformar la acción mucho más suave (Figura
7.7):
video {
- webkit-transition: todos los 1 son sencillos;
GIRAR UN VÍDEO
Esta vez rotará el estado normal del video, por lo que no se requieren reglas de transición o estado
de desplazamiento.
usando el mismo transformarregla como lo hizo anteriormente, simplemente indica que
desea que el elemento sea rotado en lugar de escalado. Por ejemplo, puede tener varios
videos en una página y desea que se vean como si estuvieran dispersos aleatoriamente en la
página, cada uno en un ángulo ligeramente diferente.
Elgirartransform también toma un parámetro: el número de grados en los que se rotará el elemento. Un
valor positivo lo gira en el sentido de las agujas del reloj; un valor negativo lo gira en sentido contrario a las
video {
- webkit-transformar: rotar (-5 grados);
- ms-transform:rotate(-5deg);
- transformar: rotar (-5 grados);
Aquí, el video se gira 5 grados en sentido contrario a las agujas del reloj (Figura 7.8).
SESGANDO UN VIDEO
Usando el video con una sombra adicional, puede sesgarlo 15 grados hacia la izquierda:
video {
- webkit-transform:skew(15deg);
- transformación moz: sesgo (15 grados);
TRADUCCIÓN DE UN VÍDEO
su posición actual:
<div class=”contenedor”>
<controles de video precargados=”metadatos”>
- moz-transform:translate(50px,50px);
- o-transformar: traducir (50px, 50px);
Si quisiera traducir los videos a diferentes posiciones, podría hacerlo asignando a cada
video un identificador único y luego especificando diferentes valores de traducción para cada
video a través de este identificador.
Combinando lo que aprendiste anteriormente, también puedes agregar un borde, una sombra
paralela y una transición suave a los videos para darles una transformación suave:
video {
margen derecho: 10px;
www.w3.org/TR/css3-2d-transforms.
CSS 2D Transforms puede ser bastante útil para lograr algunos efectos ingeniosos. Pero
recuerda que hay dos tipos de CSS Transforms. Ahora echemos un vistazo a las transformaciones 3D.
Las transformaciones 3D son, por supuesto, bastante similares a las transformaciones 2D, excepto
que tratan con tres dimensiones en lugar de dos. Desafortunadamente, las transformaciones 3D no
son compatibles con los navegadores; solo los navegadores WebKit actualmente brindan soporte. Es
por esta razón que sólo se mencionan brevemente aquí.
La especificación W3C menciona que aunque una Transformación 3D:
Puede dar a los elementos una perspectiva a través de laperspectivapropiedad, que establece la
perspectiva (en píxeles) desde la que se ve un elemento. Esto da una sensación de profundidad, lo
que hace que los elementos más alejados del espectador parezcan más pequeños.
También puede rotar elementos alrededor de los tres ejes diferentes de un plano
3D usando elrotar3D(x, y, z, grado de rotación)función. Por ejemplo, para aplicar una
rotación de 25 grados alrededor del eje Y, usaríarotar3d (0, 1, 0, 25 grados).
Cada una de lasx, y,yzlos parámetros toman un 1 o un 0, lo que indica si rotar
alrededor de ese eje o no.
Usando los videos dispersos en un ejemplo de página mencionado anteriormente, es posible que desee
agregar algo de profundidad para los usuarios de WebKit. Veamos un ejemplo simple que muestra las dos
propiedades que acabamos de mencionar para darle una idea de cómo funcionan.
Dado que los navegadores WebKit son actualmente los únicos que admiten
Para comenzar, defina undivisión con una clase "principal", que también contiene otradivisión
<clase div=”principal”>
<clase div=”bg”>
Luego define el posicionamiento de cada uno de estos elementos en el CSS y también dale al
div.principal {
posición:absoluta;
arriba: 50%;
izquierda: 50%;
}
div.bg {
altura: 246px;
ancho: 380px;
color de fondo:#aaa;
}
video {
ancho: 292px;
posición:absoluta;
arriba: 50px;
izquierda: 50px;
div.principal {
posición:absoluta;
arriba: 50%;
izquierda: 50%;
Esta perspectiva no tiene ningún efecto visual en los elementos, pero lo tendrá cuando agregue
la regla CSS siguiente y final. Agrega unrotacióntransforma alrededor del eje Y con un ángulo de 40
grados con respecto a ladivisión con la clase bg:
div.bg {
altura: 246px;
ancho: 380px;
color de fondo:#aaa;
- webkit-transform:rotate3d(0, 1, 0, 40 grados);
Figura 7.14 muestra cómo se representan los elementos alrededor del eje Y, y Figura
7.15 muestra el mismo video girando alrededor de ambos ejes.
El ejemplo anterior muestra solo una pequeña parte de lo que puede hacer con las
transformaciones 3D, pero debería darle una idea general de lo que puede lograr.
Debido a la compatibilidad limitada del navegador, recomendaría no usar Transformaciones 3D
en este momento. Sin embargo, definitivamente vale la pena jugar con ellos para ver qué puede
hacer con ellos, siempre que use un navegador WebKit. Cuando aumente la compatibilidad con los
navegadores, sin duda verá mucho más acerca de las transformaciones 3D.
InternetWeb/Conceptual/SafariVisualEffectsProgGuide/ Transforms/Transforms.html.
"Las animaciones CSS permiten que un autor modifique los valores de las propiedades CSS a lo largo del tiempo".
"Valores a lo largo del tiempo" implica que debe definir ciertos valores para diferentes períodos
de tiempo, lo que hace a través de la clave de CSS Animations, Fotogramas clave.
@FOTOS CLAVE
Los fotogramas clave le permiten definir funciones dentro del CSS en las que puede
especificar reglas CSS para los estados inicial, final e intermedio de un elemento HTML. Para
especificar una regla de este tipo, utilice el @fotogramas clave palabra clave seguida de un
identificador único o nombre de función. A esto le sigue un conjunto de reglas CSS contenidas
entre llaves que especifican los diferentes fotogramas de la animación, es decir, cómo se
moverá, rotará, escalará, etc. el elemento animado en diferentes puntos de la animación.
Por ejemplo, una función de animación de fotogramas clave muy simple que mueve un elemento
@keyframes tiembla {
0% {
izquierda: 5px;
}
25% {
izquierda: 10px;
}
50% {
izquierda: 15px;
izquierda: 20px;
}
100% {
izquierda: 25px
}
}
En la función Fotogramas clave agitar, fise definen cinco marcos de tiempo diferentes; cada uno
contiene una diferenteizquierda definición CSS. Entonces, en cada marco de tiempo, el elemento
@keyframes tiembla {
desde {
izquierda: 5px;
}
a{
izquierda: 25px;
}
}
PROPIEDAD DESCRIPCIÓN
nombre-de-animación Identifica los nombres de animación que se aplicarán. Cada nombre debe ser una función de
animación Keyframe definida.
duración de la animación Define el tiempo que debe tardar la animación en completar un ciclo.
función de temporización de animación Define cómo progresará la animación durante un ciclo de sus duraciones. Puede ser uno de varios valores
predefinidos:facilidad, lineal, facilidad de entrada, facilidad de salida, facilidad de entrada, ocubicbezier(). Tenga en
cuenta que estos son los mismos valores que se pueden utilizar para un función de temporización de transición
como se menciona en la Tabla 7.1.
recuento de iteraciones de animación Especifica el número de iteraciones que debe realizar la animación. Se puede configurar para
infinito, lo que hará que la animación se repita continuamente.
animación-dirección Define si la animación debe o no reproducirse en reversa en ciclos alternos. Los valores válidos
sonnormal yalterno. un valor de normal es el predeterminado.
animación-retraso Indica cuándo comenzará la animación. Permite agregar un retraso al comienzo de la animación
si es necesario. un valor de0, el predeterminado, hace que la animación comience
inmediatamente.
modo de relleno de animación Indica qué valores aplica la animación fuera del tiempo que se está ejecutando. De forma
predeterminada, los valores contenidos dentro de los cuadros de animación no se conservan una
vez que se completa la animación. Establecer este valor puede anularlo usando uno de cuatro
valores diferentes:
ninguna. Ninguno de los valores persiste fuera de la animación. Este es el valor predeterminado.
hacia atrás. Los valores definidos en el primer cuadro persistirán una vez que se complete la
animación.
hacia adelante. Los valores definidos en el cuadro final se mantendrán una vez que se complete la
animación.
ambos. Los valores tanto en el primer cuadro como en el último se conservarán cuando
se complete la animación.
(www.w3.org/TR/css3-animations/#the-animation-play-state-property).
conjunto bastante largo de reglas, por lo que, una vez más, utilizando la notación abreviada, en este casoanimación, es
Este fragmento de CSS define elsacudirAnimación de fotogramas clave que se utilizará, con una
navegadores WebKit y Firefox 4+. Por lo tanto, una vez más, se requieren reglas
CSS específicas del proveedor para que las animaciones CSS funcionen.
<div class=”contenedor”>
<div id=”cubrir” class=”cubrir”></div>
<clase div=”bg”>
<video poster=”sintel-poster.jpg” preload=controles de “metadatos”>
</vídeo>
</div>
</div>
imagen de póster definida, usa los controles predeterminados del navegador y también sugiere que
la página y colóquelo 20 por ciento hacia abajo desde la parte superior de la página:
altura: 138px;
color de fondo:#fff;
}
. envase {
margen:20% automático 0 automático;
}
. portada, .bg {
posición:absoluta;
borde: 1px sólido #aaa;
}
. cubrir {
background:#fff url('sintel-cover.jpg') no-repetir center center;
índice z: 3;
cursor:puntero;
}
. fondo {
índice z: 2;
}
píxeles:
video {
ancho: 301px;
altura: 128px;
margen: 5px;
Por supuesto, ahora necesita animar la portada, de modo que cuando un usuario haga
clic en ella, gire hacia afuera y detrás del video, revelando el video, que luego se puede
reproducir.
@-moz-keyframes removecover {
0% {
- moz-transform:translate(0,0) rotar(0deg);
índice z: 3;
}
50% {
índice z: 3;
}
100% {
Solo es necesario definir tres marcos aquí, porque desea que eldivisión para alejarse
a un punto determinado (-180 píxeles de distancia en los ejes X e Y), girar 360 grados y
luego volver a la misma posición, pero con una diferencia. Note que el
índice ztambién se especifica dentro de las definiciones de marco. porque la portadadivisión permanecerá en
la parte superior a medida que gira y luego se asentará detrás del video y bgdivisión,el
índice zel valor definido en el cuadro final debe persistir una vez que finaliza la
animación. Lo lograrás usando elmodo de relleno de animaciónpropiedad.
div.animar {
- moz-animation:removecover 2s 1 linear forwards;
}
Así que asignas los Keyframesremovecover función a esta clase animada con una
duración de 2 segundos, itérela una vez con unlinealfunción de temporización y ajuste el
modo de relleno de animacióna hacia adelantepor lo que las reglas contenidas en el cuadro de
animación final persistirán una vez que termine la animación, es decir, uníndice zde 1
Para asegurarse de que la animación sea fluida, agregue una transición a la portadadivisión:
. cubrir {
background:#fff url('sintel-cover.jpg') no-repetir center center;
índice z: 3;
cursor:puntero;
- moz-transition: todos los 1s facilidad;
Para que la animación realmente suceda, simplemente agregue la clase de animación CSS a la
portadadivisión cuando el usuario hace clic en él. Debido a que no puede hacer esto a través de CSS,
se requiere un poco de JavaScript para escuchar el evento de clic en la portada.división y luego
agregue el nombre de la clase:
A B
C D
¡Y eso es! Cuando un usuario hace clic en la portada, girará hacia afuera y hacia atrás del video, lo
En el ejemplo anterior, combinó Transformaciones CSS y Animación. Por supuesto, fue una
Transformación 2D, pero aquí usará una Transformación 3D. Esto significa que solo funciona
en navegadores WebKit, por lo que el código solo se dirigirá a esos navegadores.
Para este ejemplo, utilizará elrotar3d()transformación mencionada anteriormente. Una vez
más, primero debe definir la función Fotogramas clave que definirá los marcos de tiempo
para la animación. Usando el zumbido de los engranajes de la imaginación, llamemos a este
girar:
@-webkit-keyframes girar {
0% {
- webkit-transform:rotate3d(0,0,0,0deg);
}
25% {
- webkit-transform:rotate3d(0,1,0,90deg);
}
50% {
- webkit-transform:rotate3d(0,1,0,180deg);
}
75% {
- webkit-transform:rotate3d(0,1,0,240deg);
}
100% {
- webkit-transform:rotate3d(0,1,0,360deg);
}
}
Usando el ejemplo de portada de video animado que viste anteriormente, puedes aplicar el rotar3d
transforme a la animación de portada para navegadores WebKit en lugar de la más simple girar
transformar.
Para hacer esto, todo lo que necesita hacer es definir la animación Keyframes apropiada
removecover función para WebKit y asignarlo a la animación división clase:
@-webkit-keyframes removecover {
0% {
- webkit-transform: traducir (0,0) rotar 3d (0,0,0,0 grados);
índice z: 3;
}
50% {
- webkit-transform:translate(-180px,-180px)
pags rotar3d(1,1,1,-180grados);
índice z: 3;
}
100% {
completa sean totalmente compatibles con todos los navegadores, así que esté atento a su desarrollo también.
TERMINANDO171
8
MULTIMEDIAY
ACCESIBILIDAD
Hasta ahora, ha aprendido lo simple que puede
Debe dar un paso atrás y pensar en sus usuarios finales. Es posible que no
todos puedan acceder a los medios como usted pretendía. Algunos pueden
idioma en el que se entregan sus medios. ¿Qué puede hacer para brindarles
173
MEDIOS DE COMUNICACIÓNY POTENCIAL
PROBLEMAS DE ACCESIBILIDAD
- Los usuarios verán su contenido en una computadora de escritorio, computadora portátil, tableta o teléfono.
- Los usuarios tendrán alguna forma de escuchar el audio de su contenido, ya sea a través de
auriculares o altavoces.
Todas son suposiciones bastante razonables y probablemente cubran a la gran mayoría de los
usuarios que querrán acceder a su contenido. Puede estar satisfecho con que su contenido sea
accesible solo para estos usuarios; después de todo, la mayoría gobierna, ¿no es así?
Bueno, le recomiendo encarecidamente que piense en hacer que su contenido sea accesible para los
usuarios que no se encuentran en la categoría de las suposiciones que se acaban de enumerar. ¿Quiénes son
- Usuarios que tienen una discapacidad sensorial que les impide escuchar el
audio de su contenido o ver videos.
- Usuarios que usan dispositivos como lectores de pantalla y/o usan teclados para acceder a
- Usuarios que no pueden escuchar o ver correctamente su contenido debido al entorno en el que se
Debido a que la mayoría del contenido de los medios generalmente incluirá algo de audio, no
poder escuchar o comprender el audio que contiene es un gran obstáculo para comprender el
Del mismo modo, poder acceder al contenido a través de un dispositivo como un lector de
pantalla pero luego no poder usarlo debido a que los controles de medios no están configurados
Explorará la accesibilidad de los controles multimedia más adelante en este capítulo. También
echará un vistazo a lo que HTML5 trae a la mesa en un intento de abordar el problema de los usuarios
que no pueden ver, escuchar o comprender su contenido multimedia. Pero primero, echemos un
vistazo rápido a lo que condujo al intento de HTML5 de enfrentar este problema de accesibilidad: SRT.
SRT es un formato de archivo existente para contener subtítulos de video y sus tiempos. Un archivo
SRT a menudo se produce automáticamente usando un programa de Windows llamado SubRip
(http://zuggy.wz.cz), que usa el reconocimiento óptico de caracteres (OCR) para obtener los subtítulos
de la fuente de video especificada.
El formato de archivo SubRip es un archivo de texto básico con la extensión .srt-fiextensión de archivo que
Número de subtítulo
...
Cada conjunto de subtítulos comienza con un número de subtítulo único, seguido de las marcas
de tiempo de inicio y finalización del tiempo que representa el subtítulo en una línea separada, que
luego es seguida por una o más líneas de texto de subtítulo. Cada conjunto de subtítulos
subsiguientes está separado por una línea en blanco. El formato de marca de tiempo
hh:mm:ss,msmsmsespecifica las horas, minutos, segundos y milisegundos del tiempo en cuestión.
1
00:00:10,500 --> 00:00:13,000
El sueño del elefante
2
00:00:15,000 --> 00:00:18,000
A la izquierda podemos ver...
WebVTT (Web Video Text Tracks) es un formato de archivo diseñado para marcar pistas
de texto externas. Inicialmente era parte de las especificaciones WHATWG y W3C
HTML5, y era una extensión de SRT llamada WebSRT (Web Subtitle Resource Tracks).
Pero al W3C le preocupaba que HTML5 fuera independiente de cualquier formato de
subtítulos elegido y, por lo tanto, se eliminó de esa especificación.
se calzaron con calzador en las tres letras para que realmente significaran algo.
“crear una especificación W3C a partir del lenguaje WHATWGWebVTT (Web Video Text
Tracks) y solidificarlo mediante la creación de un conjunto de pruebas WebVTT y
mediante la creación de asignaciones semánticas de otros formatos de subtítulos
hacia o desde WebVTT para facilitar la implementación y el mercado del navegador.
adopción."
Se espera que esta promesa de soporte del proveedor a su vez conduzca eventualmente a
una estandarización formal de la especificación WebVTT en el W3C. Con el soporte del
navegador y el del W3C, puede estar seguro de que WebVTT llegó para quedarse y está
destinado a convertirse en el método de facto para marcar pistas de texto dentro del
contenido de audio y video en la web.
Entonces, ¿qué es el formato de archivo WebVTT y cómo puede ayudarlo a que su contenido sea
Utilice el formato de archivo WebVTT para definir archivos WebVTT. Uno de los usos
principales de estos archivos es proporcionar subtítulos al contenido de video, aunque el
formato del archivo no indica para qué se usan sus contenidos.
Un archivo WebVTT es un archivo de texto simple con la extensión .vttextensión que debe
seguir un formato específico, que verá en breve. El archivo debe estar codificado comoUTF-8
y etiquetado con el tipo MIMEtexto/tt.Los terminadores de línea dentro del archivo solo pueden ser \r
(un retorno de carro), \n (una nueva línea), o \r\n (un retorno de carro seguido de una nueva línea).
WEBVTT
[señal]
[señal]
...
ElWEBVTTcadena en la parte superior identifica el contenido como un archivo WebVTT y luego debe ir
seguido de al menos una línea en blanco, que luego es seguida por cualquier número deseñales,cada uno de
[cadena de identificación]
TextLine1
TextLine2
...
cadena de identificaciónes un identificador único dentro del archivo que identifica la señal. Puede
constar de uno o más caracteres que no contengan la subcadena “-->” ni ninguno de los
ajustes de señal permitirle especificar el posicionamiento del texto; leerá más sobre
ellos en un momento.
TextLineN es el texto real en el archivo de video que representa el rango de marca de tiempo en
la entrada. El contenido puede estar todo en una línea o presentarse en cualquier número de líneas
separadas. Cualquier línea estará contenida dentro de la entrada hasta que se encuentre una línea
Echemos un vistazo rápido a un archivo WebVTT de muestra que contiene dos rangos de marcas de
tiempo:
WEBVTT
1
00:00:10.500 --> 00:00:13.000
El sueño del elefante
2
00:00:15.000 --> 00:00:18.000
A la izquierda podemos ver...
Este ejemplo define dos señales: la primera comienza a los 10 segundos y 500
milisegundos del video y finaliza a los 13 segundos, y la segunda comienza a los 15 segundos
del video y finaliza 3 segundos después. El texto de los subtítulos para cada señal se
proporciona debajo de su marca de tiempo.
El uso de señales es relativamente sencillo y puede ver cómo se puede construir el archivo
con varias señales para cubrir la duración de un video completo. También puede especificar
algunos ajustes por señal. Estos afectan el posicionamiento de la señal en
el vídeo relacionado. Puede tener varios valores de configuración, y una configuración de entrada
puede contener uno o más valores, cada uno separado por un espacio. Los distintos ajustes se
Posición de la línea L: valor 0–100% Porcentaje de posición de la señal en relación con el cuadro de video.
Posición del texto T: valor 0-100% Porcentaje de posición del texto de referencia en relación con el cuadro de video.
Tamano del texto S: valor 0-100% El tamaño porcentual del texto de la señal.
WEBVTT
1
00:00:10.500 --> 00:00:13.000 Un inicio
El sueño del elefante
2
00:00:15.000 --> 00:00:18.000 A: final L: 10%
A la izquierda podemos ver...
El texto en la primera entrada se alineará a la izquierda del video (de la misma manera
que la regla CSS alineación de texto: izquierda obras) (Figura 8.2).
La segunda señal tiene dos configuraciones aplicadas: El texto se alineará al final de la
línea (similar a alineación de texto: derecha en CSS) y se colocará en la línea 10 por ciento hacia
abajo desde la parte superior del video (Figura 8.3).
Además de especificar la configuración de la señal para controlar la posición y la alineación del
texto de la señal, también hay una serie de estilos en línea que puede aplicar al texto. Estos se ven y
actúan de la misma manera que los elementos HTML. Contienen una etiqueta de inicio y una de
finalización, y el formato se aplica al texto intermedio. Estas etiquetas se enumeran enTabla 8.2.
C Define el texto de clase que permite agregar un nombre de clase de estilo CSS a la etiqueta, por ejemplo, <c.nombreDeClase>.
v Define el contenido de voz que permite agregar un nombre de voz a la etiqueta, por ejemplo, <v.Altavoz1>, que
luego se puede diseñar a través de CSS.
rubí Define el contenido ruby (tramos breves de texto junto con el texto base, a menudo utilizados en documentos de Asia oriental
para indicar la pronunciación o proporcionar anotaciones breves. Consulte www.w3.org/TR/css3-ruby para obtener más
información).
[hh:]mm:ss.msmsms Define una marca de tiempo en la que se activa una determinada parte del contenido dentro del texto de
referencia. Similar al texto estilo karaoke, que aparece paso a paso.
Tenga en cuenta que no hay una etiqueta final; el texto después de la marca de tiempo aparecerá a menos que encuentre
Ampliemos el ejemplo aún más y usemos algunas de las etiquetas de texto para formatear el texto de
referencia:
WEBVTT
1
00:00:00.000 --> 00:00:14.999
de elefante<c.sueño>Sueño</c>
2
00:00:15.000 --> 00:00:18.000 A: final L: 10%
En el<yo>izquierda</i>podemos<segundo>ver</b>...
3
00:00:18.167 --> 00:00:22.000
A la derecha<00:00:20.000>podemos ver el...
Con la primera señal, se ha agregado un nombre de clase de "sueño", un estilo que puede
definir dentro de su archivo HTML de la misma manera que crearía cualquier regla de estilo
CSS. EnFigura 8.4, la clase CSS "sueño" se ha definido con texto rojo y texto en mayúsculas.
NOTA:Cualquier nombre de clase CSS que pueda usar dentro de sus definiciones
de subtítulos WebVTT se puede definir en el archivo HTML contenedor o en un
archivo CSS externo de la misma manera que especificaría cualquier otra clase CSS.
La segunda señal ahora tiene etiquetas que mostrarán la palabra "izquierda" en cursiva y "ver" en
Se agrega una pista adicional a este ejemplo para mostrar cómo se usa la marca de tiempo para
mostrar el texto "estilo de karaoke". Cuando comience la señal, aparecerán primero las palabras "A la
derecha". Luego, el texto "podemos ver..." se mostrará en la marca de tiempo apropiada (Figura 8.6).
NOTA:Si desea que los caracteres &, < y > aparezcan en el texto de una señal
de video, debe escaparlos con&erio; <y>respectivamente.
Vale la pena señalar que debido a que el formato de archivo WebVTT es relativamente nuevo
en la especificación y con la reciente creación de la Carta del grupo de trabajo WebVTT, es
probable que se agreguen a la especificación.
de la Carta del Grupo de Trabajo. Silvia también escribe regularmente en blogs sobre temas de
ATRIBUTO DESCRIPCIÓN
origen Contiene la URL de los datos de la pista de texto (por ejemplo, un archivo WebVTT).
amable Define el tipo de contenido la definición de la pista (y la fuente definida enorigen)se va a utilizar para.
Puede tener varios valores:
subtítulos Una transcripción o traducción del diálogo del elemento multimedia; adecuado para cuando el audio
está disponible para el usuario pero no lo entiende.
subtítulos Similar asubtitulos,pero también contiene efectos de sonido, pistas musicales y otra información de
audio relevante; adecuado para cuando la banda sonora no está disponible para el usuario.
descripciones Descripciones textuales del componente de video del recurso de medios; adecuado para cuando el
componente visual no está disponible.
capítulos Títulos de capítulo destinados a navegar por el recurso multimedia. Esto podría mostrarse a los
usuarios para que elijan de una lista para saltar al capítulo con el nombre apropiado en el video.
metadatos Pistas destinadas a ser utilizadas desde el script. El navegador normalmente no los mostrará al
usuario. Los dispositivos podrían usar estos datos para determinar cosas como si pueden
mostrarlos o no.
srclang Especifica el idioma al que apuntan los datos de la pista de texto enorigenestá adentro. Debe estar presente siamablese establece en
subtítulos
etiqueta Proporciona un título legible por el usuario para la pista, que se puede mostrar a los usuarios cuando se les pide
que elijan, por ejemplo, entre subtítulos en inglés o alemán.
defecto Si este atributo está presente, indica que esta pista es la que se utilizará como predeterminada si el usuario
no indica una preferencia.
rubí Define el contenido ruby (tramos breves de texto junto con el texto base, a menudo utilizados en documentos de Asia oriental para
indicar la pronunciación o proporcionar anotaciones breves. Consulte www.w3.org/TR/css3-ruby para obtener más información).
[hh:] mm: ss. Define una marca de tiempo en la que se activa una determinada parte del contenido dentro del texto de referencia. Similar al
msmsms texto estilo karaoke, que aparece paso a paso.
Tenga en cuenta que no hay una etiqueta final; el texto después de la marca de tiempo aparecerá a menos que encuentre otra marca
EL ELEMENTO DE PISTA185
El siguiente ejemplo muestra cómo unpistaEl elemento puede usarse en conexión con un
video para proporcionar subtítulos:
<controles de vídeo>
<controles de vídeo>
</vídeo>
Aquí, otropistase ha añadido una definición que apunta a unade.vtt file que contiene
subtítulos en alemán;srclangse establece enDelaware.
Note que eldefectoEl atributo se ha agregado a la definición de subtítulos en inglés, marcándolo
específicamente.
<controles de vídeo>
</vídeo>
Una vez que se han creado los diversos archivos WebVTT con el contenido que
desea, agregarlos al video apropiado es un proceso bastante simple.
Todo lo que acaba de leer sobre WebVTT suena bastante prometedor; sin embargo,
aunque algunos navegadores admiten lapistaelemento hasta cierto punto, actualmente
ningún navegador admite el formato de archivo WebVTT.
Sin embargo, no todo está perdido, porque hay varias bibliotecas de JavaScript disponibles que le
EL ELEMENTO DE PISTA187
UTILIZANDO WEBVTTY EL
ELEMENTO DE PISTAAHORA
Admite: subtítulos
- Subtitulador. https://github.com/cgiffard/Captionator
(versión CaptionCrunch)
SRTAPOYO
Aunque solo un puñado de reproductores de JavaScript admiten WebVTT, varios de ellos admiten archivos de subtítulos
SRT. Los reproductores que admiten WebVTT (Playr, LeanBack, Captionator y MediaElementJS) también admiten SRT,
además de los siguientes que solo admiten SRT:
- js_videosub.https://bitbucket.org/tagawa/jscaptions
- jscaptions.http://www.storiesinflight.com/js_videosub
- Kaltura.http://www.kaltura.org/project/HTML5_Video_Media_JavaScript_Library
EJEMPLO DE JUGADOR
Para usar Playr, primero debe descargarlo del sitio web de descargas de Playr en
https://github.com/delphiki/Playr. Una vez descargado, debe incluir el archivo CSS de
Playr y JavaScript en su documento web:
Otra parte importante para hacer que el contenido multimedia sea accesible son los controles. A
continuación, aprenderá qué tan accesibles son los reproductores predeterminados y qué puede hacer para
FIGURA 8.9 Los subtítulos se han colocado un 6 por ciento desde la parte superior FIGURA 8.10 El mismo video con subtítulos en alemán elegido.
(usando largo: 6%) y en negrita con <b>.
Como se mencionó anteriormente, es muy importante para la accesibilidad que se pueda acceder a
los controles multimedia desde el teclado. Los navegadores tienen su propio conjunto de controles
para los elementos multimedia, pero ¿qué tan accesibles son desde el teclado? Desafortunadamente,
por el momento, la respuesta no es muy. Opera parece ser el único navegador cuyo conjunto de
controles predeterminado es inmediatamente accesible desde el teclado. Puede pasar fácilmente de
un control a otro, usar la tecla Retorno para alternar el botón Reproducir/Pausar y usar las teclas de
flecha para controlar la barra de búsqueda y el control de volumen.
Por lo tanto, si desea que su contenido multimedia sea totalmente accesible en todos los
aprendió cómo agregar controles personalizados, y son estos controles personalizados los que ahora
Ya has usado el HTML botón elemento para implementar casi todos los controles. Utilizandobotón
automáticamente accesible desde el teclado. Ese solo hecho hace que el teclado de controles
personalizados sea accesible. Debido a que los controles también se enumeran en el mismo orden en
lógico requerido. Sin embargo, es posible que desee cambiar el orden de tabulación de la barra de
progreso y el botón Reproducir/Pausar. Lo más probable es que los usuarios quieran reproducir el
video primero, por lo que ese botón debería ser el primer control al que puedan acceder.
EL RANGO ELEMENTO
Elrango El elemento sería ideal para usar como una barra de progreso si el soporte
fuera mejor porque también proporciona automáticamente acceso al teclado, y la
barra de búsqueda funcionaría a través del teclado (las teclas arriba y abajo
alternarían la búsqueda cuando el elemento tiene el foco) sin más requisitos
dispara cuando se presiona una tecla, y luego actuar en consecuencia. Solo le interesa presionar una tecla en
checkKey(e.keyCode);
}, falso);
La función que se llama cuando se detecta una pulsación de tecla se llamaclave de verificación ()
función checkKey(código) {
si (código == 38) {//tecla de flecha arriba
video.tiempoActual += 0.5;
}
más si (código == 40) {//tecla de flecha hacia abajo
video.tiempoActual -= 0.5;
}
}
Elclave de verificación ()La función simplemente verifica el código de la tecla para ver si es la tecla
de flecha hacia arriba (código 38) o la tecla de flecha hacia abajo (código 40). Dependiendo de qué
tecla sea, el videotiempo actualel atributo se aumenta o disminuye en 0.05 (un valor de tiempo
arbitrario, pero parece un buen paso para mover el video hacia adelante o hacia atrás).
Y eso es. Ahora se puede acceder a las capacidades de búsqueda de la barra de progreso a través del
teclado con las teclas de flecha hacia arriba y hacia abajo cuando está enfocada. El resultado final hace que sus
controles personalizados de medios sean mucho más accesibles de lo que hubieran sido.
Con respecto a la accesibilidad, HTML5 ha avanzado y se ha expandido desde su definición inicial del
formato de archivo WebSRT a WebVTT. Dado que los proveedores de navegadores planean admitir
este formato, se formó un nuevo grupo de trabajo W3C con la intención de formalizar la
especificación WebVTT para que los navegadores comiencen a admitir. Entonces, con suerte, la
Aunque el soporte nativo actualmente es irregular, ahora puede usar las bibliotecas de
JavaScript existentes para agregar subtítulos a sus videos. Estas bibliotecas, sin duda,
aumentarán su funcionalidad y capacidades en el futuro.
También puede hacer que los controles de medios personalizados que creó en el Capítulo 5 sean más
HTML5 pueden interactuar con una de las características más emocionantes de HTML5, el lienzo.
TERMINANDO195
9
UTILIZANDO VIDEO
CONLIENZO
Además de la multimedia nativa, una
de las capacidades más comentadas
que HTML5 trae a la mesa web es
habilidad para dibujar y manipular gráficos usando JavaScript a través del
197
Traducido del inglés al español - www.onlinedoctranslator.com
EL LIENZOELEMENTO
La breve introducción del capítulo le dijo lo que puede usar ellienzoelemento para y que
en realidad es bastante inútil por sí solo. Sin embargo, es muy fácil de usar y solo tiene
dos atributos posibles, que se enumeran enTabla 9.1.
ATRIBUTO DESCRIPCIÓN
¡Eso es, de verdad! Por supuesto, también puede definir las dimensiones del lienzo usando
CSS o JavaScript. Y al igual que cualquier otro elemento HTML, la posición, los bordes, etc. del
lienzoEl elemento se puede definir a través de CSS.
Definición de unlienzoelemento en su documento web es tan simple como esto:
NAVEGADORAPOYO
Soporte del navegador para ellienzoEl elemento y la API que lo acompaña son bastante buenos: todos los principales
navegadores los admiten. Internet Explorer 8 y versiones anteriores, por supuesto, no los admiten, pero puede usar la
biblioteca de JavaScript ExplorerCanvas de Google (http://code.google.com/p/explorercanvas) para brindar compatibilidad con
lienzo y API a esos navegadores.
EL API 2D
Aunque el lienzoelemento es parte de la especificación HTML5, la API 2D que usa
para dibujar en él era, pero ya no es, parte de la especificación. Se movió a su
propia especificación en el W3C (http://dev.w3.org/html5/2dcontext).
La API 2D tiene una gran cantidad de funciones y funcionalidades diferentes, que
están más allá del alcance de este capítulo. Sin embargo, aprenderá y usará algunas de
estas funciones en los ejemplos a lo largo del capítulo. Por supuesto, lo alentamos a
buscar uno (o más) de los muchos libros sobre el tema.
El lienzo contiene un contexto de dibujo, que es donde tiene lugar el dibujo real. Por
el momento, solo existe un contexto 2D, pero la especificación de HTML5 menciona que
es probable que haya un contexto 3D disponible en el futuro (¡no se indica la fecha, por
supuesto!).
Para utilizar el contexto de dibujo 2D, debe controlarlo. Pero primero necesitas
manejar ellienzoelemento, que se hace fácilmente usando uno de los
funciones estándar de JavaScript selector de consulta() o getElementById():
Y ahí tienes tu identificador de contexto, que puedes usar para dibujar en el lienzo.
Lo harás a continuación usando elllenarRect()función.
El llenarRect(x, y, w, h)La función dibuja un rectángulo simple en el lienzo y toma
cuatro argumentos: las coordenadas X e Y donde se colocará el rectángulo (su
esquina superior izquierda) y el ancho y alto del rectángulo.
LA API 2D199
FIGURA 9.1Un rectángulo simple
dibujado en el elemento de lienzo
usando elllenarRect()función.
El siguiente código dibuja un rectángulo negro (el color predeterminado) de 150 × 100
píxeles en las coordenadas X e Y (20,20):
Digamos, por ejemplo, que desea permitir que los usuarios tomen capturas de pantalla de su
video mientras se reproduce y mostrarlas en otro lugar, por ejemplo, en la página web al lado
del video. Puedes usar unlienzocomo la superficie de dibujo en la que colocar la imagen de la
captura de pantalla.
¿Suena un poco complicado? Bueno, no lo es. Solo necesita usar dos de las
funciones de la API de JavaScript:llenarRect()y otro sobre el que leerá en un momento.
Antes de tomar la captura de pantalla, primero debe configurar el video y un botón para tomar
<controles de vídeo>
</vídeo>
<lienzo></lienzo>
<button id=”snap”>Tomar captura de pantalla</button>
Fíjate que no hay ancho yaltura especificado en el lienzoelemento todavía; eso se hará a
través de JavaScript más adelante, ¡así que no te preocupes! También agregará una función al
al hacer clicevento de labotónelemento; de nuevo, esto sucederá un poco más adelante.
También se definen algunas otras variables para su uso posterior: por ejemplo, elw (ancho) yh (
altura), cuyos nombres hacen que los datos que contendrán sean bastante obvios.
En este ejemplo, creará capturas de pantalla más pequeñas que el video. Esto demuestra
que es posible trabajar con capturas de pantalla que tienen un tamaño diferente al del video
original.
h = parseInt(w/proporción, 10);
lienzo.ancho = w;
lienzo.altura = h;
}, falso);
Cuando elmetadatos cargados se genera el evento, se calcula la proporción del video. Elw la
variable se configura para que sea (arbitrariamente) 100 menos que el ancho real del video, y
el h la variable se establece en cualquier proporción que el valor en w es a la proporción del
video. Ellienzoelementos ancho yaltura luego se ajustan a los valores calculados en w yH.
apps/current-work/multipage/the-canvas-element.html#drawimage.
función ajustar() {
context.fillRect(0, 0, w, h);
context.drawImage(video, 0, 0, w, h);
}
Eso es todo lo que se necesita para tomar una captura de pantalla del video. Mientras se reproduce el
video, puede seguir haciendo clic en el botón "Tomar captura de pantalla" y se tomará una nueva captura de
La mayor parte del esfuerzo de codificación consistió en configurar elvídeo, botón, ylienzo
elementos, mientras que el trabajo real solo tomó dos líneas, que es la mayor ventaja delienzoy
es un poco genial.
A continuación, ampliará este ejemplo copiando el video completo en ellienzo
elemento mientras se reproduce.
En el ejemplo anterior, vio lo fácil que es tomar capturas de pantalla de un video mientras se
reproduce. Pero, ¿qué pasaría si quisiera ir un poco más allá y actualizar la imagen copiada
automáticamente mientras se reproduce el video principal, en efecto, creando una copia
exacta del video, pero más pequeña? Todo lo que necesita hacer es usar el mismo código del
ejemplo anterior y agregar oyentes para varios eventos que actualizan la imagen en ellienzo
elemento.
Recuerde del Capítulo 5 los eventos que se generan cuando un video se está reproduciendo, pausando,
video.addEventListener('reproducir', función() {
establecerIntervalo(“ajustar()”, 33);
}, falso);
Este código hace que elquebrar()función para actualizar automáticamente el contexto de dibujo
del lienzo con una nueva captura de pantalla del video, lo que hace que parezca que realmente se
está reproduciendo (Figura 9.3).
Y eso es todo lo que hay que hacer. Cuando reproduzca el video, actualizará la imagen en
el lienzo mientras se reproduce, incluso si salta hacia adelante (Figura 9.4). Y cuando lo pausa
o finaliza, la imagen del lienzo dejará de actualizarse.
En una línea similar, pero un poco más complicada, a continuación, hará que la copia de
video aparezca en escala de grises, a diferencia del color original. Para hacer esto, debe
manipular los píxeles reales del video, lo que, una vez más, no es tan complicado como podría
parecer.
Otra cosa útil que puede hacer con los objetos dentro del contexto del dibujo del lienzo es
alterar los píxeles individuales. Eso es precisamente lo que hará en este ejemplo modificando
los píxeles del vídeo para que aparezcan grises en lugar de en color.
Construirá sobre el código creado en el primer ejemplo de este capítulo. Entonces, lo
primero que debe hacer es definir un segundo lienzo para que se realicen las
manipulaciones. Esto se usa como un lienzo de fondo, que usará para trabajar antes de
dibujar el resultado final en el lienzo de visualización real. El lienzo de fondo solo existirá
dentro del código JavaScript, no como un elemento HTML en la página y, por lo tanto, el
usuario no lo verá.
Para hacer esto, simplemente crea una nueva instancia dellienzoelemento usando el
estándarcrearElemento()Función JavaScript:
Una vez que se ha creado esta instancia, también necesita un controlador para su contexto de
dibujo 2D para poder usarlo:
h = parseInt(w/proporción, 10);
lienzo.ancho = w;
lienzo.altura = h;
bgCanvas.ancho = w;
bgCanvas.altura = h;
}, falso);
ATRIBUTO DESCRIPCIÓN
datos Una matriz bidimensional que contiene la información de píxel real para
cada píxel. Cada píxel tiene cuatro entradas enumeradas secuencialmente;
los valores para los píxeles son rojo, verde, azul y canal alfa.
Como probablemente habrás adivinado, será a través de la datos atributo que podrá
modificar la información de píxeles de la imagen.
La otra función,ponerImagenDatos(imagenDatos, x, y),pinta los datos de píxeles
especificados endatos de imagenen las coordenadas indicadas porXyy.Usando esta
información, ¡hagamos el video gris!
bgContext.drawImage(video, 0, 0, w, h);
var pixelData = bgContext.getImageData(0, 0, w, h);
for (var i = 0; i < pixelData.data.length; i += 4 ) {
var r = pixelData.datos[i];
var g = pixelData.datos[i+1];
var b = pixelData.data[i+2];
var color medio = (r + g + b) / 3;
pixelData.data[i] = promedioColor;
pixelData.data[i+1] = promedioColor;
pixelData.data[i+2] = promedioColor;
}
context.putImageData(pixelData, 0, 0);
}
bgContext.drawImage(video, 0, 0, w, h);
Al igual que en el ejemplo anterior, debe tomar una instantánea del video y
dibujarla en el lienzo. Haga lo mismo aquí, pero esta vez dibuje la imagen en el
contexto de fondo en lugar del contexto de visualización.
A continuación, obtiene los datos de píxeles de la imagen del contexto de fondo que
acaba de dibujar. Estarás manipulando los datos devueltos en elpixelData objeto:
A continuación, debe recorrer cada elemento en el pixelDatas matriz de datos, que contiene la
información real de cada píxel. Como se menciona en la Tabla 9.2, la matriz de datos es una matriz
bidimensional con cuatro elementos de datos para cada píxel. Es por esta razón que el contador de
bucles está configurado para agregar 4 por cada iteración:
Para cada píxel, debe extraer la información roja, verde y azul relevante para ese
píxel. Los datos del canal alfa no son necesarios en este ejemplo, por lo que puede
ignorarlos con seguridad:
Ahora que tiene esta información, necesita convertirla a gris. Hay varios
métodos disponibles para hacer esto, el más simple de los cuales es calcular el
color promedio en los tres valores:
Luego configura cada valor rojo, verde y azul para cada uno de los píxeles para que sea este
pixelData.data[i] = promedioColor;
pixelData.data[i + 1] = promedioColor;
pixelData.data[i + 2] = promedioColor;
context.putImageData(pixelData, 0, 0);
de "origen cruzado" (es decir, de otro sitio web), por lo que la API le prohibirá
origen cruzado existe para evitar que los archivos de un dominio accedan a la
video.addEventListener('reproducir', función() {
setInterval(“hacerlogris()”, 33);
}, falso);
Y listo, la copia de video se muestra en el lienzo, pero esta vez en escala de grises (
Figura 9.5).
Hay mucho más que puede hacer con el lienzo y la manipulación de píxeles. Este
capítulo proporcionó solo una pequeña idea de lo que puede lograr. Si lo que ha leído
ha despertado su interés, hay muchos buenos tutoriales en línea (p. ej.,
www.html5rocks.com/en/tutorials/#canvas) y libros disponibles con los que puede hacer
un seguimiento, y lo animo a que lo haga. . ¡Ve y juega!
simples como tomar capturas de pantalla y mantener una copia de un video en reproducción
sincronizado con una versión en el lienzo. También puede manipular los píxeles obteniendo los datos
El próximo capítulo también se enfoca en video e imágenes, pero esta vez con otro
formato que existía antes de HTML5 pero que parece haber pasado a primer plano desde que
HTML5 se ha vuelto más popular. Los gráficos vectoriales escalables (SVG) son los siguientes.
TERMINANDO213
10
UTILIZANDOVIDEO
CONSVG
Scalable Vector Graphics (SVG) es un
lenguaje que le permite definir gráficos
vectoriales bidimensionales para
mostrar en sus documentos web. Escrito en XML y compatible con todos los
Este capítulo explora brevemente SVG y cómo puede usarlo para lograr una
videoelemento.
215
UNA BREVEINTRODUCCIÓNASVG
La especificación SVG no forma parte de HTML5, pero ha estado en desarrollo con el W3C desde 1999
como un estándar abierto. La versión 1.1 es la recomendación actual desde 2001. Una nueva versión,
la 1.2, es un borrador de trabajo reciente, pero es la versión 1.1 la que se discutirá principalmente en
este capítulo.
Como se mencionó en la introducción del capítulo, SVG está escrito en XML y el navegador
usa esta definición XML para representar la forma, el texto o la imagen requeridos. En efecto,
el archivo XML contendrá instrucciones de dibujo para que el navegador las interprete y utilice
para representar los gráficos requeridos, por ejemplo, coordenadas de puntos para dibujar
líneas, texto para incluir y diferentes curvas y formas. Por supuesto, esto significa que los
únicos datos que el navegador debe descargar para mostrar los gráficos en cuestión son un
archivo de texto XML en lugar de archivos de imagen potencialmente más grandes.
Otra ventaja de SVG es que los gráficos producidos son gráficos vectoriales en lugar de
gráficos rasterizados, por lo que el navegador escalará la imagen limpiamente dentro del
espacio disponible en caso de que sea necesario.
RASTERYGRÁFICOS VECTORIALES
Una imagen de gráficos de trama, o mapa de bits, es una estructura de datos que contiene
información de píxeles para un gráfico. Debido a que el gráfico definido por esta
información de píxeles depende de toda la información de píxeles disponible, depende de la
resolución en la que se creó la imagen original. Por esta razón, no se amplía muy bien
porque no tiene suficiente información de píxeles. para el nuevo tamaño, lo que conduce a
una pérdida de calidad. Los gráficos de trama también dan lugar a archivos de gran tamaño
porque contienen información sobre cada píxel de la imagen.
Los gráficos vectoriales, por otro lado, se definen a través de información geométrica,
como puntos, curvas, líneas, formas, etc., todo lo cual se basa en ecuaciones matemáticas.
La herramienta que dibuja la imagen, en este caso un navegador web, utiliza esta
información geométrica para volver a dibujar el gráfico, lo que le permite crear la imagen
de mejor calidad posible dada la resolución de la pantalla. Los archivos de gráficos
vectoriales tienen un tamaño más pequeño que los archivos de gráficos de trama porque
solo contienen fórmulas para crear las formas requeridas en lugar de información de
píxeles individuales.
FIGURA 10.1La diferencia de calidad
entre los gráficos de trama (arriba) y Figura 10.1ilustra la diferencia entre gráficos rasterizados y vectoriales cuando
los gráficos vectoriales (abajo) se amplía una imagen.
cuando se amplían.
Debido a que existe desde hace mucho tiempo, y con Internet Explorer finalmente uniéndose con la versión 9,
SVG ahora es compatible con las últimas versiones de los principales navegadores. Sin embargo, como se
mencionó anteriormente, la especificación SVG es enorme, por lo que diferentes partes son compatibles con
diferentes navegadores.
EL ELEMENTO SVG
También puede utilizar elSVGpara definir el código SVG que se usará en otras partes del
documento para funciones como enmascaramiento y animación. Verá que se usa de esta
manera más adelante en algunos ejemplos de este capítulo.
Las últimas versiones de todos los principales navegadores actualmente admiten laSVG
elemento, a excepción de Opera, que lo admitirá en la versión 12. Puede ver una tabla de
soporte de navegador actualizada para elSVGelemento en http://caniuse.com/svg-html5.
Echemos un vistazo rápido a algunos de los elementos SVG más simples que están disponibles
para su uso.
NOTAS:Si desea que se muestre una definición SVG en Opera 11.50, puede incrustarla como un archivo
SVG externo y funcionará bien, como lo hará en todos los demás navegadores principales.
TEXTO SVG
<svg>
</svg>
Este código define la posición del texto usando valores X e Y, y también usa elllenar atributo para
establecer el color del texto en un color rojizo. El tamaño y la familia de la fuente se establece
atributos
Figura 10.2muestra cómo se representa el texto resultante en Firefox y Safari.
CÍRCULO SVG
Una de las formas más simples que podría querer dibujar a través de SVG es un círculo. Esto
es relativamente fácil porque SVG proporciona lacirculo elemento para su conveniencia:
<altura svg=”200”>
<circule cx=”100” cy=”100” r=”100” fill=”#0e8c3a” />
</svg>
Este código define la posición del círculo usando las coordenadas X e Y pero esta
vez usando el cx ycy atributos El radio del círculo se establece en 100 usando el
r atributo. Una vez másllenar se utiliza para especificar el color del círculo, en este caso un
tipo de verde.
Figura 10.3 muestra cómo se ve el círculo en un navegador.
SVG ELIPSE
También puede dibujar una elipse, que es un círculo alargado en una dirección. Para
dibujar una elipse, además de las posiciones X e Y de la forma, también debe especificar
el ancho y la altura del radio:
<altura svg=”200”>
<elipse cx=”100” cy=”100” rx=”100” ry=”50” fill=”#0276fd” />
</svg>
El llenar el color aquí se establece en un tono de azul, y el ancho y la altura del radio
ahora se definen usando elrecetayryatributos respectivamente.
Nota: Por supuesto, podría utilizar elelipseelemento para dibujar un círculo si
establece elrecetayryatributos al mismo valor, pero obviamente es mejor usar elcirculo
elemento porque para eso está!
Puedes ver cómo se representa esta elipse simple enFigura 10.4.
Los ejemplos anteriores muestran solo una pequeña muestra de cómo puede
dibujar formas y texto usando SVG. Hay mucho más que puede hacer con SVG, por lo
que lo animo a que busque más información y juegue con ella.
A continuación, utilizará este conocimiento básico de SVG para interactuar con HTML5video
elemento.
En el Capítulo 6, aprendió cómo agregar una máscara sobre un video en los navegadores WebKit
video a través de SVG. Simplemente defina un gráfico SVG como máscara y úselo en su video.
Nota: El uso de SVG en línea (es decir, con la definición de SVG dentro del documento web a
Para este primer ejemplo, agregará una máscara de texto sobre el video. El video que se está
Para definir una máscara en SVG, simplemente enciérrela dentro del máscaraelemento. Además,
dale lamáscaraelemento un identificador único de "vmask", porque deberá hacer referencia a él más
adelante:
<svg>
<id de máscara=”vmask”>
</máscara>
</svg>
PROPINA:Una gran ventaja de SVG es que los elementos que define dentro
de él están disponibles a través del DOM (Document Object Model) para
referenciarlos y usarlos más tarde en SVG y por JavaScript o CSS.
Para que el código realmente haga algo, debe aplicar la máscara al videoelemento,
lo que haces a través delmáscarapropiedad en la definición de CSS para el video
elemento:
video {
máscara:url('#vmask');
<máscara>
font-weight=”negrita” font-family=”Verdana”
pags
fill=”blanco”>H5</text>
</máscara>
</defs>
<usar xlink:href=”#texto” />
</svg>
Debido a que este archivo SVG es un archivo XML, coloca el encabezado XML en la parte superior:
QUÉA¿DTD?
El defsEl elemento se usa para contener cualquier definición de SVG que no se representará
definiciones SVG en línea del ejemplo anterior; la única excepción es que eltextoelemento recibe el
identificador único "texto". Este identificador se utiliza en la siguiente línea del archivo:
video {
máscara:url('#vmask');
- máscara-webkit:url('texto.svg');
Y listo, la máscara de texto ahora también funciona en Safari 5.1 (Figura 10.6)! Debido a que
Chrome también es un navegador WebKit, probablemente se esté preguntando si esta máscara
simplemente se escribe sobre el video (Figura 10.7). Con suerte, esto se solucionará en una versión
Ahora que aprendió cómo aplicar una máscara de texto a un video HTML5, puede usar los
mismos principios para aplicar otra máscara SVG, esta vez usando una forma.
NOTA:En los ejemplos provistos, puede notar que los controles de video
todavía están disponibles para hacer clic debajo de la máscara SVG (¡si
puede adivinar dónde están ubicados!). Esto podría ser bastante útil
Anteriormente en este capítulo, aprendió que puede usar SVG para definir y dibujar una
elipse. Al igual que eltextoelemento, también puede utilizar el elipseelemento para definir una
máscara que puede colocar sobre su video HTML5.
Los principios son, por supuesto, los mismos que en el ejemplo de máscara de texto anterior. En
este ejemplo, definirá la máscara de elipse en un archivo SVG externo. Vale la pena aprender a hacer
referencia a un archivo de este tipo tanto para Firefox como para Safari.
El video que usará en este ejemplo es el mismo que el ejemplo anterior:
<máscara id=”eMask”>
</defs>
<usar xlink:href=”#elipse”/>
</svg>
de queURLEl valor también hace referencia al identificador de la máscara, "eMask", así como al
archivo SVG:
video {
máscara:url('elipse.svg#eMask');
- webkit-máscara-caja-imagen:url('elipse.svg');
}
Y eso es. Puedes ver cómo se representa esto en Firefox y Safari enFigura 10.8.
Como puede imaginar, puede definir cualquier forma en SVG y luego usarla como
una máscara para un video HTML5 si desea mostrar solo parte del video para lograr el
efecto deseado.
Una vez que haya definido su máscara, es posible que también desee animarla para obtener un efecto adicional.
SVG también le permite definir animaciones en los gráficos que ha definido y, dado que
las máscaras son simplemente gráficos, también puede aplicarles animaciones.
NOTA:Los ejemplos de animación también podrían usar SVG en línea para definir las
máscaras SVG, pero solo funcionarían para Firefox. Por lo tanto, todas las definiciones de
La misma declaración de video utilizada en los dos ejemplos anteriores se utiliza nuevamente
<máscara id=”eMask”>
</elipse>
</máscara>
</defs>
<usar xlink:href=”#elipse”/>
</svg>
También hay unanimarelemento, que, por supuesto, define la animación utilizada: FIGURA 10.9El radio X de la
máscara de elipse se anima de 100
<nombre del atributo animado = "rx" dur = "3s" valores = "100; 150; 100" (A) a 150 (C) a través del estado de
Con el archivo SVG definido, lo único que queda por hacer es asignarlo al video utilizando
las propiedades CSS que ya ha utilizado, a sabermáscaray -webkit-máscara-caja-imagen:
video {
máscara:url('animar-elipse.svg#eMask');
- webkit-mask-box-image:url('animate-ellipse.svg');
}
Figura 10.9le da una idea aproximada de cómo podría funcionar esta animación en
la práctica. Llevemos esta animación un paso más allá y veamos cómo puede crear
una animación que anime la máscara de una posición a otra en lugar de animar una
forma estática.
El ejemplo anterior le mostró cómo se pueden animar los atributos de una máscara
SVG. También puede animar toda la máscara, moviéndola a lo largo de una ruta
predefinida, que es lo que hará en este ejemplo.
Usarás el mismo código de video en este ejemplo y, una vez más, solo funcionará en
Firefox y Safari.
La máscara en este ejemplo es un círculo pequeño, y la animación moverá la máscara
circular desde la cabeza del primer loro hasta la cabeza del otro loro en un movimiento lineal,
mostrando cada uno por turno.
Entonces, una vez más, el archivo SVG,círculo-animado-movimiento.svg, es donde ocurre la
acción:
<máscara id=”cMáscara”>
</circulo>
</máscara>
</defs>
<usar xlink:href=”#círculo”/>
</svg>
usas el sendero elemento para definir una ruta predeterminada para la animación. Este en
particular tiene un identificador de "ruta" y elDEl atributo contiene los datos de ruta reales. Los datos
de la ruta pueden contener una serie de definiciones para la ruta de la ruta, comenzando con un
comando "mover", que usaMETROpara establecer un nuevo punto para la animación, muy parecido a
levantar un bolígrafo de una página y colocarlo en otro lugar. En este ejemplo, el punto de
NOTA:El ejemplo de animación utiliza la definición de ruta más simple posible. Puede definir
otras rutas más complicadas que sigan las curvas de Bézier y similares. Puede leer más sobre
los datos de ruta en www.w3.org/TR/SVG11/paths.html#PathData.
el animateMotion elemento:
El animateMotion elemento aquí tiene una serie de atributos. Elcomenzar atributo especifica
cuándo comenzará la animación; aquí se establece en 1 s, por lo que hay un retraso de 1
segundo antes de que comience la animación. Eldur El atributo indica cuánto tiempo tomará la
animación, en este caso 4 segundos.
El llenar atributo se establece encongelar,que le dice a la animación que permanezca en la
posición en la que terminó cuando se completa la animación.
El ruta mEl elemento informa al navegador que la ruta que seguirá la animación es
la ruta predefinida con el identificador de "ruta", que es la ruta que definiste
anteriormente.
Todo lo que queda por hacer ahora es asignar el SVG al video:
video {
máscara:url('círculo-animado-movimiento.svg#cMask');
- máscara-webkit:url('círculo-animado-movimiento.svg');
Figura 10.10muestra cómo se vería esto cuando se ve en Firefox o Safari. Hay muchas
cosas que puede hacer con las máscaras SVG, y los ejemplos anteriores muestran solo una
pequeña parte de lo que es posible. Usando los ejemplos anteriores como punto de partida,
asegúrese de experimentar con máscaras SVG e intente mejorar sus videos web.
Antes de dejar de pensar en el video SVG y HTML5, veamos otra interesante
capacidad de los filtros de video SVG y HTML5.
SVG tiene una gran cantidad de filtros que puede aplicar a los elementos gráficos SVG. Aunque
la especificación W3C no lo especifica, Mozilla ha ido un paso más allá y le permite aplicar
filtros SVG también a elementos multimedia HTML5, específicamente elvideoelemento. Esto
puede generar algunos efectos muy interesantes, pero debe usarse con precaución porque los
filtros SVG actualmente solo funcionan en elementos multimedia HTML5 en Firefox. Esto
podría cambiar en el futuro, pero no hay garantía de que así sea.
Debido a que solo Firefox admite estas funciones en elementos multimedia HTML5, los
ejemplos de esta sección usan SVG en línea y se dirigen solo a ese navegador.
EL FILTRO FECOLORMATRIX
El feColorMatrix fiEl filtro le permite aplicar una transformación matricial al objeto gráfico SVG
en cuestión. Estas matrices pueden ser bastante complejas y un poco más allá de mí para ser
honesto, pero hay una serie de configuraciones predefinidas que puede aplicar a través del
escribeatributo. Los siguientes cuatro ejemplos lo guían a través de cada configuración,
mostrándole cómo se aplica y cuál es su efecto.
<svg>
<definiciones>
<filtro. ....>
..
</filtro>
</defs>
</svg>
SATURACIÓN DE COLOR
La aplicación del filtro de matriz de saturación de color le permite saturar los
colores de su video. Puede proporcionar un valor a lavaloresatributo, que es un
único número real entre 0 y 1 que le permite ajustar la saturación del color:
<filtro id=”saturar”>
<feColorMatrix type=”saturate” valores=”0.2” /> </
filter>
Este código aplica una saturación de 0.2, cuyo resultado se puede ver en
Figura 10.11.
ROTACIÓN DE TONO
<filtro id=”hueRotate”>
<feColorMatrix type=”hueRotate” valores=”50” />
</filtro>
LUMINANCIA A ALFA
Aplicando elluminancia a alfaEl tipo de matriz de color convierte los canales rojo, verde y
azul (RGB) de los píxeles de video en un valor de luminancia y luego establece el canal
alfa de salida de cada píxel según el resultado (Figura 10.13). En efecto, esto establece
los valores de transparencia de los píxeles individuales en función de la luminancia o el
brillo relativo de los píxeles. No hay atributos para este tipo:
<filtro id=”luminanceToAlpha”>
<feColorMatrix type=”luminanceToAlpha” />
</filtro>
EN BLANCO Y NEGRO
Para convertir el video a blanco y negro, debe proporcionar los valores reales de la
matriz alfiltrarelemento a través de lavaloresatributo:
<filtro id=”blackAndWhiteMatrix”>
<feColorMatrix type=”matriz” valores=”0.3 0.3 0.3 0 0
0,3 0,3 0,3 0 0
0,3 0,3 0,3 0 0
0 0 0 1 0” />
</filtro>
aplicar su propia transformación de matriz a los píxeles de video. Para usarlo de manera efectiva,
deberá tener una comprensión de la multiplicación de matrices, que me temo hace mucho tiempo
EL FILTRO FEGAUSSIANBLUR
El feGaussianBlur fiEl filtro le permite agregar un desenfoque al video. Se necesita un atributo,
externo. Pero eso está estrictamente relacionado con el contenido SVG, no con HTML, por lo que se considera
ENVASE ARRIBA
Ahora ha tenido una introducción básica a SVG. SVG existe desde hace mucho tiempo y,
afortunadamente, la gente está empezando a darse cuenta de que puede ser beneficioso para
la carga rápida de sus sitios web y, por supuesto, para la reproducción fluida de gráficos
simples.
Aprendió cómo puede usar SVG para interactuar con su video HTML5 como máscaras o filtros.
También debe recordar que no todos los navegadores son totalmente compatibles con esta
interacción y, por lo tanto, debe usar SVG con precaución.
En el próximo capítulo, verá el futuro de HTML5 en relación con la multimedia y qué
otras funciones y API posiblemente estarán disponibles para su uso pronto.
TERMINANDO237
11
FUTUROCARACTERÍSTICAS
Aunque este es el capítulo final del
libro, de ninguna manera es el capítulo
final con respecto a HTML5 y multime
Ha aprendido acerca de muchas funciones de audio y video de HTML5, pero
nuevas funciones relacionadas que serán de gran beneficio una vez que estén
239
AUDIO API
A medida que haya leído este libro, probablemente se habrá dado cuenta de que se habló más sobre
el video que sobre el audio. Esta sección trabaja para restaurar ese equilibrio al explorar las API que
afectan solo al audio (aunque la información también se aplica al video, por supuesto, ¡porque el
audio existe en la mayoría de los videos!).
Por el momento, hay disponibles dos API de JavaScript propuestas que le permiten
leer y escribir datos de audio sin procesar. Una es la Web Audio API, que fue creada por
Google y actualmente está siendo discutida por el W3C Audio Working Group. Este
Grupo de Trabajo fue creado en marzo de 2011, y su misión autorizada es:
“desarrollar una API de script del lado del cliente que agregue capacidades de audio más avanzadas
Mozilla también ha creado una API de audio, que es más simple que la API de audio web y
la ha enviado con Firefox 4 y versiones posteriores (https://wiki.mozilla.org/Audio_ Data_API).
La API de datos de audio de Mozilla es una extensión de la API de medios HTML5 sobre la que
leyó en el Capítulo 5.
Como probablemente pueda adivinar, debido a que estas API han sido creadas por
diferentes proveedores de navegadores, las partes de sus respectivas API que funcionan
actualmente solo lo hacen en sus respectivos navegadores. Sin embargo, esto no es un gran
problema en este momento, porque solo son API propuestas y aún no se ha decidido nada.
Veamos primero la API de datos de audio de Mozilla.
La API de datos de audio de Mozilla proporciona una extensión para acceder mediante programación y/o
A medida que se reproduce el audio (ya sea a través de un audio o videoelemento) y decodificados, los datos de
muestra se almacenan en un framebuffer. Cuando este framebuffer tiene datos disponibles para su uso, el
MozAudioDisponible se levanta el evento. Los datos de muestra contenidos en el búfer de fotogramas son
datos de audio sin procesar, que pueden o no haber sido reproducidos en ese momento.
también puede usar este evento. Una vez que se genera, la API de datos de audio tiene tres nuevos
atributos a los que se puede acceder y que contienen información vital para los datos de audio sin
procesar:
Veamos un ejemplo que muestra los datos proporcionados por estos tres atributos.
Primero defines elaudio elemento y un simpledivisión para contener la información de audio:
<div id=”información”></div>
Cuando se cargan los datos de audio, accede a los datos mediante la API:
API DE AUDIO241
FIGURA 11.1 La frecuencia de
muestreo, los canales y la duración
del búfer del archivo de audio se
muestran en la pantalla en Firefox 6.
En este ejemplo de código, los identificadores del audio ydivisión se obtienen los
elementos. Cuando elmetadatos cargados se genera el evento, los datos en los tres atributos:
mozSampleRate, mozChannels, ymozFrameBufferLength—se lee, y sus datos se muestran en
número flotante.
Ampliemos el ejemplo anterior agregando otro división para mostrar los datos de
framebuffer y luego definir una nueva función, obtener datos de búfer, que adjuntas a la
MozAudioDisponible evento. ElgetBufferData La función simplemente muestra el primer
elemento de la matriz de búfer de datos en la pantalla:
<div id=”información”></div>
Los datos que se muestran en pantalla son los valores flotantes de los datos de audio, como se
También puede utilizar la API de datos de audio para escribir en unaudio elemento.
Puede llamar a estos métodos en unaudio elemento, que puede ser un elemento
HTML existente para el que haya obtenido un identificador (como lo hizo en los
ejemplos anteriores), o puede crear uno dinámicamente usando elAudio()constructor.
El siguiente ejemplo genera y reproduce un tono simple cuando el usuario hace clic en el botón
Reproducir:
<button onclick="reproducir()">reproducir</button>
API DE AUDIO243
El tocarentonces la función se declara como:
función reproducir () {
audioOut.mozSetup(2, 44100);
var muestras de audio = new Float32Array(88200);
}
salida de audio.mozWriteAudio(muestras de audio);
Este ejemplo de código crea un nuevo audio y luego lo configura para que tenga dos
canales de audio a una frecuencia de muestreo de 44100. Luego se define una matriz
flotante con el doble de muestras, y esta matriz se completa con datos de onda
sinusoidal simple (se eligió el divisor de 60 al azar).
Cuando un usuario hace clic en el botón Reproducir, se produce un solo tono largo. No
tiene sentido intentar mostrarte esto en una imagen, así que tendrás que probar el ejemplo
en Firefox o ir a www.html5multimedia.com y escucharlo.
Aunque es muy simple, este ejemplo le muestra cómo puede generar
datos de audio con la API. También puede leer los datos de unaaudio
elemento, manipúlelo (quizás desee cambiar el tono) y luego escríbalo a otro
audio elemento. Todo esto y más es posible a través de esta sencilla API de
datos de audio.
Veamos ahora la API de audio web más compleja que actualmente está
considerando el W3C.
El borrador de especificación para Web Audio API es bastante grande y complejo, con
una amplia gama de diferentes interfaces y métodos definidos para brindarle una gran
cantidad de control sobre su audio.
Esta sección solo le brinda una breve introducción a la API, por lo que no leerá
sobre todo lo que la API tiene para ofrecer. Pero puede leer la especificación en https://
dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html.
El objetivo de Web Audio API es admitir las siguientes funciones:
API DE AUDIO245
HABILITACIÓNEL API DE AUDIO WEBEN CROMO
Por el momento, solo Chrome y las compilaciones especiales de Safari admiten bits de Web Audio API. Si desea
jugar con la API, su mejor opción es usar la última versión de Chrome; sin embargo, la API está desactivada de
forma predeterminada.
Para habilitar la API de audio web en Chrome, escribasobre:banderasen la barra de direcciones y navegue a esa página. Busque la lista de
Web Audio y haga clic en elPermitirEnlace. Luego, desplácese hacia abajo hasta la parte inferior de la página y haga clic en el botón
Relanzar ahora.
Una vez que Chrome se haya reiniciado, se habilitará la API de audio web.
Similar al lienzo, sobre el que leyó en el Capítulo 9, la Web Audio API contiene un
contexto para manipular cualquier dato de audio. Es este contexto el que debe crearse
para poder usar la API y se hace a través de laContexto de audio()constructor.
Una de las principales características de la API es la idea de enrutamiento modular, que
permite conexiones arbitrarias entre diferentesnodo de audioobjetos—los bloques de
construcción de unContexto de audioobjeto. Cadanodo de audiopuede tener entradas y/o
salidas, que podrían ser un flujo de datos de audio generados o un archivo de audio. Como se
mencionó anteriormente, unnodo de audiose puede conectar a cualquier otronodo de audio,y
puede llamar a diferentes métodos en los diferentes nodos para procesar los datos dentro de
ellos de diferentes maneras a través de varias interfaces. A través de estas interfaces, puede
cambiar los volúmenes denodos de audio,adjuntarlos aaudio o videoelementos, aplicarles filtros,
aplicarles efectos lineales y/o espacializarlos. De hecho, el procesamiento se realiza a través de
nodos de audioy el procesamiento se hace paraNodos de audio.
No se puede negar que Web Audio API será un compañero útil para HTML5 Media API.
Con suerte, las discusiones del Grupo de Trabajo de Audio del W3C darán como resultado
tomar las mejores características de la API de datos de audio y la API de audio web de Mozilla,
y crear una API de audio aún más poderosa. ¡Probablemente sea la primera vez que la palabra
sinergia viene a la mente en el contexto correcto!
Pasemos del audio al video y veamos cómo se pueden facilitar las
videoconferencias y funciones similares, comenzando con la API getUserMedia.
Cuando apareció por primera vez la especificación HTML5, se identificaron una serie de
características como "post-HTML5", lo que significa que eran adiciones que debían tenerse en cuenta
para la próxima generación de desarrollo.
Una de estas características era la capacidad de acceder a dispositivos externos en una
computadora o teléfono (las tabletas no eran realmente de uso general en ese momento, ¡aunque
definitivamente son relevantes ahora!), como una cámara web o un micrófono. La idea inicial que se
planteó fue tener un HTMLdispositivoelemento que podría usarse, probablemente con la ayuda de
una API, para acceder a un dispositivo y permitir la toma de fotografías y conferencias web.
La API getUserMedia todavía está en desarrollo, por lo que en realidad hay poco que
mostrar en este momento. En marzo de 2011, Opera implementó una prueba de esta nueva
API, pero se requiere una compilación especial de Opera Mobile para Android para la prueba
(http://my.opera.com/core/blog/2011/03/23/webcam -orientación-vista previa).
Cuando se requiere un dispositivo específico, por ejemplo, una cámara web, para realizar
una determinada tarea, se debe pedir explícitamente al usuario que permita el acceso al
dispositivo (el navegador implementará esto y usará algo así como una ventana emergente
con sí /sin botones).
La API contiene actualmente un método:obtener medios de usuario—que acepta los
siguientes parámetros:
- opcionesUna lista separada por comas de tokens de cadena separados por espacios,
– video.Los medios deben incluir datos de video; este token puede ir seguido
de "usuario" o "entorno" para indicar las cámaras preferidas para usar. La
especificación actualmente no está clara en cuanto a cuál podría ser la
diferencia entre las dos cámaras.
API GETUSERMEDIA247
- éxitoDevolución de llamada.Este parámetro especifica la función que se va a llamar con
un parámetro de tipoTransmisión de medios locales (leerá sobre esto en la sección
"Stream API" más adelante en este capítulo) si el usuario acepta la solicitud para
comenzar a usar el dispositivo requerido.
navigator.getUserMedia('audio', audioRecibido);
function audioRecibido(flujo) {
// hacer cosas con el audio
}
La funciónaudioRecibido está listo para ser llamado devolución de llamada exitosa, que
ocurre cuando se ha concedido acceso al micrófono.
Y un ejemplo de cómo solicitar acceso al micrófono y la cámara web de un usuario para
una videoconferencia podría verse así:
function audioAndVideoReceived(flujo) {
// hacer cosas con el audio y el video
}
En este caso, el audio y video recibido la función ha sido configurada para ser llamada
sobre éxitoDevolución de llamada.
Por supuesto, estos ejemplos se basan en la recomendación actual, que aún está en
desarrollo y es probable que cambie en el futuro. Pero te dan una idea de cómo podrías
usar la API. Dicha API será útil para implementar no solo videoconferencias, sino
también grabaciones de audio y cámara web, y transmisión de cámara web en vivo para
usar en la web.
Antes de aprender a usar los datos del dispositivo local, echemos un vistazo
rápido a otra API propuesta, la API PeerConnection.
La API PeerConnection permite que se realicen conexiones entre diferentes pares (por
ejemplo, navegadores web), lo que a su vez permite enviar audio, video y otros datos
entre los pares conectados. Cualquier conexión entre pares requiere un canal de
comunicación o señalización, que se utiliza para enviar mensajes entre los pares y toma
la forma deXMLHttpRequest-basado oWebSocket-comunicación basada en (más adelante
en este capítulo leerá más sobre WebSockets).
APeerConnectionluego se crea un objeto al queañadirStream()Se puede llamar al
método para agregar cualquier flujo de audio y/o video requerido a la conexión. El
añadirStream()método toma un parámetro de tipoflujo de medios,que representa un flujo de
datos multimedia, como contenido de audio y video de una cámara web, que podría crearse
como resultado de una llamada a ungetUserMedia()llamada de la API getUserMedia.
Una vez más, la especificación no está completa y aún no se ha implementado, pero
puede leer sobre ella en www.whatwg.org/specs/web-apps/current-work/multipage/
videoconferencing-and-peer-to-peer- comunicación.html#conexiones de igual a igual.
Ahora tiene dos posibles métodos para obtener unflujo de mediosobjeto que
contiene datos de audio y/o video. Pero, ¿qué puedes hacer realmente con estos
flujo de medios¿objetos? Aquí es donde entra en juego la Stream API propuesta.
El objetivo de Stream API es permitirle transmitir datos de audio y/o video desde una fuente
de medios, ya sea un dispositivo local, como una cámara web o un micrófono, o una URL de
transmisión.
Una vez que se han obtenido los datos del flujo de medios, teóricamente se puede
conectar a un HTML5audio o videoelemento y reproducido para el usuario.
En este momento, ninguno de los navegadores actuales es compatible con Stream API, aunque el
enlace de Opera mencionado anteriormente con getUserMedia API hace uso de una implementación
de prueba de algunas de las API.
El bloque de construcción de Stream API es elflujo de mediosobjeto, sobre el que
aprenderá a continuación.
EL OBJETO MEDIASTREAM
<script>
navigator.getUserMedia('usuario de video', webcamReceived);
function webcamRecibido(webcamStream) {
video.src = webcamStream;
}
</script>
API DE FLUJO251
WEBSOCKETAPI
usar HTTP. Los métodos HTTP anteriores usaban "sondeo largo", en el que el navegador sondeaba
LA INTERFAZ WEBSOCKET
MÉTODO DESCRIPCIÓN
enviar datos) Envía los datos especificados a través de la conexión abierta. Los datos pueden ser
uncuerda,unbúfer de matriz,o unGota.
ATRIBUTO DESCRIPCIÓN
listoestado Contiene el estado actual de la conexión WebSocket, que puede ser uno de
los siguientes (los valores enteros correspondientes se muestran entre
paréntesis):
monto almacenado en búfer Contiene el número de bytes que se han puesto en cola usando el
enviar()pero aún no se han enviado a través de la conexión. Esto no
incluye los gastos generales utilizados por el protocolo.
extensiones Contiene las extensiones seleccionadas por el servidor (si las hay).
protocolos Contiene el subprotocolo que el servidor ha seleccionado para su uso (si corresponde).
API WEBSOCKET253
Cuando la conexión WebSocket está abierta, puede usar elenviar()método para
enviar datos a través de la conexión al servidor WebSocket. Por supuesto, debe saber
cuándo está abierta la conexión WebSocket antes de poder hacerlo. Para eso, por
supuesto, debe esperar los eventos. La especificación especifica cuatro de estos
eventos y se enumeran enTabla 11.3.
EVENTO DESCRIPCIÓN
USO DE WEBSOCKETS
<div>
Estado de conexión: <span id=”conStatus”>Cerrado</span>
</div>
<button id=”conectar” onclick=”conectar()”>conectar</button>
<button id=”close” onclick=”closeConnection()”>cerrar</button>
<div>
<label for=”msg”>Mensaje</label>
<entrada id=”mensaje” tipo=”texto” />
</div>
<div id=”pantalla”></div>
var contra;
función conectar() {
con = nuevo WebSocket('wss://echo.websocket.org');
con.onopen = función () {
establecerEstado(“Abierto”);
};
con.onmessage = función (e) {
displayMsg(“Servidor: “ + e.datos);
};
API WEBSOCKET255
con.onclose = función (e) {
setStatus(“Cerrado”);
};
con.onerror = función (error) {
setStatus(“Error” + error);
};
}
Comienza haciendo una llamada al constructor WebSocket para abrir la conexión. Luego asigna
diferentes funciones a cada uno de los eventos mencionados en la Tabla 11.3 para que se llamen
cuando se genere ese evento en particular.
lapsodefinido en el HTML:
función establecerEstado(estado) {
document.getElementById('conStatus').innerHTML = estado;
}
pantalladivisión:
función mostrarMensaje(mensaje) {
función cerrarConexión() {
if (con.readyState != 3) con.close();
}
Y por último pero no menos importante, elenviar()la función verifica si la conexión está
realmente abierta (estado de conexión 1), lee el valor ingresado en el mensajeaporte
campo, muestra el valor en pantalla y luego lo envía a través de la conexión abierta:
función enviar() {
if (con.readyState == 1) {
var mensaje = documento.getElementById(“mensaje”).valor;
mostrarMensaje(“Cliente: “ + mensaje);
con.send(mensaje);
}
}
El código resultante no tiene mucho que ver, pero muestra claramente lo fácil que es usar
la API de WebSocket para la comunicación bidireccional con un servidor WebSocket.
Figura 11.3muestra cómo se vería el código anterior en acción.
API WEBSOCKET257
Entonces, ¿qué tienen que ver los WebSockets con los medios HTML5? Bueno, esa es una
buena pregunta, porque en cualquier aplicación relacionada, la Stream API se usará en el
futuro para transmitir datos de audio y video. Pero en una aplicación que utiliza la transmisión
de audio y video, también es muy posible que sea necesario transferir otros datos. Por
ejemplo, como se mencionó anteriormente, la API PeerConnection podría utilizar WebSockets
para la comunicación entre pares. Además, imagine que tiene una aplicación de chat de video
a la que también desea agregar un chat de texto (en caso de que los usuarios quieran silenciar
el sonido).
Por el momento, hay, por supuesto, una serie de aplicaciones disponibles que
brindan funciones como video y chat de audio, pero son solo eso, aplicaciones.
Necesitan ser instalados.
De manera similar, a través del navegador, también puede usar Flash para proporcionar
la misma funcionalidad, pero nuevamente, eso requiere que se instale algo adicional, en este
caso, un complemento de terceros. Y recuerda que el iPad, por ejemplo, no soporta Flash.
En el futuro, tener toda esta capacidad integrada en el navegador significa que mientras el
navegador sea compatible con estas API (lo que todos los principales navegadores deberían,
Las características futuras que ha aprendido en este capítulo le han dado una
idea de lo que podría necesitar aprender más si está pensando en
implementar algo más que audio y video en su sitio web.
La API de audio propuesta, una vez que esté terminada, le permitirá manipular el audio antes de
reproducirlo para sus usuarios, por ejemplo, aprovechando una configuración de sonido avanzada.
Los desarrolladores de juegos también se beneficiarán de la API extendida porque les permitirá crear
TERMINANDO259
ÍNDICE
Transformaciones 3D. Ver también transforma API. Ver también API de JavaScript
260 ÍNDICE
declaración de audio, 34 navegadores
círculo atributo, 33
9 elemento charset, 9
B Cromo
retrocompatibilidad, 5 habilitar Web Audio API en, Web
Berners-Lee, Tim, 4 API de audio, 246
SVG (Gráficos vectoriales escalables), 217 filtro de matriz de saturación de color, aplicación,
ÍNDICE261
contenidonombre de clase CSS, 10 CSS3.Ver también Reglas CSS3 específicas de WebKit
262 ÍNDICE
descargas Versitios web máscara de elipse
Conversor de medios, 50
mi Miro Video Converter, 50 subtítulos
aparte,18 abortar,93
Poder jugar,93
juego de caracteres, 9
juego de caracteres,9
puede jugar,94
cambio de duración,94
DOCTIPO, 8–9
empotrar,28
vaciado,93
terminó,94
título de la figura,19
figura,19 error,93
pulsación de tecla,194
pie de página, 11
escuchando, 102–104
h,dieciséis
datos cargados,89, 93
encabezamiento, 11
pausa,94, 104
objeto,28
pausaytocar,102–103
parámetro,30
tocar,94
para complementos, 28
jugando,94
rango,104
Progreso,93
valet, 20
cambio de tasa,94
sección,13–16
buscado,94
svg,217–218
buscando,94
modo w,30
estancado,93
El sueño del elefante
suspender,93
subtítulo de entrada, 180–181
cambio de tiempo,95
Reproductor de video Playr, 190
actualización de tiempo,94–95
entrada de subtítulos, 179
cambio de volumen,94
actualizandolienzoelemento, 206
espera,94
texto de señal de video, 182–183
Lenguaje de marcado extensible (XML), 4
ÍNDICE 263
F tocar(),96–97, 101
reproduce el video(),96
botón de avance rápido, adición, 110–111
ponerImagenData(),209
feColorMatrix fifiltro, 233
establecerIntervalo()función, 205
feGaussianBlur fifiltro, aplicar, 236
establecerPosiciónJuego(),112–113
figcaptionelemento, 19
alternar silenciar(),106
figuraelemento, 19
alternarReproducir(),101, 103
llenar atributo, ajuste acongelar,231
usando, 96
llenarRect()función, usando con lienzo,
199–202
filtrardefinición de elemento, 233–237 GRAMO
Flash fallback, uso con archivos de video, 73 getImageData() función, usando, 209
Reproducción de archivos Flash, 55 Flash API getUserMedia, 247–248
Player, 25–26, 29 audio parámetro, 247
en Internet Explorer 8, 57–58 errorCallback parámetro, 248
usando empotrarelemento, 56 acceso al micrófono, 248
Flash Player 10.2 opciones parámetro, 247
falta de apoyo para, 27 éxitoDevolución de llamada parámetro, 248
dibujarImagen(), 201
llenarRect(), 201–202 H
encontrarPos(), 113
h elemento, utilizando en encabezamiento,
getImageData(), 209
16 formato de vídeo H.264 (MP4), 63
carga(), 97
codificador de video de freno de mano,
Matemáticas.piso(), 105
descargando, 66
pausa(), 97, 101
264 ÍNDICE
Mano tipo de medio, 76 html5shimguión, descarga, filtro de
hgrupo elemento, 12
Hickson, Ian, 6, 10 I
HTML (lenguaje de marcado de hipertexto), 4 controles
enlaces de imagen, uso con archivos de video, 72–75
HTML, especificando el orden de tabulación de, 192 HTML5
Datos de imagencontenido del objeto
artículo,13–16 j
aparte,18 API de JavaScript.Ver también API; personalizado
figura,19 amortiguadoatributo, 89
h,dieciséis controladoratributo, 90
rango,104 terminadoatributo, 87
valet, 20 getElementsByTagName()función, 92
ÍNDICE265
API de JavaScript (continuado) inicio de carga,93
tutoría, 86 puedePlayType(), 97
atributos de vídeo, 87–90 cambiar la velocidad de reproducción (), 110
terminó,94 ponerImagenData(),209
266 ÍNDICE
Bibliotecas JavaScript Media Converter, descarga, 50, 66 reproductores
onda de choque, 25
consultas de medios
Kaltura, descarga, función de
relación de aspectocaracterística del dispositivo, 77
188 fotogramas clave
colorcaracterística del dispositivo, 77
quitar la tapa,165, 169
Indice de colorfunción del dispositivo, 77
usando, 158–161
combinación con tipos de medios, 77
usando con portada de video, 164
funciones del dispositivo, 77
pulsación de teclaevento, agregando detector de eventos para, 194
relación de aspecto del dispositivocaracterística, 77
máscaras, 231
escanearcaracterística del
todo,76
Reproductores multimedia Macromedia, 25
braille,76
hazlo gris() función
combinar con media queries, 77
llamando, 212
en relieve, 76
definición, 210
Mano, 76
máscarasVer también vídeo SVG mascarillas
impresión, 76
agregar sobre video, 136–137 aplicar a
proyección, 76
videoelemento, 222–223 definición en
pantalla, 76
SVG, 221
ÍNDICE267
tipos de medios (continuado) Complementos de Microsoft, 26
aplicación/ogg tipo, 62
usando, 75–78, 80
vídeo/mpeg tipo, 63
Biblioteca de JavaScript MediaElementJS, 188
video/webm tipo, 63
grupo de medios atributo, 36
Miro Video Converter, descargando, 50, 66
flujo de mediosobjetos
Biblioteca de detección Modernizr,
entrada y salida, 250
descargando, 115
Flujo de medios localesobjeto, 251
Mozilla Firefox
obtener, 249
soporte de audio, 49
registro() método, 251
soporte de vídeo, 64
usando, 250–251
API de datos de audio de Mozilla
menú Nombre de clase CSS, 10
acceder a datos, 241
métodos en la API de JavaScript
datos de framebuffer, 242–243
agregarEventListener(), 102
código JavaScript, 242
agregarPistaTexto(), 97
metadatos cargados evento, 241
puedePlayType(), 97
mozChannels atributo, 241
cambiar la velocidad de reproducción (), 110
mozCurrentSampleOffset() método, 243
cambiarVolumen(), 105
mozFrameBufferLength atributo, 241
borrarIntervalo() función, 206
mozSampleRate atributo, 241
crearElemento(), 208
mozSetup() método, 243
dibujarImagen(), 201
mozWriteAudio() método, 243
llenarRect(), 201–202
tocarfunción, 244
encontrarPos(), 113
lectura de datos de audio, 240–243
getImageData(), 209
escritura de datos de audio, 243
carga(), 97
formato de audio MP3, 47, 49 MP4
Matemáticas.piso(), 105
(H.264), 48
pausa(), 97, 101
compatibilidad con navegador, 49, 64–65
tocar(),96–97, 101
codificación de reproducción retrasada, 66
reproduce el video(),96
formato de video, 63
ponerImagenData(),209
MPEG (Grupo de expertos en imágenes en movimiento), 47, 63
establecerIntervalo()función, 205
multimedia. Verreproductores multimedia; nativo
establecerPosiciónJuego(),112–113
multimedia
alternar silenciar(),106
Botón de silencio, adición, 104–107
alternarReproducir(),101, 103
apagado atributo, configuración, 67
usando, 96
silenciar archivos, 53
268 ÍNDICE
Botón Reproducir/Pausar, agregar, 98–102 biblioteca
norte
Playr JavaScript, 188–191 complementos. Ver
multimedia nativa
también reproductores multimedia
audio elemento, 32, 52
subprograma elemento, 28
beneficios, 31
empotrarelemento, 28
en Internet Explorer 9, 42
objeto elemento, 28
en Safari, 42
parámetro elemento, 30
fuente elemento, 38–39
uso con reproductores multimedia, 27
pista elemento, 40–41
modo w elemento, 30
videoelemento, 35–37
impresión tipo de medio, 76
navegación elemento, 10, 17
barra de progreso
sitio web node.js, 254
agregando, 107–109
objeto elemento, uso con complementos, 28–29 utilizando rangoelemento como, 193
opacidadvalor
desvanecimiento, 146–147 q
usando en CSS3, 122 Soporte de
Reproductor multimedia QuickTime, 26
video de Opera, 64, 133 Algoritmo
modo peculiar, 9
de esquema, 16
R
PAGS
rangoelemento, usando como barra de progreso,
parámetro elemento, usando con complementos, 30
193 gráficos rastar, 216
sendero elemento, utilizando con vídeo SVG
Reproductor de audio real, 24
máscaras, 231
reflexión, especificando en elementos HTML,
API de conexión de pares, 249
135–136
perspectiva propiedad, usando con 3D
botón de rebobinado, adición, 110–
Transforma, 154
111 canales RGB, conversión, 235
Pfeiffer, Silvia, 184
corchete de ángulo recto (>), incluso en video
pixelData objeto, manipulación de datos en,
señales, 183
210–211
girar transformar, usando, 150, 164
píxeles, ajuste de transparencia para, 235
rotar3d() transformar, usando, 167–168 esquinas
reproducir video, copiar, 205–207. Ver también
redondeadas, usando en CSS3, 126–127
copia de vídeo
ÍNDICE 269
S sitios (continuado)
soporte de video, 64
Gradientes lineales CSS3, 125
Gráficos vectoriales escalables (SVG)
Especificación CSS3, 122
ventajas, 216–217, 222
Especificación de transiciones CSS3, 147
soporte del navegador, 217
dibujarImagen()función, 202
circulo elemento, 219
Durian Open Movie Project, 162
elipseelemento, 220
API getUserMedia, 247
llenar atributo para el color del texto, 218
freno de mano, 66
textoelemento, 218
Esquemas de documentos HTML5, 16
escalatransformar, usando, 148–150
html5shimguion, 20
pantallatipo de medio, captura
interiorShivguion, 20
de pantalla 76
Tutorial de JavaScript, 86
dibujarImagen()función, 202–203
js_videosub, 188
llenarRect()función, 201–202
jscaptions, 188
metadatos cargados evento API, 202
Jugador JW, 55
proporciónvariables, 202
Calatura, 188
quebrar()función, 203
Biblioteca JavaScript de LeanBack Player,
toma de video HTML5, 201–204
188 “Enlaces y anclajes”, 5
valeelemento t, 20
máscarapropiedad, 137
secciónelemento, 13–16
Conversor de medios, 50, 66
barra de búsqueda, agregando, 112–113
consultas de medios, 76
sombras, usando en CSS3, 126–128 Sharp,
Biblioteca de JavaScript MediaElementJS, 188
Remy, 20, 254
Miro Video Converter, 50, 66
onda de choque, 25
Biblioteca de detección Modernizr, 115 MPEG (Grupo de
Sintelanimación de portada de video, 162
expertos en imágenes en movimiento), 63 node.js, 254
sitios
270 ÍNDICE
programa SubRip, 175 elipseelemento, 220
filtros SVG, 233 llenar atributo para el color del texto, 218
medios de comunicaciónatributo, 39
para el color del texto, 218
ÍNDICE271
T tu
orden de tabulación, especificación de controles, 192–193 Codificación de caracteres UTF-8, 9
272 ÍNDICE
usando transiciones con, 143–144 desvanecimiento, 146–147
Flash alternativo, 73
altura atributo, 67 W
enlace de descarga de imágenes, 74–75
W3C (World Wide Web Consortium), 4 WAV (formato
enlaces de imágenes, 72–73
de archivo de audio de forma de onda), 48–49 API de
respaldo heredado, 72–75
audio web, 240
círculo atributo, 67, 70
Contexto de audio()constructor, 246
puesta a disposición, 75
nodo de audioobjetos, 246
objeto elemento, 73–74
Habilitación en Chrome, 246
ajuste de objetopropiedad, 129–131
objetivo de, 245
posición del objetopropiedad, 132–134
enrutamiento modular, 246
reproducción de varias fuentes, 69–75
Formularios web 2.0, 5
reproducción, 67–68
Tecnología de aplicación de hipertexto web
póster atributo, 71
Grupo (WHATWG), 5–6
precarga atributo, 68
Reglas CSS3 específicas de WebKit.Ver también CSS3
quitando controles, 68
máscara-caja-imagenpropiedad, 136–137
eliminar controles predeterminados de, 100
reflejarpropiedad, 135–136
restaurar controles predeterminados, 68
archivos WebM, reproducción, 67
escribeatributo, 70
formato de video WebM, 63–65
usando sombra paralela con, 144–145
sitios web
usando degradados con, 123–125
API 2D, 199
ancho atributo, 67
Transformaciones 2D, 153
formatos de video
Transformaciones 3D, 154, 157
MP4 (H.264), 63
Soporte de video Android, 80
Teora Ogg, 62
animarelemento, 229
WebM, 63
animateMotion elemento, 231
vídeo/mpeg tipo MIME, 63
estado-de-reproducción-de-animaciónpropiedad, 160
vídeosVer también Vídeo SVG y HTML5
API de datos de audio, 244
agregando desenfoque a, 236
Blender Foundation, 162
agregando sombras paralelas a, 155
Camen Design, 75
agregando subtítulos a, 189–191
ÍNDICE 273
sitios web(continuado) SVGtextoatributos de los elementos, 218
propiedades de transición,
Especificación de transiciones CSS3, 147 Estatuto del grupo de trabajo de WebVTT, 176
usando, 255
Sintel video cover animation, 162 255 HTML para conexión, 255
274INDEX
setStatus() función, 256 etiquetas de texto, 181
cadena de identificación,177
ÍNDICE275
Acceso en línea ilimitado a todos los videos y
libros de Peachpit, Adobe Press, Apple
Training y New Riders, así como a contenido
de otras editoriales líderes, que incluyen:
O'Reilly Media, Focal Press, Sams, Que, Total
Training, John Wiley & Sons, Course
Tecnología PTR, Class on Demand, VTC y más.
REGÍSTRATE HOY
peachpit.com/creativeedge
Disfruta el
Semilla de durazno
¡EQUIPO DE AFILIADOS!
¡APLICA Y EMPIEZA!
Es rápido y fácil de aplicar. Para
conocer más ingresa a:
http://www.peachpit.com/afiliados/
* Válido para todas las ventas de libros, libros electrónicos y videos en www.Peachpit.com