PFC Ignacio Lopez Gomez
PFC Ignacio Lopez Gomez
I
II
PROYECTO FIN DE CARRERA
PLAN 2000
ETSIS TELECOMUNICACIÓN
Calificación: El Secretario,
Con este proyecto fin de carrera quiero profundizar en el mercado del consumo de vídeo en el hogar,
analizando la evolución que ha sufrido desde un modelo de distribución lineal por aire o cable,
mayoritariamente sobre dispositivos de televisión, hacia un modelo de distribución sobre internet con
aplicaciones de video bajo demanda que pueden ser ejecutadas sobre cualquier dispositivo que tenga
conectividad a internet.
En segundo lugar profundizo en los dispositivos y tecnologias que tienen mayor presencia en el mercado,
de forma que las herramientas a desarrollar abarquen el mayor número de casos posibles.
En la parte final deasarrollo una herramienta que permite generar el esqueleto de una aplicación con un
minimo esfuerzo. Asi mismo el esqueleto se ha creado teniendo en mente los posibles casos de uso y
retos que nos podemos encontrar cuando desarrollamos este tipo de aplicaciones.
III
IV
Resumen
Este proyecto de fin de carrera tiene como objetivo profundizar en el ecosistema de las
aplicaciones de vídeo bajo demanda (Video On Demand, VOD por sus siglas en inglés),
entendiendo todos los retos a los que nos tenemos que enfrentar y enumerando las
herramientas con las que contamos actualmente en el mundo del código abierto (Open
Source Software, OSS por sus siglas en inglés), para finalmente desarrollar una serie de
utilidades que puedan ser aprovechadas por cualquier desarrollador que quiera introducirse
en él.
Para poder cumplir con el objetivo dividiremos el proyecto en dos partes, una primera
de análisis y otra de implementación y desarrollo.
En la segunda parte analizo el ecosistema OTT necesario para que las aplicaciones VOD
existan, entendiendo con cuales de estos actores nos tendremos que comunicar desde
nuestra aplicación, los problemas que tenemos que afrontar y las posibles soluciones de
software de código abierto de las que nos podemos beneficiar a la hora de abordar un
desarrollo.
Para alcanzar este objetivo en esta memoria se incluye un manual de usuario con todos
los detalles necesarios para dejar listo el entorno de desarrollo, así como todas las
consideraciones a tener en cuenta antes de empezar a programar.
V
Abstract
The aim of this project is to deeply explore the ecosystem of the video on demand
applications (VOD from now on) and the challenges that developers reviewing the existing
open source software (OSS from now on) frameworks face when creating a series of tools
applicable to their needs.
In order to fulfill my project’s proposed objectives, I have divided my paper into two
sections, the first part focused on analysis and the second one on the implementation and
development of the tool and an example application.
In terms of analysis, this paper will center on how the market has evolved from an Over-
the-Air broadcasting to IPTV platforms, and finally to an Over-the-Top (OTT from now
on) distribution, utilizing the internet for it.
For the second half of my paper, I have researched the OTT ecosystem and all necessary
requirements from an application perspective in order to better understand the challenges
that developers encounter when developing said applications.
For the purposes of this project, distinct tool development comprising a code generator
and basic TAL BBC framework scaffolding has been implemented for HTML/JS enabled
devices. This was done in order to help developers understand how to best arrange coding
and application components.
Keeping in mind the diversity of the available operating systems and free tools in the
market, my aim has been to make the adoption of such technologies easier for any developer
to use.
In order to attain this objective, I have included a user manual as well listing all
requirements for using the generator tool.
VI
Agradecimientos
A María. Sin tu infinita paciencia, tu ilusión y tu amor esto no sería posible. Te pondría
de coautora solo por las veces que me has escuchado hablar de este proyecto mostrando
todo tu interés.
A Rubén por todos estos años demostrándome que siempre tienes razón. Míranos,
ingenieros después de tantos años. Te voy a tener que dar las gracias una vez más por estar
ahí siempre para darme un empujón cuando lo necesito.
A Tania, Alberto y Bea. Habéis hecho que mi paso por la universidad sea mucho más
que conocimiento. Gracias por todas esas risas y horas de estudio en la biblioteca.
VII
VIII
Contenido
Resumen V
Abstract VI
Agradecimientos VII
Índice de figuras XI
1 Introducción y objetivos 13
1.1 Objetivos 15
1.2 Organización de la memoria 16
2 OTT. Distribución de vídeo sobre internet 17
2.1 Tipos de contenido 17
2.1.1 Contenido en directo 17
2.1.2 Contenido bajo demanda 18
2.2 Autor del contenido 18
2.2.1 Contenido propio 18
2.2.2 Contenido generado por usuarios 19
2.3 Modelo de monetización 20
3 Ecosistema OTT 21
3.1 Plataformas de Vídeo Online 22
3.1.1 Gestores de identidad 22
3.1.2 Gestión de contenido 26
3.1.3 Infraestructura de vídeo 28
3.1.4 Gestión de derechos digitales 29
3.1.5 Analíticas 33
3.1.6 Monetización 35
3.2 RED 36
3.2.1 Web APIs 36
3.2.2 Redes de distribución de contenido 38
3.3 Aplicaciones cliente 39
3.3.1 Anatomía de las aplicaciones 40
3.3.2 Dispositivos 44
3.3.3 Fragmentación 49
3.4 Software 52
3.4.1 Conclusiones 54
3.5 Plataformas OTT 55
4 Streaming de contenido 57
4.1 Infraestructura 57
4.2 Anatomía del Stream 59
4.2.1 Protocolos de transmisión 59
4.2.2 Estrategias de transmisión 59
4.2.3 Pseudo-streaming 61
4.2.4 Descarga adaptativa 62
4.2.5 Contenedores 63
4.2.6 Encriptación y gestión de derechos digitales 64
4.2.7 Codecs 66
4.3 Procesado del contenido 66
4.3.1 Encoding 67
4.3.2 Generación de fragmentos 67
4.3.3 Encriptación 67
4.3.4 Generación de Índices 68
IX
5 Análisis de dispositivos HTML JS 69
5.1 Hardware y capacidades 69
5.1.1 Pantallas 69
5.1.2 Métodos de entrada 70
5.1.3 Aceleración y capacidades de CPU 71
5.2 Aplicaciones en pantallas grandes 72
5.3 JavaScript 74
5.3.1 Historia 74
5.3.2 JavaScript en dispositivos conectados 76
5.4 Frameworks JS 77
5.5 Conclusiones 81
6 Análisis TAL BBC 83
6.1 Fundamentos TAL 84
6.1.1 Módulos 84
6.1.2 Composición 86
6.1.3 Widgets 89
6.1.4 Componentes 90
6.1.5 Composición de pantallas 93
6.1.6 Navegación y gestión de foco automática 94
6.1.7 Dispositivo 95
6.2 Problemas detectados 96
6.3 Conclusiones 98
7 Aplicación - Generador Yeoman TAL 99
7.1 Retos 99
7.1.1 Estructura 99
7.1.2 Código de ejemplo 99
7.2 Entorno de desarrollo 100
7.2.1 Editor de código 100
7.2.2 Navegadores 101
7.2.3 Herramientas de desarrollo 101
7.2.4 Node.js 102
7.2.5 NPM 102
7.2.6 TAL 102
7.2.7 Gulp 102
7.2.8 Yeoman 103
7.3 Desarrollo de Generador TAL 103
7.3.1 Generador TAL 103
7.3.2 Aplicación TAL Ejemplo 104
7.3.3 Implementación generator-tal 108
8 Conclusiones 111
9 Líneas futuras de investigación 113
9.1 Desarrollo de un framework multiplataforma 113
9.2 Desarrollo de reproductor HTML5 114
10 Glosario 117
11 Bibliografía 119
X
Índice de figuras
XI
Figura 6.8: TAL Composición de pantallas .................................................................................... 93
Figura 6.9: TAL Gestion del foco ................................................................................................... 94
Figura 6.10: Obtención del dispositivo. .......................................................................................... 95
Figura 6.11: Almacenamiento persistente....................................................................................... 95
Figura 6.12: XHR............................................................................................................................ 95
Figura 6.13: Reproducción de contenido. ....................................................................................... 96
Figura 7.1: Entorno de desarrollo ................................................................................................. 100
Figura 7.2: Estructura aplicación TAL Ejemplo ........................................................................... 104
Figura 7.3: Pantalla base ............................................................................................................... 105
Figura 7.4: Pantalla principal ........................................................................................................ 106
Figura 7.5: Lista de vídeos ............................................................................................................ 107
Figura 7.6: Detalle de vídeo .......................................................................................................... 107
Figura 7.7: Reproductor de vídeo ................................................................................................. 108
Figura 7.8: Estructura generador-tal ............................................................................................. 109
XII
1 Introducción y objetivos
Actualmente estamos viviendo un cambio en la forma de consumir vídeo por parte de
los usuarios. Este solo se puede llegar a entender si tenemos en cuenta la evolución que ha
sufrido este sector, junto con el de la electrónica de consumo y el acceso a internet. Todos
estos ingredientes han facilitado esta transición.
Al mismo tiempo que el consumo de contenido premium captaba cada vez más usuarios,
algunas compañías como BBC empezaron a crear los primeros servicios de prueba de
distribución de vídeo bajo demanda (Vídeo On Demand, VOD por sus siglas en inglés),
aunque no pasaron de pruebas de concepto ya que, entre otros motivos, la tecnología aún
no estaba lista e internet no estaba suficientemente implantado en los hogares.
13
copyright en inglés) de películas y series. Estas páginas sentaron la base de cómo se
consumiría vídeo de forma online en los siguientes años.
Además, la popularidad de YouTube hizo que varios fabricantes pusieran su foco en ella,
incluyendo aplicaciones con una funcionalidad muy básica en sus dispositivos a modo de
reclamo. La semilla de las aplicaciones en los dispositivos conectados estaba plantada.
Con todos estos eventos ocurriendo al mismo tiempo, Netflix, compañía de venta y
alquiler por correo de DVD, inició su negocio de VOD en el 2007, sufriendo un gran
crecimiento de usuarios, llegando a superar los 100 millones de clientes globales en el primer
cuatrimestre de 2017 (Netflix, 2017) y al conjunto de las compañías de cable más
importantes en USA en número de abonados (Tom Huddleston, 2017). Estos datos
confirman el desplazamiento que están sufriendo los modelos de consumo de vídeo más
tradicionales respecto a los nuevos.
Al igual que paso con YouTube, el éxito de Netflix ha movilizado a distintos tipos de
compañías que no quieren perder la oportunidad de entrar en un negocio que se prevé siga
creciendo en los próximos años.
Con una estimación de que en 2019 el 80% de tráfico en internet será vídeo (Cisco,
2015), empresas que tradicionalmente no han tenido relación con el mismo, como Amazon
o Apple, se han sumado a la creación de aplicaciones VOD, al igual que las compañías de
medios tradicionales como HBO y Sky.
A lo largo de este proyecto fin de carrera profundizo en los retos que supone el
enfrentarse al desarrollo de una aplicación VOD en este sector, analizando todos los actores
involucrados de forma que podamos entender los retos que conlleva. Finalmente repaso las
distintas soluciones de desarrollo disponibles para hacer dichas aplicaciones en función de
los dispositivos existentes en el mercado, justificando de esta forma el uso de tecnologías
web, para analizar las soluciones de código abierto y poder plantear el desarrollo de una
herramienta que nos facilite el trabajo a la hora de empezar nuevos proyectos.
En los siguientes puntos podemos ver los objetivos que me he marcado en el ámbito de
este proyecto y la organización de la memoria.
14
1.1 Objetivos
Los objetivos de este proyecto de fin de carrera son:
15
1.2 Organización de la memoria
En los siguientes capítulos podemos ver un análisis de todos los actores que están
implicados en las aplicaciones de distribución de vídeo sobre internet.
Dentro del capítulo dedicado al ecosistema OTT (Capítulo 3) desgrano cada uno de los
bloques que componen estas aplicaciones, de forma que podamos entender la complejidad
y problemática existente.
El Capítulo 4 trata sobre los streams de vídeo, como se construyen, el procesado de los
mismos y los resultados finales que consumirán los clientes
En el Capítulo 7 explico la solución que he desarrollado, mostrando los retos a los que
nos enfrentamos cuando queremos hacer una aplicación y como, gracias al generador,
podemos ahorrar mucho tiempo configurando el entorno.
16
2 OTT. Distribución de vídeo sobre internet
Como vimos en el resumen e introducción de este proyecto, el contenido de vídeo OTT
se distingue del habitual en la forma en la que es distribuido, aunque también existen
diferencias en sus tipos.
La distribución desde internet elimina las limitaciones del vídeo tradicional, lo que ha
permitido la aparición de nuevos actores en la creación de producciones originales, así como
la posibilidad de distribuir el contenido en tiempo real o bajo demanda y crear nuevos
modelos de negocio en torno a todas estas variables y las aplicaciones que permiten
visualizarlo.
A grandes rasgos podemos realizar una segmentación del contenido teniendo en cuenta
los siguientes parámetros:
• Tipo de contenido
• Modelo de monetización
En este punto veremos los dos distintos modelos de OTT, así como nuevas formas de
disfrutar del contenido directo.
El contenido que podemos encontrar pasa por la distribución de los distintos canales
lineales por internet, eventos deportivos de cualquier rincón del mundo, conciertos de
música y recientemente infinidad de contenido creado por usuarios desde redes sociales
como YouTube, Facebook o Snapchat entre otras.
17
En las transmisiones en directo por internet siempre existe cierto retraso si se compara
con la emisión por satélite o radio, ya que se debe descodificar esa misma señal, codificarla
y transmitirla por internet, de forma que la inversión en infraestructuras para minimizar
estos efectos es muy importante e incluso crítica en el caso de la transmisión de eventos
deportivos.
Puede ser contenido creado con este fin o contenido ya emitido (catch-up content, en
inglés) puesto a disposición del público.
Nos encontramos con empresas del sector de la comunicación con una gran historia a
sus espaldas como Disney, Comcast o HBO; compañías de telecomunicaciones como
Telefónica; grupos con derechos de retransmisión de eventos deportivos como NBA o
beINSPORTS; empresas que han crecido directamente gracias a esta tecnología, como
puede ser Netflix, Amazon o Hulu y grupos empresariales o universidades que ofrecen
cursos online (Massive Online Open Course, MOOC por sus siglas en inglés).
Empresas como Amazon que compiten directamente con Netflix y otras como Telefónica
Movistar se han sumado a esta corriente para no quedarse fuera del sector, atrayendo o
reteniendo a más usuarios con contenido inédito, exclusivo y de calidad.
18
Actualmente pocas empresas pueden vivir exclusivamente de la distribución de su
producción, pero cada vez más han encontrado en internet una vía perfecta para ampliar
su negocio, al no depender de terceros para poder llegar a los usuarios, maximizando los
beneficios. HBO es un claro ejemplo, ya que cuenta con un catálogo muy atractivo que
hace que la gente se subscriba a su servicio para poder disfrutarlo. Contenido de terceros
En este grupo nos encontramos a casi todas las compañías que distribuyen contenido de
vídeo bajo demanda como series o películas, que combinan el contenido generado de forma
propia con el de terceras empresas sobre el que tienen derechos de distribución.
El ejemplo más claro que tenemos de plataforma que nació para permitir compartir
vídeos entre usuarios es YouTube.
Es un modelo muy ligado a la monetización por publicidad, aunque como podremos ver
se están intentando implantar más modelos.
19
2.3 Modelo de monetización
2.3.1.2 Subscripción
Un modelo de subscripción permite que el usuario pague una cuota fija habitualmente
mensual que le da permisos para reproducir todo el catálogo de la plataforma que quiera
mientras dicha subscripción siga teniendo validez. Normalmente las subscripciones solo
permiten usar un número máximo de dispositivos al mismo tiempo para evitar usos
fraudulentos de las cuentas.
2.3.1.3 Publicidad
Es un modelo muy asociado a la distribución de vídeo en las redes sociales, pero también
se usa como complemento a las otras vías de monetización en países donde modelos
puramente transaccionales o de subscripción no son viables económicamente.
20
3 Ecosistema OTT
El ecosistema OTT y más concretamente el centrado en la distribución de vídeo está
formado por un entramado de empresas muy diversas, así que es importante entender
cuáles son los factores diferenciadores entre ellas y cuáles son las partes que todas tienen
en común, de forma que seamos capaces de tener una visión más clara de los retos a los
que se enfrentan.
En la siguiente figura podemos ver las grandes piezas que conforman la arquitectura de
una aplicación OTT, los dispositivos cliente, la infraestructura de red y la plataforma de
vídeo online (Online Video Platform, OVP por sus siglas en inglés):
En los siguientes puntos pasaremos a analizar todos estos bloques, explicando las
particularidades de cada uno y los retos a los que nos enfrentamos cuando nos integramos
con ellos.
21
3.1 Plataformas de Vídeo Online
Las plataformas de vídeo online u OVP como se les conoce habitualmente, engloban a
todos los servicios requeridos para que los usuarios sean capaces de consumir el contenido
de vídeo desde sus aplicaciones.
Algunos de estos servicios son comunes si los comparamos con otros productos, pero
muchos otros son específicos del mundo OTT, y en particular de las aplicaciones
relacionadas con la distribución de vídeo.
La mayoría de los distintos servicios son consultados desde las aplicaciones cliente
usando un interfaz de acceso a aplicación (Application Programming Interface, API por
sus siglas en inglés) directamente, ya sea de forma unificada bajo el mismo servicio o
accediendo a cada parte de manera independiente.
22
Desde un punto de vista de negocio los datos que podemos obtener de la gestión de
usuarios son muy diversos, como por ejemplo la edad media de los clientes, el sexo
mayoritario, el tiempo medio entre cada acceso a la aplicación, horas de entrada, etc. Todos
estos datos son utilizados para segmentar los usuarios y poder dirigir campañas de
marketing más eficientes.
Identity Management
El registro puede realizarse desde las aplicaciones o de forma automática en los sistemas
del proveedor, como veremos a continuación.
El registro desde las aplicaciones es el modelo más habitual en los clientes OTT. En las
pantallas grandes es un proceso tedioso, de forma que se ha creado una forma distinta de
poder introducir los datos en dichos dispositivos. En el punto 3.1.5 explico este modelo de
alta de usuario.
Hay varias estrategias que son comúnmente utilizadas en este tipo de aplicaciones
23
Acceso unificado
El acceso unificado (Single Sign On, SSO por sus siglas en inglés) permite que un usuario
pueda usar una única cuenta para acceder a múltiples aplicaciones.
La aplicación que hace uso del mecanismo de SSO debe de comunicarse con la cuenta
externa para obtener la autorización por parte de la misma, y si es necesario los datos que
requiera del usuario.
Un caso muy habitual es el acceso a aplicaciones como Netflix mediante el uso de cuentas
en distintas RRSS como Facebook o Twitter.
Connect Code
En dispositivos donde la introducción de caracteres es lenta, introducir el usuario y
contraseña puede ser tedioso o incluso poco recomendable por motivos de privacidad, ya
que los dispositivos de gran pantalla suelen estar ubicados en espacios comunes dentro de
las viviendas, siendo muy fácil el exponer datos privados ante miradas indiscretas. Una
solución a estos problemas es permitir asociar dicho dispositivo a una cuenta ya existente
mediante un código único que se muestra en la pantalla del mismo.
24
Figura 3.5: Teclado en pantalla.
Figura 3.6: Código de conexión.
En las figuras anteriores podemos ver el modelo tradicional y el modelo basado en código
de conexión instándonos a ir a una URL para autenticarnos con nuestras credenciales he
introducir el código mostrado en pantalla.
Este mecanismo se puede implementar en la solución del OVP o utilizar un servicio SSO
de terceros, como login for devices de Facebook, que hemos podido ver en la figura 3.4.
TV Everywhere
TV Everywhere hace referencia a la posibilidad de ver nuestros canales lineales allá
donde estemos, gracias a múltiples servicios OTT.
Este modelo de autenticación permite que usuarios que ya están pagando por una
subscripción a un canal lineal puedan acceder al contenido OTT del mismo a través de
aplicaciones que tengan implementado esta forma de autenticación. De esta forma con las
credenciales de un operador de cable, el usuario puede acceder al contenido online de los
distintos canales que engloba dicho operador. Las aplicaciones que usan este mecanismo de
autorización normalmente permiten seleccionar distintos operadores, dando la opción de
usar múltiples mecanismos para identificar a un usuario, desde un código postal junto con
un número de teléfono a los más clásicos usuario y contraseña.
25
3.1.1.3 Gestión de datos de usuario
Dado que la mayoría de las aplicaciones VOD pueden ser accedidas con una misma
cuenta desde múltiples dispositivos, no es raro encontrar que se puedan almacenar datos
de usuario de forma remota para que se compartan entre los mismos.
Los datos que se suelen almacenar en estas soluciones suelen ser aquellos que no están
soportados por otros servicios, como preferencias específicas de la aplicación, listas de
favoritos, etc.
Cuando hablamos de CMS dentro de aplicaciones OTT, este contenido debe de poder
accederse desde cualquier aplicación cliente independientemente de la tecnología que se use
para representar los datos.
Así nace la necesidad de crear headless CMS, es decir, gestores en los que la estructura
de los datos y la representación de los mismos no está predefinida ni ligada a un formato
de representación. Como ejemplos comerciales encontramos los servicios Contentfull,
Prismic y AppGrid.
Con un CMS headless los datos son configurables, permitiendo la definición de nuevos
modelos de objetos con lo que poder crear entradas.
Content Management
26
Habitualmente nos encontramos con sistemas de gestión de metadatos de vídeo y de
contenido editorial
Suelen estar relacionados con las plataformas de gestión de vídeo encargadas de procesar
las fuentes originales, así como con otros proveedores de contenido que se ocupan de tener
los metadatos actualizados.
27
3.1.3 Infraestructura de vídeo
En este bloque incluyo todos los servicios relacionados con el procesado que se realiza a
los contenidos originales ya sean bajo descarga o en directo para poder ser distribuidos por
internet a los dispositivos requeridos.
Video Infrastructure
Video
PVR Encryption
Encoder
Los servicios de codificación de vídeo (vídeo encoders en inglés) procesan estos orígenes
para adaptarlos a las necesidades de los clientes, ya sea por cuestiones de negocio o por
especificaciones técnicas.
3.1.3.2 Encriptación
El servicio de encriptación es necesario para añadir seguridad a la transmisión de los
datos, codificándolos mediante el estándar AES usando una clave compartida que se
obtiene de los servidores de licencia relacionados con el DRM.
Estos servicios permiten al usuario grabar el contenido que se está emitiendo por
streaming en tiempo real, o programar la grabación de distintos programas. Estas
programaciones pueden ser configuradas mediante filtros personalizados, dando la
posibilidad, por ejemplo, de grabar todos los episodios de una serie o los documentales
sobre un tema elegido.
28
De igual modo, las grabaciones personales en la nube (Network Private Vídeo Recording,
nPvR por sus siglas en inglés) nos permiten disponer de esta capacidad eliminando la
necesidad de tener almacenamiento físico para la grabación, extendiendo virtualmente esta
funcionalidad a todos los dispositivos siempre que tengan acceso a internet.
Para evitar este problema hay soluciones que almacenan una única copia de la
distribución en directo como si fuera un vídeo VOD común para todos los clientes, de forma
que por cada grabación de usuario lo único que se guarda en la nube es una URL apuntando
a un stream con un marcado de tiempo de inicio y de final sobre dicha copia. De esta forma
solamente se generan estos índices por cada grabación, reduciendo el almacenamiento total
requerido para ofrecer dicho servicio, lo que conlleva una disminución sustancial al no
necesitar almacenar una gran cantidad de datos en los servidores.
Dichas medidas se aplican sobre varios actores de la arquitectura OTT, como puede ser
la transmisión de los datos, protocolos de verificación del usuario que comprueban si está
autorizado para acceder a un contenido dado, restricciones por localización y finalmente
estrategias disuasorias como los marcados de los streams identificando al cliente.
En la siguiente figura podemos ver todos los servicios que se aplican para implementar
medidas de seguridad en las aplicaciones:
Rights Management
License
Tokens Signing
Server
29
3.1.4.1 Control de concurrencia
La concurrencia en el contexto de vídeo OTT se refiere al número máximo de dispositivos
que pueden reproducir contenido al mismo tiempo usando una misma cuenta.
Este servicio está íntimamente relacionado con el modelo de negocio y otros bloques
funcionales del OVP, por ejemplo, las pasarelas de pago, que deberán de notificar a los
servidores de acceso a contenido si un usuario ha realizado una transacción correcta o si
una subscripción se ha caducado.
Para evitar que el contenido sea accedido desde regiones no permitidas se realizan
múltiples comprobaciones en toda la infraestructura del OVP, desde las DNS a los
servidores CDN involucrados.
Existen múltiples estrategias para intentar evitar esto, como pueden ser DNS
modificadas o el uso de redes privadas virtuales (Virtual Private Network, VPN por sus
siglas en inglés), pero recientemente han surgido contramedidas que permiten detectar estos
comportamientos y bloquear la reproducción de contenido.
30
Recientemente se ha aprobado en Europa el roaming de subscripciones OTT (Digital
TV News , 2017), de forma que al menos dentro de la Comunidad Económica Europea los
usuarios de servicios OTT deberían de ser capaces de acceder a su contenido sin necesidad
de usar una VPN u otras medidas.
3.1.4.4 Tokens
Uno de los problemas que nos encontramos al transmitir todo el tráfico sobre el protocolo
HTTP es que existen múltiples herramientas de análisis que nos permiten capturarlo y
obtener las URLs a las que se realizan peticiones para acceder al contenido.
Para evitar que estas URLs se publiquen en internet se crean enlaces únicos mediante
el uso de tokens.
Usualmente estos tokens tienen una ventana de validez reducida, de forma que por
mucho que la gente obtenga los enlaces, no pueda acceder al contenido.
Los servidores DRM son una de las piezas más delicadas dentro del mundo OTT, ya
que son los guardianes de la integridad del contenido. Si uno de estos servidores es
vulnerable se podría romper la cadena de seguridad y el contenido protegido por el mismo
quedaría expuesto. Esto hace que la información existente sobre los DRM y las
implementaciones de los servidores no pase de parámetros de configuración.
En la siguiente figura podemos ver un flujo completo de DRM que sigue los siguientes
pasos:
1. . La aplicación cliente obtiene todos los datos necesarios del VCMS para poder
verificar contra el servidor de licencias que está autorizado a reproducir un
contenido.
31
License
Client CDN Server
VCMS Entitlement
entitlement
content (entitlement, challenge, urls, metadata)
Opt
getStream ()
streamUrl
challengeState
license
Opt
getAESFromLicense ()
loop
getChunks
En el caso de que aparezca una brecha de seguridad que permita romper todas las
medidas de protección anteriormente mencionadas, las compañías podrán investigar en qué
punto se ha roto la cadena de confianza, para abrir diligencias contra los usos fraudulentos.
Alguna de las estrategias de firma de contenido con la que nos encontramos son:
A diferencia de las marcas de agua, apreciables por los usuarios finales, las firmas
estenográficas son mucho más complejas y están diseñadas para que pasen desapercibidas.
32
La recuperación de la información de estas firmas necesita el análisis del stream durante
un tiempo mínimo que variará dependiendo de la complejidad de la técnica. Normalmente
los distintos fabricantes incluyen corrección de errores, de forma que se puede recuperar la
firma incluso en condiciones de grabación poco favorables, como por ejemplo codificación
del contenido o incluso retransmisión mediante una captura en tiempo real mediante un
dispositivo destinado a tal objetivo (como una cámara de vídeo).
A nivel de análisis de contenido con un fin puramente comercial existen empresas como
Shazam que usan firmas de audio, mientras que Verimatrix se ha especializado en el
firmado de vídeo, de forma que se disuada a los infractores de un uso fraudulento, ya que
con la información añadida se puede identificar la fuente de la filtración y tomar las
pertinentes acciones legales.
3.1.5 Analíticas
Actualmente la estrategia es la de capturar el mayor número de eventos que ocurren
dentro de las aplicaciones de los clientes finales, enviándolas a uno o varios servidores. De
esta forma se pueden definir múltiples reglas para buscar los indicadores claves de
rendimiento (Key Performance Indicator, KPI por sus siglas en inglés) más significativos,
incluso una vez que ya se han recibido los datos.
En el mundo de la distribución de vídeo los KPI más importantes son los relacionados
con la calidad en la transmisión del vídeo, los índices de audiencia por contenido, la
valoración de los usuarios para un contenido y finalmente el uso general de la aplicación.
Analytics Management
Network
Performance Usage
Quality
Metrics Metrics
Metrics
IA
Ratings
Engines
New Relic y Datadog son empresas que ofrecen SDK para múltiples plataformas,
permitiendo su rápida integración en cualquier dispositivo.
33
3.1.5.2 Métricas de calidad de red
En las métricas de calidad de red se engloban todos los eventos relacionados con los
streams de vídeo, de forma que se pueda detectar el ancho de banda disponible para el
usuario, que CDNs son las que mejor funcionan, si han existido problemas puntuales o
generalizados de red que repercutan en la experiencia de uso, etc. Conviva, Nice People at
Work, Edgeware realizan estos análisis de calidad de red.
A partir de todos los eventos capturados podemos definir los distintos KPIs que servirán
para realizar análisis en profundidad que ayuden a comprender el comportamiento de los
clientes, intentando prever a partir de los mismos si van a seguir utilizando el servicio o
por el contrario van a abandonarlo en el futuro inmediato. Esta situación recibe el nombre
en la industria de churn.
Existen multitud de soluciones de analíticas sobre las que se pueden definir dichos KPIs,
siendo las más conocidas Adobe Omniture y Google Analytics.
Gracias a su creciente base de usuarios, estos servicios están empezando a analizar todos
los datos para poder ofrecer contenido relacionado afín a los gustos del cliente.
Igualmente ofrecen servicios que pueden ser consumidos desde las aplicaciones de
terceros para poder mostrar las puntuaciones en las mismas.
Estos motores tienen una gran relevancia, ya que intentan no solo predecir estos
abandonos, sino qué medidas hay que tomar desde una perspectiva de negocio para retener
el máximo tiempo posible a los usuarios, ofreciendo una experiencia más interesante para
ellos.
34
3.1.6 Monetización
Cuando hablamos de aplicaciones de distribución de vídeo encontramos distintos
modelos de monetización, como apuntamos en el punto 2.3.
Esta monetización la podemos dividir entre los ingresos por publicidad o las actividades
transnacionales, entre los usuarios finales y la plataforma de distribución de vídeo tal y
como podemos observar en la siguiente figura:
Monetization
Payment Ad
Gateway Servers
Este servicio permite configurar las distintas ofertas disponibles, de forma que cuando
una aplicación cliente quiera realizar la transacción solo tenga que enviar un identificador,
de esta manera el servicio puede realizar el cobro por el importe adecuado y notificar a las
distintas partes que ha sido ejecutado de forma correcta. Finalmente, el usuario podrá
acceder al producto.
• Códigos o cupones
3.1.6.2 Ad Servers
Para contenido AVOD son necesarios servidores que gestionen la publicidad, encargados
de todo el proceso de subasta de la misma, así como de la recepción y captura de los eventos
y de reproducción de la publicidad para validarla.
35
El Interactive Advertising Bureau (IAB por sus siglas en inglés) se ha encargado de
crear unas guías abiertas que especifican el protocolo de comunicación entre los clientes y
servidores, definiendo el formato de los ficheros, las características y capacidades de los
mismos, así como los mecanismos para hacer seguimiento de las visualizaciones con el fin
de poder obtener analíticas de uso y porcentajes de conversión.
Las especificaciones actuales son VAST (de Vídeo Ad Serving Template en inglés),
VPAID (de Vídeo Player-Ad Definition en inglés) y VMAP (de Vídeo Multiple Ad Playlist
en inglés). Las versiones actuales de estas especificaciones y su alcance se definen en los
siguientes documentos:
• VMAP 1.0.1 - Extiende VAST creando listas de anuncios que deben de ser
procesaras por las aplicaciones cliente.
3.2 RED
Las aplicaciones clientes en el mundo OTT no son más que meros esqueletos que poco
pueden hacer sin una conexión a internet al depender casi totalmente de los datos que
obtienen de los distintos servicios anteriormente descritos.
En los siguientes puntos vamos a profundizar sobre esto, analizaremos el acceso a los
datos y que infraestructura de red nos vamos a encontrar de forma habitual.
Como hemos visto en el análisis de los OVP, las aplicaciones necesitan una gran cantidad
de datos que son ofrecidos por los múltiples servicios que exponen estas plataformas. Sin
estos datos normalmente las aplicaciones no disponen de toda la información que requieren
para su correcto funcionamiento, impidiendo su uso.
36
Existen gran variedad de estándares Web APIs como RPC, SOAP o WSDL, pero la
más común hoy en día es Restful (Representational State Transfer).
Restful
Restful está pensado para funcionar sobre el protocolo HTTP, exponiendo los datos y
las operaciones mediante URLs HTTP, conocidas como endpoints.
Dichos endpoints son manipulados mediante acciones CRUD (Create, Read, Update and
Delete) que tienen una relación uno a uno con distintos verbos del protocolo HTTP.
En la siguiente tabla podemos ver la acción CRUD, el verbo HTTP y la acción que
realiza:
Esto permite que las implementaciones en los servidores sean más sencillas, y al no
existir dependencias entre peticiones se puedan escalar los servicios de una forma más
directa, no teniendo que compartir datos entre servidores.
Definición de APIs
Dado que es tan importante disponer de APIs claros y accesibles, existen multitud de
herramientas que facilitan la definición y las pruebas de los endpoints.
Es muy habitual que las empresas faciliten aplicaciones de prueba que exponen los
métodos, de forma que cualquier desarrollador sea capaz de realizar los test necesarios para
obtener los datos, verificando que los flujos de trabajo son los correctos.
Las herramientas de definición de APIs más habituales son Apiary y Swagger, que
permiten documentar y exponer los endpoints y sus parámetros al mismo tiempo, siendo
de gran utilidad.
37
3.2.2 Redes de distribución de contenido
Las redes de distribución de contenido (Content Distribution Network, CDN por sus
siglas en inglés) se encargan de acercar el contenido a los usuarios finales, convirtiéndose
en una pieza fundamental del mundo OTT.
Las CDNs no son más que un conjunto de servidores que funcionan a modo de cache
entre el origen de los datos y los usuarios finales, a los que acceden los clientes según a
distintas reglas que determinan los DNS (Domain Name System) o los balanceados de red.
En la siguiente figura podemos observar como las aplicaciones finales acceden a sus
nodos más próximos y como la CDN se relaciona con un origen de datos:
Los datos accesibles en los distintos nodos de la red CDN lo son bajo demanda, de forma
que la primera vez que se accede a un contenido en dichos nodos, los tiempos de respuesta
pueden ser parecidos a los que nos encontraríamos en un escenario sin CDN.
Estas redes de servidores tienen a su disposición conexiones de red propias que les
proveen de unos anchos de banda muy elevados. Esto es necesario, ya que cuando un cliente
final accede a un fichero que no está disponible en uno de los servidores extremo, los datos
tienen que viajar por su red privada a la mayor velocidad posible para servir el fichero en
el menor tiempo posible.
38
Los clientes accederán a los distintos nodos de forma automática gracias a la propia
infraestructura de la red CDN, que gracias a los DNS puede determinar que nodos son los
que tienen menor tiempo de respuesta para dirigir el tráfico a los mismos.
La cache de estos nodos debe de poder configurarse con un tiempo de vida, y al mismo
tiempo ofrecer mecanismos para poder invalidar la misma. Esto es de vital importancia, ya
que se puede dar el caso de que la CDN haya cacheado contenido inapropiado y es necesario
eliminarlo para que los usuarios puedan pedir el contenido correcto.
En resumen, las redes CDN son imprescindibles al reducir el ancho de banda entre el
origen y los clientes finales, entregando los datos de una forma más eficiente y a mayor
velocidad, mejorando la experiencia de uso.
Primero vamos a revisar cual es la anatomía de las aplicaciones que corren en los
distintos dispositivos para poder enfrentarnos al desarrollo con una idea clara de que es lo
que se espera cuando abrimos una aplicación de vídeo bajo demanda.
Esta gran diversidad de dispositivos hace que debamos entender las características y
limitaciones que los definen y buscar soluciones a los múltiples problemas que nos vamos
encontrar cuando planteemos el diseño de las aplicaciones.
Según profundicemos en las capacidades, las diferencias entre los distintos dispositivos
dejarán salir a flote la fragmentación de la que he hablado.
En los siguientes puntos repasaremos las plataformas mayoritarias desde las que se
consume vídeo, las nuevas plataformas emergentes, los distintos tipos de fragmentación y
las conclusiones.
39
3.3.1 Anatomía de las aplicaciones
A lo largo de este proyecto fin de carrera he mencionado en varias ocasiones aplicaciones
que han marcado un antes y un después en la forma de entender la distribución de vídeo
a través de internet, como son YouTube y Netflix.
A grandes rasgos podemos generalizar que estas aplicaciones están compuestas por unas
pantallas y elementos gráficos fijos, que podemos resumir en:
Pantalla de inicio
Esta pantalla se caracteriza por mostrar un logo estático de la marca, o bien una imagen
grande con algún botón que nos inste a realizar la acción de entrar en la aplicación con
nuestro usuario y contraseña.
40
Pantalla de login/selección de perfil
En las aplicaciones que requieren de usuario y contraseña, esta pantalla nos permite
introducirlos, he incluso seleccionar entre varios perfiles posibles para disfrutar de una
experiencia más personalizada.
Pantalla principal
La pantalla principal suele constar de un menú que nos da accedo a las distintas
secciones de contenido y de configuración, así como directamente contenido destacado y
varias listas con distintos contenidos.
41
Pantalla de detalle
Una vez que hemos seleccionado un contenido, la pantalla de detalle nos da información
extra sobre el mismo, como pueden ser las puntuaciones recibidas en distintas páginas web,
información sobre los directores y/o actores, duración de la película y opciones de renta o
compra del contenido.
Figura 3.19: Pantalla de detalle de Amazon Prime
Pantalla de programación
Las guías de programación digitales (Electronic Program Guide o EPG por sus siglas en
ingles) son muy comunes gracias al Teletexto y la TDT.
Las aplicaciones que emiten canales en directo suelen contar con este tipo de pantallas,
en las que se nos muestra el tiempo actual y la ventana de emisión de los programas. ROVI
tiene la patente sobre estas pantallas en EEUU.
42
Reproductor de vídeo
Basándonos en las pantallas que hemos analizado podemos resumir los elementos más
comunes en: Lista de elementos e ítems:
Lista de elementos
Estas listas pueden ser muy distintas entre sí, por ejemplo, con imágenes grandes para
el contenido destacado, o con caratulas pequeñas cuando mostramos vídeos de una sección
dentro de una pantalla.
Por regla general las listas son horizontales y permiten hacer scroll horizontal, aunque
nos encontramos variaciones con listas de dos dimensiones con las que hacemos scroll
vertical.
43
Ítems
Las listas de elementos anteriormente descriptas están compuestas de ítems, que suelen
ser las caratulas de los distintos vídeos que están a disposición del usuario. Estos ítems
pueden incluir información adicional, como puede ser el título del vídeo, iconos para resaltar
los idiomas de audio/subtítulos, la calidad del vídeo, etc.
3.3.2 Dispositivos
En este punto vamos a analizar los grandes grupos de dispositivos para los que se
desarrollan aplicaciones de distribución de vídeo bajo demanda.
En la siguiente figura podemos ver el porcentaje de dispositivos que los usuarios adultos
poseen en EE. UU.:
La conclusión que podemos sacar de esta figura es que existe una base de equipos sin
conectividad a internet, como son las televisiones tradicionales. Además, vemos como
dispositivos accesorios para estas televisiones y dispositivos móviles tienen una presencia
más que notable. Observamos un gran crecimiento, durante los dos últimos años, de
dispositivos multimedia y conectados, así como de los móviles, los Smart TV junto con
otros dispositivos de streaming, estando estos últimos plenamente orientados al consumo
de contenido online.
44
En esta otra figura podemos ver el porcentaje de clientes que hace uso de alguno de los
grandes grupos de dispositivos de forma diaria para visualizar contenido de vídeo:
Figura 3.23: Devices Used to Stream Digital Video (IAB + Maru/Matchbox, 2017)
Gracias a estas gráficas podemos saber que existe una gran variedad de dispositivos
disponibles en el mercado y que la base existente en los hogares de los mismos se renueva
cada cierto tiempo, pero no es un proceso inmediato. Esto resulta en una fragmentación de
las capacidades y de las características de dichos dispositivos.
Ordenadores personales
Esto hace que, aunque poco a poco esté perdiendo presencia en los hogares, siga siendo
un medio mayoritario muy a tener en cuenta a la hora de crear aplicaciones.
El auge de las aplicaciones web y de los nuevos estándares permite que el ecosistema de
aplicaciones disfrute de una buena salud.
En este contexto es importante puntualizar que casi todas las aplicaciones de VOD para
PC son aplicaciones web, o al menos están basadas en esta tecnología, por ejemplo, las
45
basadas en las herramientas proporcionadas por Windows Universal Platform o las creadas
mediante navegadores en modo headless como Electron.
Móviles y tabletas
Los móviles y tabletas se encuentran en el segundo puesto de los dispositivos que pueden
consumir directamente contenido de internet.
Los usuarios de contenido en streaming en estas plataformas las prefieren para ver vídeos
de mediana o corta duración (IAB + Maru/Matchbox, 2017).
Las plataformas dominantes de este segmento del mercado son Android, con gran
variedad de dispositivos móviles y tabletas e iOS con la familia iPhone e iPad por bandera.
La fragmentación existente viene dada por la gran diversidad de hardware que hay en
el mercado, así como por las diferentes versiones de los sistemas operativos, incluso cuando
hablamos de una plataforma en concreto.
Dispositivos Conectados
Los dispositivos Set Top Box (STB por sus siglas en inglés) son accesorios que se
conectan a las televisiones, conocidos por este nombre ya que históricamente se situaban
encima de los mismos, cuando estos no eran planos. Los primeros dispositivos de uso
generalizado relacionado con el consumo de vídeo fueron los reproductores de cintas vídeo
y posteriormente decodificadores de televisión digital por antena terrestre, satélite o cable.
Con el tiempo todos estos aparatos han dejado paso a nuevas cajas ofrecidas por las
compañías de telefonía, así como por proveedores de contenido, para que los usuarios
46
puedan acceder al contenido usando internet, primero en redes privadas para garantizar la
calidad del servicio (Quality of Service, QoS por sus siglas en inglés) bajo IPTV y
posteriormente, al abrir su contenido a todo el mundo, a los servicios OTT.
A nivel de hardware, el mundo de los STB es muy diverso, ya que existen múltiples
fabricantes (Sagemcom, Broadcom, Apple, Google, Amazon, Huawei; siendo ejemplos de
empresas europeas, americanas y chinas) usando arquitecturas completamente distintas
que sirven como motor de las aplicaciones OTT.
Dentro de las distintas soluciones de STB OTT podemos encontrar Android TV, basado
en el mismo sistema operativo que los móviles; Apple con su tvOS para la familia de
dispositivos Apple TV, y Amazon TV que está basado en Android, pero eliminando las
dependencias existentes con los servicios de Google.
A todas ellas se suma un grupo más heterogéneo de fabricantes que aportan soluciones
basadas en el SO Linux junto con navegadores web en modo headless. Estos fabricantes
han extendido el estándar del W3C para poder dar acceso a todas las capacidades del
hardware a los desarrolladores desde el navegador, de forma que las aplicaciones que corran
sobre el mismo puedan usar los distintos DRM implementados, entre otros extras.
• Smart TV
Las Smart TV son la evolución de las televisiones tradicionales, a las que los fabricantes
les han añadido, a modo de factor diferenciador, capacidades de ejecutar aplicaciones
directamente sin la necesidad de comprar otros dispositivos extra. De esta forma son más
atractivas para el usuario final, ya que no tienen la necesidad de comprar otro dispositivo
(STB) para poder disfrutar del contenido en línea.
Existen multitud de plataformas como Samsung Tizen y LG WebOS, que ofrecen las
mismas capacidades, pero de una forma no estándar, dificultando la creación de
aplicaciones compatibles con múltiples dispositivos.
• Dispositivos de streaming
En esta categoría englobamos a una nueva familia de dispositivos. Tienen cierta similitud
con los STB OTT, ya que son usados para ver contenido OTT, pero a diferencia de estos,
suelen ser muy pequeños, se conectan directamente a un puerto HDMI de la televisión y el
usuario no interactúa con ellos, ya que solo reciben los streams a reproducir.
De esta forma los dispositivos se comportan como clientes accesorios a las aplicaciones
móviles, de tableta o PC, y es a través de las aplicaciones desde donde el usuario elije y
envía el contenido.
47
Existen varias plataformas que incluyen esta funcionalidad, como Google Chromecast,
Amazon Fire TV Stick y Roku Stick, siendo incompatibles entre sí.
Dispositivos VR
• Cardboards
Se conocen como dispositivos VR Cardboards a todos los accesorios para los móviles que
soportan la tecnología VR mediante la introducción de un móvil en la carcasa, permitiendo
usar este conjunto como un casco VR. Google popularizó el sistema regalando una caja
plegable de cartón, de ahí el nombre.
• Tethered Headsets
Los dispositivos tethered son accesorios de PCs (usualmente de gama alta). Están
pensados sobre todo para VR de juegos o diseño profesional. Al igual que en el anterior
caso, estos dispositivos no tienen problema a la hora de ejecutar aplicaciones VR de vídeo.
48
Los fabricantes de estos dispositivos han creado plataformas propietarias incompatibles
entre sí, de forma que el software que se construye para HTC Vive u Oculus (Facebook)
no es compatible de forma directa, requiriendo modificaciones en el mismo.
• Dispositivos de control
Por esta misma razón cada fabricante ha incorporado nuevos mandos, como los de HTC
Vive u Oculus, que traen sensores suficientes como para saber dónde están los mandos a
nivel espacial y poder ver una representación de tus extremidades en la pantalla.
Otras soluciones hacen uso de ultra sonidos o cámaras de infrarrojos para que podamos
interactuar con nuestras manos sin necesidad de sostener ningún dispositivo. En esta
categoría podemos encontrar el sensor LEAP Motion.
3.3.3 Fragmentación
Cuando hablamos de fragmentación de mercado, hacemos referencia a las diferencias
que nos encontramos en los dispositivos.
Estas diferencias se pueden dividir entre las que están puramente relacionadas con el
hardware del dispositivo (diferentes fabricantes usan distintos componentes) y las que
49
tienen que ver con el software que se ejecuta en los mismos (diferentes versiones de un
sistema operativo, por ejemplo)
Ferias como el Mobile World Congress y el E3 de las Vegas cada vez tienen más
presentaciones de novedades relacionadas con el mundo OTT.
En los siguientes puntos analizo los distintos tipos de fragmentación y como se puede
intentar sortear los problemas asociados de cara al desarrollo de aplicaciones.
3.3.3.1 Hardware
La fragmentación por hardware es con diferencia la más difícil de solventar, ya que es
muy complicado poder adaptar las experiencias de usuario a pantallas de distintos tamaños
con las que se interactúa de forma completamente distinta
• Tamaño de pantalla
Algo que a priori no puede parecer un problema torna otra dimensión cuando hay que
crear aplicaciones con dispositivos que parten de pantallas de 3” pulgadas a dispositivos
con más de 100”.
Este problema no se puede resolver de una forma directa, así que lo más habitual es
crear distintas versiones de las aplicaciones adaptándose a la experiencia de uso y pantalla.
50
• Relación de aspecto de pantalla
En el desarrollo web se han adoptado estrategias de diseño fluido o reactivo a los cambios
de pantalla, de forma que usando buenas prácticas podemos olvidarnos de este problema.
• Resolución de pantalla
Al igual que con el tamaño de la pantalla, las resoluciones que se manejan en estas
aplicaciones varían mucho de un dispositivo a otro.
La solución más directa implica el disponer de todos los recursos gráficos que son
utilizados en la aplicación (imágenes, tipografías) en distintos tamaños, de forma que se
use siempre el más adecuado para un dispositivo dado.
• Periféricos de entrada
Es un problema mucho más obvio, ya que los métodos de entrada de los móviles y
tabletas son gestuales, mientras que en PC disponemos de teclado y ratón, mientras que
en TV, reproductores y consolas de vídeojuegos se interactúa con la aplicación usando un
mando a distancia o controlador.
• Instrucciones CPU
Muchos dispositivos traen hardware asociado que permite acelerar ciertas operaciones
que son usadas de forma intensiva, como la decodificación de vídeo con codec H264 y H265,
así como el proceso de encriptado y desencriptado AES.
Dado que hacer estas operaciones a nivel de software requiere a su vez de un incremento
de las prestaciones de la CPU principal del dispositivo, este problema se soluciona
ofreciendo a los distintos dispositivos los streams de vídeo en el formato adecuado para
cada uno de ellos, usando por ejemplo streams adaptativos.
51
Estas capacidades determinan, por ejemplo, que formatos de vídeo puede reproducir o
no un dispositivo. La solución que se aplica en estos casos es la de disponer de formatos de
vídeo alternativos, así como flujos de trabajo que no requieran ciertas operaciones. Las
aplicaciones cliente serán las que determinen cuando deben de aplicarse unos u otros en
función del modelo del dispositivo.
3.4 Software
La fragmentación por software existe por múltiples motivos, siendo el principal la
existencia de muchos dispositivos que corren sobre sistemas operativos distintos, ofreciendo
SDK basados en tecnologías diferentes.
• Lenguajes de programación
Los dispositivos Android disponen te entornos basados en Java o Kotlin de forma oficial,
junto con el Android API que da acceso a todas las capacidades de los dispositivos.
Apple ofrece Objective-C, Swift y TVMLKit (basado en XML y JavaScript) para los
suyos.
52
desde el browser (NaCL o WebAssembly) o directamente compilando el código para el
dispositivo.
• Versiones de SO
Otro de los vectores de fragmentación viene dado por las distintas versiones de un
sistema operativo que hay funcionando al mismo tiempo. Usualmente cuando un fabricante
de hardware desarrolla una nueva versión del mismo, los usuarios actualizan sus sistemas,
pero siempre hay un porcentaje de usuarios que no lo hace. Igualmente hay usuarios que
no renuevan sus dispositivos según dicta el mercado, de forma que en algunos casos no
pueden aplicar a dichas actualizaciones.
Como podemos ver en las siguientes figuras, la mayoría de los dispositivos activos
siempre usan las últimas versiones de los SO, aunque en el caso de Android existe más
fragmentación:
Además, hay plataformas, como es el caso de las Smart TVs, que históricamente han
sufrido de una falta de actualizaciones de sus sistemas, aunque en los últimos modelos
parece que si se están ofreciendo de forma regular para ofrecer nuevas características y
parches de seguridad.
La fragmentación en este escenario tiene que ver con los APIs que ofrece el fabricante
en las distintas versiones de los sistemas operativos y los SDK asociados, ya que
normalmente discontinúan algunos métodos y agregan otros que los reemplazan. La única
forma de solucionar este problema es usando librerías de compatibilidad con las versiones
nuevas de los SDK, y en un caso más extremo, mantener dos bases de código para distintas
versiones.
53
• APIs privativos
Todas las plataformas tienen sus propios APIs independientes para poder acceder a los
recursos del sistema.
En este caso nos encontramos que al no seguir los estándares HTML/JS que dicta el
W3C, al no cubrir históricamente gran parte de las necesidades que tienen las aplicaciones
de distribución de vídeo, los fabricantes se las han arreglado para dar soporte a dichas
necesidades implementando cada uno sus propios APIs. De esta forma es imposible ejecutar
la misma base de código entre dispositivos, ya que cada uno necesita inicializar las distintas
partes del sistema de una forma completamente distinta.
La única solución posible es el uso de una librería que nos abstraiga de los métodos
privados, implementándolos directamente, y que exponga métodos comunes fáciles de usar.
TAL BBC es un ejemplo de framework que usa este concepto para solucionar dicho
problema.
3.4.1 Conclusiones
Como hemos podido comprobar, existen una gran cantidad de dispositivos muy diversos
con unas características muy dispares. Si queremos desarrollar una aplicación de vídeo bajo
demanda debemos de evaluar si queremos desarrollarla para una plataforma específica o si
por el contrario queremos llegar al mayor número de dispositivos posibles.
Analizando las figuras 3.3.1 Devices used y la figura 3.3.1 Devices owned podemos
observar que los dispositivos conectados son los más usados para ver vídeo. Estos
dispositivos soportan en su mayoría HTML/JS para el desarrollo de sus aplicaciones.
Además, las plataformas móviles y los ordenadores también soportan esta tecnología, de
forma que en una primera aproximación sería interesante desarrollar la aplicación para la
misma, y solucionar los problemas relacionados a la gran fragmentación existente.
54
En el Capítulo 5 realizo un análisis del ecosistema HTML/JS y todas las herramientas
que nos ofrece su ecosistema a la hora de desarrollar una aplicación.
Las empresas que quieren entrar en el sector se pueden sentir apabulladas ante este
escenario, encontrando muchas dificultades cuando quieren crear una aplicación ante la
gran cantidad de proveedores que existen para todos los servicios y la cantidad de horas
de integración que hay que invertir para poder comunicarlos entre ellos.
Los tiempos de salida están motivados por todas las horas de integración, test de
integración para comprobar que todo está en orden, desarrollo de aplicaciones cliente, etc.
La inversión inicial es elevada tanto por la necesidad de invertir las horas anteriormente
mencionadas junto con el pago de los derechos de emisión, campañas de marketing,
comisiones por pasarelas de pago, etc.
Video
Origins
55
En resumen, las plataformas OTT se vuelven responsables de todas las partes
involucradas, incluida la monetización y las analíticas, a excepción de los orígenes de vídeo,
que será lo único que necesite proveer un cliente que haga uso de ellas.
Los problemas que tienen estas plataformas es que existe una nula capacidad de
personalización del servicio, los menores beneficios al existir un intermediario y la realidad
de compartir un espacio de distribución con tu competencia, sin la posibilidad de cambiar
la experiencia de uso, ya que todos comparten la misma.
Alguna de las compañías que están ofreciendo servicios bajo su plataforma OTT son
Amazon Prime, YouTube TV o Now TV.
56
4 Streaming de contenido
Las aplicaciones de vídeo OTT basan todo su potencial en la posibilidad de reproducir
los vídeos en las aplicaciones finales.
Para hacer esto posible, desde el origen del vídeo al stream final que es consumido
ocurren una serie de transformaciones, que pasan desde adaptar la fuente del vídeo original
a streams que pueden ser consumidos, a securizar dichos streams mediante diversas
técnicas.
4.1 Infraestructura
La siguiente figura nos muestra un escenario típico de procesado y consumo de streams
de vídeo, señalando con un número la acción que se realiza en cada parte de forma
secuenciada para poder detallar más adelante que es lo que sucede.
Las fuentes de vídeo se encuentran en los orígenes, que pueden provenir de distintas
fuentes. Habitualmente los vídeos a procesar se obtienen de servidores FTP o carpetas en
la nube, pero también podemos encontrar señales digitales emitidas en directo ya sean
satelitales o locales.
57
2. Procesado de los orígenes
Una vez que se dispone de los streams originales, cada OVP transformará el formato al
más apropiado según sus necesidades.
4. Encriptado de vídeo
Una vez el OVP dispone de las claves AES, lo único que tiene que hacer es encriptar los
streams de una forma conocida para que las aplicaciones cliente sean capaces de hacer el
proceso inverso.
5. Almacenado de vídeo
Cuando una aplicación cliente quiere reproducir un contenido primero tiene que verificar
que tiene los privilegios suficientes y obtener las claves AES para el contenido.
Finalmente, las aplicaciones cliente descargarán los streams de la CDN y gracias a las
claves AES podrán desencriptar el contenido además de ser capaces de reproducirlo.
58
4.2 Anatomía del Stream
Cuando hablamos de streaming nos referimos a la acción de transferir un vídeo, en
cualquier formato, a través de internet desde un servidor a un cliente final.
Los distintos streams finales varían tanto que en muchos casos un stream solo es
compatible para ciertos dispositivos, de forma que existe una fragmentación de los mismos
en función de las capacidades de reproducción que tienen.
En la siguiente figura podemos ver las características que determinan cada tipo de
stream, que serán descritas en los siguientes puntos:
DRM | Encryption
Algunos agentes como los operadores de cable, continúan usando protocolos como
RTMP, RTSP, RTP usando conexiones a internet dedicadas para emitir en IPTV.
Es un modelo simple pero muy poco eficiente, ya que, si un usuario quiere saltar a una
parte determinada del vídeo, este debe de estar descargado en el cliente.
La ventaja más grande que tiene este formato es que funciona bajo un servidor HTTP
sin ninguna modificación como Apache o Nginx, y además esta soportado por todos los
reproductores de vídeo, de forma que es muy fácil de implementar.
Por este motivo normalmente solo se utiliza para contenido en el que la calidad no es
determinante, y en el que no está permitido hacer saltos en el tiempo, como es la publicidad
o los tráileres de películas.
60
4.2.3 Pseudo-streaming
El modelo de pseudo-streaming es una mejora de la descarga progresiva. En este
escenario el servidor HTTP permite que el cliente realice peticiones apuntando a una marca
de tiempo en particular.
61
4.2.4 Descarga adaptativa
En esta estrategia (conocida como Adaptive Streaming en inglés) en lugar de tener un
stream formado por un único fichero, contamos con un índice de segmentos de vídeo
disponibles en el servidor, especificando las calidades de los mismos y las pistas de audio.
Los reproductores incluyen algoritmos de QoS que ayudan a elegir los fragmentos más
interesantes para ser descargados, usando por ejemplo criterios de ancho de banda
disponible o de capacidades físicas del dispositivo.
Este formato sigue permitiendo el uso de servidores HTTP sin modificar, optimizando
la utilización del ancho de banda sin salirnos del estándar.
En la siguiente figura podemos ver como las aplicaciones cliente piden de forma activa
los distintos fragmentos de vídeo:
En el punto de procesado de vídeo veremos cómo se generan este tipo de streams a partir
de un origen.
62
Apple HLS
HLS (HTTP Live Streaming) es un formato de transmisión desarrollado por Apple que
actualmente se encuentra publicado como RFC no estándar.
El índice de este formato es un fichero de texto plano (m3u8) que contiene etiquetas
para hacer referencia a las pistas que conforman el stream
Internamente tiene un índice (fichero Manifest en este caso) que indica las pistas de
audio, vídeo y subtítulos disponibles, así como el orden de preferencia, idioma, calidades y
codecs usados en cada caso. Este formato solo soporta el DRM Microsoft PlayReady.
MPEG-DASH
4.2.5 Contenedores
Los streams de vídeo se encapsulan en distintos contenedores para su transporte,
soportando distintas características y metadatos
Transport Stream
El estándar MPEG Transport Stream (TS por sus siglas en inglés) especifica un
contenedor pensado para almacenar información de audio, vídeo y datos asociados a
programas.
Es utilizado en la emisión digital de vídeo (Digital Vídeo Broadcast, DVB por sus siglas
en inglés), IPTV y en el mundo OTT sobre el formato HLS, aunque poco a poco los
fabricantes están adoptando otros contenedores y está perdiendo protagonismo.
63
MP4
Al igual que MPEG-TS, MP4 es un contenedor que almacena audio, vídeo y datos
asociados, como pueden ser subtítulos, meta información de las pistas de datos, etc.
fMP4
AES-128 es el estándar de facto para encriptar ficheros en el mundo OTT existiendo dos
modos, Counter Mode (CRM por sus siglas en inglés) o Cipher Block Chaining (CBC por
sus siglas en inglés) siendo cada uno usado por distintos DRMs e incompatibles entre sí.
Microsoft PlayReady
Smooth Streaming soporta este DRM gracias a la etiqueta XML Protection Header
presente en el fichero Manifest. Dicha etiqueta contiene toda la información necesaria, de
forma que los reproductores de los clientes puedan localizar a los servidores de licencia,
pedir la autorización para acceder a un contenido dado, y de esta forma obtener las claves
AES necesarias para reproducir el mismo.
Desde el lado del cliente se pueden modificar parámetros para aumentar la seguridad,
como por ejemplo agregar datos que puedan ser comprobados desde el otro extremo y así
poder validar que el usuario es legítimo. Igualmente, de esta forma podemos usar
parámetros obtenidos del VCMS, como por ejemplo una URL actualizada del servidor de
licencias.
A nivel público no existe mucha documentación sobre cómo funciona esta tecnología,
pero gracias a que podemos capturar el tráfico y analizarlo sabemos que internamente usa
SOAP para intercambiar mensajes entre el cliente y el servidor.
En la siguiente figura podemos ver el XML que contiene la etiqueta Protection Header:
64
<WRMHEADER xmlns="http://schemas.microsoft.com/DRM/2007/03/PlayReadyHeader"
version="4.0.0.0">
<DATA>
<PROTECTINFO>
<KEYLEN>16</KEYLEN>
<ALGID>AESCTR</ALGID>
</PROTECTINFO>
<KID>wFMbdsgMMEGWaBGS/3TrWQ==</KID>
<CHECKSUM>ytTI/KiC60I=</CHECKSUM>
<LA_URL>http://playready.directtaps.net/pr/svc/rightsmanager.asmx</LA_URL>
<CUSTOMATTRIBUTES>
<IIS_DRM_VERSION>7.1.1565.18</IIS_DRM_VERSION>
</CUSTOMATTRIBUTES>
</DATA>
</WRMHEADER>
Figura 4.6: PlayReady Protection Header
Apple FairPlay
Existe poca información sobre cómo funciona este formato creado por Apple, pero como
podemos ver en la página oficial de la compañía, está basado en HLS (Apple, 2016).
Dado que HLS permite definir los servidores de licencias de los que se pueden obtener
las claves AES, este DRM debe de actuar como barrera sobre dichas ubicaciones,
permitiendo solo a los usuarios legítimos acceder a las mismas.
Verimatrix
Verimatrix es otro DRM que actúa a nivel de cliente instalando el certificado con una
validez temporal limitada del servidor que contiene las claves AES, de forma que, si un
usuario no autorizado intenta acceder, la conexión al servidor fallará siendo imposible
recuperar las claves e impidiendo la reproducción del contenido.
Google Widevine
La versión de Widevine Classic hace uso de un formato propio de streaming, siendo muy
cerrado y difícil de implementar, estando solamente presente en versiones de Android 4.4
o inferiores.
La versión actual de este DRM es conocida como Widevine Modular. Siendo agnóstica
al tipo de stream se usa sobre múltiples formatos de streaming, sobre todo sobre MPEG-
Dash.
65
4.2.7 Codecs
Finalmente, el contenido que viaja dentro de los contenedores está codificado con alguno
de los codecs utilizados por la industria, reduciendo el peso del fichero final.
• H.264 MP4
• H.265 – HEVC
Master Stream
Recodificación a
distintas calidades.
Low BR Stream
High BR Stream
Separación de los
streams en múltiples
fragmentos de igual
duración.
Adaptative
Medium Medium Medium Medium Medium
streams BR Chunk BR Chunk BR Chunk BR Chunk BR Chunk Adaptative streams
indexes
High BR High BR High BR High BR High BR
Chunk Chunk Chunk Chunk Chunk
Encriptado opcional de
los fragmentos.
Creación de los ficheros
de índice que hacen
referencia a los mismos.
Encrypted Encrypted Encrypted Encrypted Encrypted
Low BR Low BR Low BR Low BR Low BR
Adaptative Chunk Chunk Chunk Chunk Chunk
66
Los pasos mostrados son los siguientes:
4.3.1 Encoding
Por regla general los orígenes suelen ser las versiones maestras digitales del contenido
que se va a enviar a las aplicaciones finales.
Dichas versiones suelen tener una calidad demasiado elevada como para poder enviarlos
a todos los dispositivos ya que la mayoría de ellos no disponen del hardware adecuado para
disfrutar de dicha calidad.
En este primer paso se generarán múltiples streams progresivos con distintas calidades,
listos para ser consumidos directamente en el caso de ser streams progresivos, o ser
procesados en los siguientes pasos si son adaptativos o hay que aplicar medidas de
seguridad.
Con esto conseguimos tener streams específicos por cada dispositivo, adecuando la
resolución, la ratio de transferencia y los codecs de audio y vídeo.
Para ello procesaremos cada una de las calidades, partiéndola en fragmentos de una
duración determinada, introduciendo el contenido en los contenedores ya descritos.
Habitualmente las pistas de vídeo y de audio en este punto se separan, generando pistas
independientes de fragmentos para cada una de ellas.
4.3.3 Encriptación
Como medida opcional de seguridad se pueden cifrar los distintos fragmentos de vídeo
mediante diferentes técnicas, siendo la más habitual AES usando una clave compartida.
De esta forma resulta imposible poder reproducir el contenido sin conocer previamente
dicha clave.
67
puede realizar validaciones contra otros servicios para decidir si el cliente puede o no
acceder a la clave. En este contexto el servidor de licencias se comporta como un DRM ya
que autoriza al cliente final.
Estos índices serán peticionados por los reproductores cuando quieran reproducir un
stream adaptativo, obteniendo la información necesaria del mismo para poder determinar
que fragmentos deben consumir.
68
5 Análisis de dispositivos HTML JS
Como vimos en las conclusiones del punto 3.3, si queremos hacer una aplicación de
distribución de vídeo y llegar al mayor número de usuarios, es una muy buena idea centrase
en las aplicaciones de Smart TV y dispositivos conectados.
En su mayoría todos ejecutan las aplicaciones sobre navegadores web en modo headless,
de forma que en este capítulo voy a analizar las capacidades hardware de los dispositivos,
las particularidades que tienen estas aplicaciones, así como el ecosistema HTML/JS, para
finalmente realizar un análisis de frameworks que usan esta tecnología y que nos pueden
ayudar con nuestro desarrollo.
En las conclusiones expongo las razones por las que he elegido TAL BBC como
framework de desarrollo, dando paso al siguiente capítulo en el que realizo un análisis para
entender sus puntos fuertes y las partes que podemos mejorar.
5.1.1 Pantallas
En 2016 el tamaño medio de las pantallas superó las 40 pulgadas y en este 2017 se espera
que alcance las 42.6 pulgadas (Kang, 2017).
Además, existe una tendencia a aumentar la resolución de las mismas, de forma que la
base de dispositivos existentes, compuesta por paneles HD (High Definition, 720 pixeles
verticales) y FHD (Full HD, 1080 pixeles verticales), verá como se incorpora una mayor
cantidad de paneles UHD (Ultra HD, 2160 pixeles verticales).
69
5.1.2 Métodos de entrada
Como ya hemos visto, existe una fragmentación respecto a los distintos métodos de
entrada disponibles en las aplicaciones.
Si nos centramos en Smart TV y dispositivos conectados, veremos que hay una gran
variedad de opciones para usar las aplicaciones, enumerándolos todos en los siguientes
puntos:
Mandos a distancia
Es el control que todo el mundo asocia a una televisión, sin necesidad de que tenga
capacidades de conexión o visualización de vídeo a través de internet. Los mandos han
evolucionado, introduciendo nuevas capacidades que veremos en los siguientes puntos, pero
todos incorporan botones direccionales, un botón de ok y finalmente un botón de volver.
Dentro de esta categoría y por similitud en la forma de interactuar con las aplicaciones
podemos incluir los mandos de consolas de videojuegos y de STB, además de teclados, ya
que, aunque tengan una configuración distinta todos incluyen botones direccionales y de
ok/volver.
Ratón
Por este motivo los fabricantes han optado por incluir ratones al aire, que hacen uso de
acelerómetros, para calcular el movimiento que queremos dar, mostrándolo en la pantalla
para que veamos donde estamos situados.
Con la irrupción de los dispositivos móviles, los fabricantes han lanzado aplicaciones
accesorio que permiten utilizar un ratón virtual usando la pantalla táctil.
70
Gestual
Es una variante del ratón, pero se merece un punto propio al hacer uso de cámaras que
captan el movimiento del usuario, permitiendo que con sus extremidades maneje un
puntero virtual en la pantalla, pudiendo hacer clic mediante distintos gestos.
Samsung con su Smart Interaction y Microsoft Xbox con Kinect son dos de los mayores
impulsores de esta tecnología, que actualmente se encuentra en desuso.
Voz
El control mediante voz es una de las apuestas más interesantes gracias a la buena
aceptación que tienen los asistentes virtuales controlados por voz como Siri de Apple,
Google Assistant de Google o Alexa de Amazon.
Este método de entrada está disponible en los dispositivos conectados y Smart TV desde
el año 2012, cuando Samsung la introdujo en sus modelos. Sony, Samsung, LG y Microsoft
son algunas de las marcas que ofrecen el control mediante comandos de voz de sus
dispositivos.
Las aplicaciones deben diseñarse para ser utilizadas mediante comandos de voz. El caso
de uso que podemos encontrar en distintas aplicaciones consta de una pantalla que solo se
muestra cuando se activa el modo de voz, la cual se superpone al contenido que está viendo
el usuario, mostrando las palabras clave que puede utilizar para navegar. Por ejemplo,
podremos decir el nombre de una categoría, indicar el nombre de un contenido que
queremos reproducir o el comando “volver” para ir a la pantalla anterior.
Es importante tener en cuenta que las distintas plataformas permiten configurar los
comandos que la persona debe pronunciar, así como indicar el porcentaje de coincidencia
detectado para que se ejecute dicho comando.
De esta forma se ha pasado de dispositivos con poca memoria y CPUs de gama baja, a
dispositivos con 4 núcleos. Esto se ha visto reflejado en el rendimiento de las aplicaciones,
que con el paso de los años han visto mejorado el mismo, obteniendo respuestas más fluidas
y en general, una mejor apariencia.
71
A pesar de esto, no podemos olvidar que el mercado es muy dispar, y a día de hoy se
venden también dispositivos dentro de las categorías de gama media y baja, por lo que es
muy importante optimizar las aplicaciones y tener en cuenta posibles problemas que puedan
aparecer por rendimiento a la hora de desarrollar una aplicación.
Lo primero que tenemos que tener en cuenta es como se consume el contenido a través
de estos dispositivos. Por regla general todo el mundo ve la televisión en el salón de su casa
a varios metros de distancia. De aquí nace la regla de los 3 metros o “10-Foot interface
rule”, como se le conoce en inglés, que vemos plasmada en la siguiente figura:
Esta regla nos dice que hay que diseñar las aplicaciones teniendo en cuenta que el usuario
va a visualizarlas a 3 metros de distancia, lo cual implica las siguientes particularidades:
• El tamaño mínimo de la letra debe de ser suficientemente grande como para leerse
en la distancia.
• Los colores que resaltan el contenido seleccionado deben de hacer contraste con
el resto de la pantalla para indicar al usuario donde está situado.
A nivel de interacción con el dispositivo, hay que tener en cuenta que el control principal
siempre va a ser el mando a distancia. Cuando desarrollamos nuestras aplicaciones debemos
ser conscientes de que el usuario tiene que saber qué elemento de la pantalla está
seleccionado. De esta forma podrá deducir que tecla direccional del mando a distancia debe
pulsar para navegar.
72
Desde el punto de vista de diseño tendremos que respetar los siguientes principios:
Dado que los dispositivos pueden incorporar múltiples mecanismos de entrada de forma
simultánea, cuando desarrollamos una aplicación debemos contemplar que una persona
pueda usar cualquiera de los mismos en cualquier momento. Esta circunstancia no debe de
romper la navegación en la aplicación.
Desde un punto de vista del desarrollo es importante pensar cómo vamos a gestionar
este control del foco, su navegación y los cambios entre distintos métodos de entrada, ya
que es un problema no trivial. Esto es debido a que en HTML/JS, como veremos en el
análisis de los distintos frameworks, el control de foco se tiene que hacer de forma manual,
es decir, hay que mantener el estado de quien tienen el foco, y cada vez que se recibe un
evento a tratar, modificar las clases CSS del elemento que pierde el foco y de los que lo
ganan. Existen dos aproximaciones, que son la implementación de una solución específica
para nuestra aplicación, o por el contrario hacer uso o crear un framework que ofrezca las
herramientas necesarias que permitan al desarrollador el abstraerse de la implementación.
73
5.3 JavaScript
JavaScript es un lenguaje que hoy cumple 20 años, desde que se aprobó el primer
estándar ECMAScript en 1997.
Este lenguaje puede ser ejecutado por interpretes en los navegadores web y en servidores,
gracias a Node.js.
5.3.1 Historia
El origen de este lenguaje se remonta a 1995 de la mano de Brendan Eich (cuyo trabajo
en Netscape posibilitó su nacimiento) (Eich, Mills, & User:Sneethli2, 2012), para mejorar
la forma en la que se interactuaba con la web.
Para evitar que cada fabricante implementara su propia versión del lenguaje, Netscape
envió a ECMA una propuesta para trabajar en una versión estándar del mismo, que
finalmente se aprobó en 1997 bajo el nombre de ECMAScript (ECMA, 1997).
74
En 1999 el estándar alcanza su tercera versión, siendo la base de lo que conocemos como
JS moderno. Tras esta versión el comité tardó 10 años en liberar una nueva versión del
estándar.
Todas estas mejoras ayudaron a desarrollar una nueva forma de crear aplicaciones web,
permitiendo hacer peticiones de datos de forma asíncrona y renderizarlos en el lado del
cliente sin tener que recargar la página entera. Este nuevo paradigma se definió en un
artículo que explica cómo aplicar esta técnica usando las tecnologías anteriormente citadas
(Garrett, 2005).
Estas dos versiones son muy relevantes para este proyecto, ya que la mayoría
dispositivos conectados soportan como máximo estas versiones, limitando los frameworks
que podemos usar en el desarrollo de nuestras aplicaciones.
A partir de este punto, el comité de ECMA decidió publicar versiones anuales con las
nuevas características del lenguaje, dinamizando todo el ecosistema de frameworks
existente.
ECMAScript 6, liberada en 2015 (ECMA, 2015) incluye por primera vez en mucho
tiempo grandes cambios sobre el lenguaje, como el uso de funciones lambda con las “fat
arrow functions”, y la introducción de las “promises” para mejorar la legibilidad del código
asíncrono, así como de las clases y otras muchas características.
ECMAScript 7 (ECMA, 2016) y 8 (ECMA, 2017) han sido publicados como borradores
y continúan introduciendo un subconjunto de mejoras que poco a poco se están viendo
implementadas en los intérpretes JS.
75
la especificación CommonJS, creada para permitir usar JavaScript fuera de los
navegadores, extendiendo el lenguaje con mecanismos de lectura y escritura desde disco,
buffers de bytes, manejo de sockets, organización del código en módulos, etc.
Node.js permite que, con un único lenguaje, los desarrolladores puedan programar tanto
las aplicaciones cliente en los navegadores, como los servicios en los servidores, lo cual ha
hecho que JavaScript se convierta en el lenguaje mayoritario con un uso exponencial, como
vimos en la introducción.
En la siguiente figura podemos observar una línea de tiempo con los eventos más
relevantes en el desarrollo del estándar ECMAScript:
El desarrollo de las Smart TV y los dispositivos conectados empieza a surgir entre 2011
y 2012, justo con la aparición de la versión ECMAScript 5.1.
Por este motivo, y dada la base de dispositivos que actualmente están en los hogares de
los usuarios, esta versión es la que tenemos que usar como referencia, aunque podamos
encontrarnos con bastantes problemas durante el desarrollo, ya que las implantaciones son
irregulares.
La realidad es que varios de los fabricantes no han implementado todas las características
de la versión 5.1 del estándar en sus dispositivos, sobre todo cuando hacemos referencia a
los dispositivos conectados. Esto hace que debamos de adoptar estrategias defensivas a la
hora de afrontar un desarrollo sobre los mismos, como puede ser el uso de librerías que
76
provean de polyfills, es decir, implementaciones software de las especificaciones para
soportarlas en dispositivos antiguos, y ceñirnos a las versiones menos actuales del estándar.
Con el desarrollo de los nuevos estándares y viendo que aportan nuevas estructuras de
sintaxis que clarifican mucho el código, han aparecido proyectos como BabelJS que
permiten transpilar el código de versiones superiores del estándar a inferiores, pudiendo
elegir sobre que versión de JavaScript queremos ejecutar el código.
Teniendo en cuenta todas las dificultades (dispositivos sobre los que queremos
desarrollar, limitaciones de los mismos y herramientas existentes) podremos hacer un
análisis y seleccionar el mejor camino para implementar nuestra aplicación.
5.4 Frameworks JS
Como hemos visto, el ecosistema de JavaScript está salpicado de multitud de proyectos,
herramientas y frameworks que nos pueden ayudar en el desarrollo de nuestras aplicaciones.
A partir del análisis previo que hemos realizado sobre las aplicaciones de vídeo bajo
demanda, los dispositivos conectados y Smart TV, así como las particularidades del
lenguaje, tendremos que constatar cuales de los siguientes puntos cumplen los frameworks
que vamos a analizar:
• Comunidad de desarrolladores.
JavaScript es un lenguaje que está en una constante evolución. Estos continuos cambios
son un poco contrarios a la naturaleza de los dispositivos conectados, ya que raras veces
77
los fabricantes actualizan los navegadores que llevan integrados, impidiendo el uso de todas
las facilidades que nos otorgan las sucesivas evoluciones del lenguaje. Por ello es importante
que el framework funcione al menos con versiones de ES5, o que se pueda transpirar el
mismo a dicha versión.
Manejo de foco
Como hemos visto el manejo del foco es un problema no trivial al que nos vamos a
enfrentar. Analizaremos si el framework es capaz de manejar de forma automática dicho
foco, o si en el caso contrario es posible implementarlo apoyándonos en la arquitectura que
este nos expone. Un punto a favor en este escenario es la inclusión de Virtual DOM, ya
que nos permite manipular el código HTML desde JavaScript.
Creación de componentes
Dado que las aplicaciones OTT son muy visuales y dichos elementos suelen ser
constantes, he evaluado si el framework permite generar componentes para que sean
reutilizados de una forma sencilla.
Como hemos visto, el mundo de los dispositivos conectados está altamente fragmentado
a nivel de capacidades y APIs soportados. Una correcta abstracción de dispositivos facilita
el desarrollo de las aplicaciones, ya que nos permite centrarnos simplemente en la parte
más visual y no en tener que consumir APIs distintos cada vez que queramos realizar una
acción común en múltiples dispositivos.
Comunidad
Actualmente JS es un lenguaje con una gran comunidad detrás que sigue muy de cerca
y de forma muy proactiva todas las novedades que nacen alrededor del mismo.
Disponer de una comunidad es muy ventajoso para poder reusar componentes o código.
78
Siguiendo estos criterios he analizado los siguientes frameworks: React.js, Angular.js 1.x
y TAL BBC.
React.js
React.js ha sido desarrollado por Facebook para agilizar la creación de los interfaces
gráficos, de forma que este framework se encarga puramente de la composición de las vistas
de las aplicaciones web.
No soporta por defecto la gestión de otro dispositivo de entrada que no sea un ratón.
Angular.js 1.x
Actualmente existe una versión de Angular.js basada en TypeScript, que he obviado por
los posibles problemas que nos podemos encontrar al transpilar el código de este lenguaje
a JavaScript.
Angular.js ha sido desarrollado y es mantenido por Google. Incluye muy buenas ideas
como es el uso de plantillas (templates en inglés) para crear las distintas partes de la
aplicación y conceptos de la programación reactiva, gracias a los objetos observables y el
data-binding. Esto permite que, si dentro de una plantilla estamos usando un objeto y este
79
cambia, veamos reflejada la variación sin tener que escribir la lógica necesaria para escuchar
los cambios en el objeto para reaccionar cuando esto sucede, y así poder modificar la vista.
TAL
TAL (TV Application Layer) es un framework desarrollado por la cadena BBC para
crear sus aplicaciones de vídeo en dispositivos conectados.
Además, nos ofrece componentes “tontos” que tienen una relación uno a uno con los
elementos visuales. Son conocidos como widgets y nos permiten organizar jerárquicamente
nuestras aplicaciones de una forma visual, simplificando aún más la gestión del foco.
Igualmente, como ya he mencionad, la gestión del foco es un punto que hace que nos
decantemos por este framework, ya que sus widgets la soportan por defecto. Además, se
incluye un Virtual DOM que nos permite aplicar patrones modernos siempre que lo
requiramos.
80
La comunidad es casi inexistente si lo comparamos con los otros dos frameworks
analizados, por tanto, no existen casi aportaciones fuera del repositorio original y la
documentación, aunque bastante completa, no se detiene en explicar en profundidad todas
las capacidades que nos ofrece.
5.5 Conclusiones
Como hemos visto, JavaScript y el ecosistema que lo rodea es muy activo e interesante,
con una trayectoria un tanto irregular, pero con una comunidad impresionante que hace
que este lenguaje tenga mucho futuro por delante.
Si ponemos nuestro objetivo en los dispositivos conectados, hemos visto que las
decisiones de los fabricantes respecto a las versiones implementadas del estándar y los APIs
privados implementados para dar acceso a todo el hardware, nos van a suponer más de un
quebradero de cabeza cuando afrontemos el desarrollo de aplicaciones de vídeo en
streaming.
Lo más importante es que podemos partir de una base común para una gran cantidad
de dispositivos, pudiendo llegar a un mayor número de usuarios, y poco a poco expandir la
aplicación según nuestras necesidades.
81
82
6 Análisis TAL BBC
Como hemos visto en el análisis de las distintas soluciones basadas en JavaScript, TAL
BBC es el framework que cumple con más requisitos para poder ser usado en nuestras
aplicaciones de vídeo.
A lo largo de este análisis repasaré todas las piezas que componen esta herramienta,
mostrando los puntos de interés a la hora de entenderla.
Compon
Badges Input API Image Views
App App ents Modulos de
Application App
Layer
Custom Integrations
Logic Aplicación
Widgets
l18n etc Label etc Utils etc
Devices
NodeJS Server
Game
Smart TVs Browsers STB Sticks
Consoles
83
6.1 Fundamentos TAL
Como vimos en el diagrama de la introducción, TAL está compuesto por muchas piezas,
pero además de estos componentes, debemos de tener en cuenta las convenciones y patrones
que son utilizados, ya que intentaré no salirme de los mismos a la hora de crear la
aplicación.
Las bases sobre las que se construye TAL son las siguientes: patrón AMD, patrón de
composición, uso de componentes y widgets, y, para terminar, el patrón facade para la
abstracción del hardware de los dispositivos. Todos los patrones pueden ser consultados en
el libro (Osmani, Learning Javascript Design Patterns, 2012).
6.1.1 Módulos
JavaScript en los navegadores, y por consiguiente en los dispositivos conectados, tiene
ciertas limitaciones para cargar ficheros de script de forma remota.
Dichos ficheros se cargan mediante la etiqueta HTML script. A partir de ese momento
el navegador descarga los archivos, el intérprete JavaScript lo procesa, descartando
ficheros, verificando si la sintaxis es correcta y segura, optimizando las instrucciones, y
finalmente ejecutando el código.
Al no existir una separación en librerías de código, por defecto el intérprete pondrá todas
las variables en el espacio de nombres global. Esto hace que sea necesario usar algún patrón
que nos permita separar nuestro código en módulos, de forma que no encontremos colisiones
entre los mismos.
Existen varias formas de solucionar este problema, como es aplicar cualquiera de los
patrones módulo que podemos encontrar en el libro (Osmani, Learning Javascript Design
Patterns, 2012).
Require.js necesita que la librería se cargue en el documento, siendo opcional definir una
configuración para la misma y un punto de entrada a la aplicación.
Los módulos deben de estar encapsulados dentro de la palabra reservada “define” por la
librería, o por el método require.def de la misma.
84
Cada módulo cuenta con las siguientes partes
• Nombre Opcional. Cadena de texto que debe que coincidir con la ruta
usada para cargarlo
En la siguiente figura podemos ver los distintos modos de los que disponemos para
instanciar los módulos:
/**
* confA module.
* Object module without name
*/
define({foo: 'bar'});
/**
* confB module.
* Object module with name
*/
define('confB',{foo: 'bar'});
/**
* confC module.
* Function module with name
*/
define('confC', function (){
return {foo: 'bar'};
});
/**
* confD module.
* Function module with name and dependencies
*/
define('confD', ['confB'], function (confB){
return confB;
});
Figura 6.2: Definición módulos Require.js
Como hemos visto, podemos definir las dependencias dentro de cada módulo, si usamos
una función para poder instanciarlas y hacer uso de ellas.
Require.js permite cargar módulos mediante la función “require”. Esta función puede ser
usada de dos formas, la primera para cargar dependencias de cero, y la segunda para
recuperar las instancias que la librería ha cargado previamente.
85
En el siguiente ejemplo vemos como se cargan dependencias de cero. Como parámetros
la función “require” espera un array de dependencias y de una función que tiene como
argumentos las instancias de las mismas:
/**
* Require modules directly
*/
require([
'confA',
'confB'
], function (
confA,
confB
){
// operate with dependencies
}
6.1.2 Composición
TAL provee su propio mecanismo de composición, que junto con los módulos AMD de
Require.js, otorga al framework las herramientas necesarias para que podamos separar
nuestros módulos en unidades lógicas bien aisladas, permitiendo eliminar la redundancia
de código (patrón Don’t Repeat Yourself, DRY por sus siglas en inglés).
86
Estas clases además incluyen un constructor, que en el caso de TAL tiene un nombre
fijo “init”. Dicho constructor se llama cuando ejecutamos la pseudo-clase con la palabra
reservada “new”, ejecutándose solo en ese momento.
En el caso de que el método exista en la clase superior, este será sobrescrito, y podremos
invocarlo con la palabra reservada “super”.
En la siguiente figura podemos ver cómo podemos crear una clase a partir de
“antie/class”, cómo podemos extenderla y finalmente cómo llamar a los métodos propios y
los de la clase superior:
// defines a class
define('myClass', ['antie/class'], function (Class){
return Class.extend({
init: function () {
// call the parent init function
this._super();
},
myMethod: function (bar, foo) {
return bar + foo;
}
});
});
// defines a subclass
define('mySubClass', ['myClass'], function (MyClass) {
return MyClass.extend({
myMethod: function (bar, foo, poo) {
// overrides the parents method behaviour
return 'salt' + poo;
}
})
});
// load the dependencie, create a instance of the class
// and calls the myMethod method
require(['mySubClass'], function(MySubClass){
var mySubClass = new MySubClass();
mySubClass.myMethod(1,2,3); // outputs 'salt3'
});
87
Todo TAL está construido siguiendo esta arquitectura. En la siguiente figura podemos
ver los grupos de módulos de primer orden que heredan de “antie/class”:
Devices
RuntimeContext
Super clase que contiene la aplicación actual y el dispositivo que nos abstrae del
hardware dándonos acceso al almacenamiento y otros subsistemas. En el punto 6.1.7 los
mismos.
Application
Widgets
Others
Implementación de patrones, módulos sin relación entre sí, fuentes de datos, etc.
88
6.1.3 Widgets
Los widgets en TAL son la base de organización visual/lógica más básica, aunque pueden
obtener una gran complejidad como veremos.
Casi todos los widgets heredan sus métodos de “antie/widgets/widget”, siendo de especial
relevancia los métodos “setDataItem” y “getDataItem”, que nos permiten almacenar un
objeto JavaScript en él. Dicho objeto podremos recuperarlo en los eventos que disparan los
widgets, ampliando la versatilidad del framework.
Widgets organizativos
Estos widgets nos facilitan la creación de las vistas, dándonos una jerarquía y navegación
automática. TAL nos ofrece listas y contenedores. Los métodos que exponen suelen ser
relativos a agregación y eliminación de hijos, para poder construir la jerarquía antes
mencionada.
Las listas pueden ser horizontales y verticales, y ellas mismas se encargan de gestionar
el foco si reciben un evento de teclado.
Jugando con los distintos widgets seremos capaces de crear aplicaciones completas.
Widgets básicos
Los botones, imágenes, textos o barras de progreso nos permiten agregar funcionalidad
básica a la aplicación, como puede ser mostrar texto e imágenes o escuchar eventos cuando
un usuario selecciona un botón. Todos incluyen métodos que nos permiten modificar su
apariencia en tiempo de ejecución y no solo desde el constructor.
Widgets avanzados
Los widgets que hemos visto anteriormente son, desde un punto de vista lógico, estáticos.
Podemos agregar y eliminar a sus hijos, pero están orientados a ser posicionados en la
pantalla y modificar sus valores, no a sus descendientes.
89
Cuando desarrollamos aplicaciones de vídeo en línea los datos los obtenemos de internet,
así que no los conocemos con antelación.
Los widgets avanzados son puntos fijos de las vistas que proporcionan mecanismos para,
una vez que hemos obtenido los datos dinámicos, facilitar la creación de los hijos,
agregándolos de forma automática.
Los carruseles de TAL nos ofrecen toda esta funcionalidad, como podemos ver en la
aplicación de ejemplo.
Composición de widgets
Si con los widgets con los que nos provee el framework no son suficientes siempre
podemos componerlos de forma que se ajusten a nuestras necesidades. Un caso típico sería
una portada de una película, a la que podemos agregar un botón, una imagen y un texto.
De esta forma no habrá caso que no esté cubierto por TAL.
6.1.4 Componentes
Los componentes en TAL son un caso especial de widget que se encarga de controlar el
ciclo de vida de la aplicación.
Tienen una relación uno a uno con los Component Containers, ya que es el punto de
anclaje donde se introducen y es quien gestiona la apertura, cierre e historia de los mismos.
Los componentes son los encargados de crear y agregar los distintos widgets que
formarán nuestra aplicación, así como escuchar a los eventos de los usuarios para que estos
puedan interactuar con la misma.
90
Component
show
init()
load event
beforerender
Antes de que el
event
usuario tenga el
control
beforeshow
event
container.back()
aftershow
event
Container Component
history stack running
Un componente
nuevo entra en el
Component
Container
beforehide
getCurrentState()
event
Después de la
afterhide acción de usuario
event
Component
shut down
Figura 6.7: Ciclo de vida de un componente
TAL no especifica para qué debe de ser usado cada evento, así que propongo la siguiente
organización del código aprovechándonos de este ciclo de vida:
91
Método init
Es el constructor del componente. Se ejecuta una única vez, por lo que es interesante
para realizar acciones que deban de perdurar durante todo el ciclo de vida del componente,
como asignar un contexto de ejecución a las funciones de callback.
Evento load
Evento que es lanzado cuando se carga el módulo por primera vez. Puede ser usado para
construir la vista. Al ser un evento del ciclo de vida del componente, dentro del mismo
recibimos los argumentos que se le han pasado. Dichos argumentos pueden ser utilizados
para configurar la vista según nuestras necesidades.
Evento beforerender
Este evento es lanzado antes de que los widgets llamen al método “render”, en el cual
obtenemos el DOM real que es agregado a la página web. Por este motivo no podemos
ejecutar funciones que intenten manipular el DOM. Podemos usar este evento para
configurar los listeners sobre los widgets.
Evento afterender
Evento aftershow
En este punto tenemos la vista disponible y el DOM está en la página web. En este
punto podemos manipular nuestros widgets incluso con métodos que manipulen el DOM.
Evento beforehide
Evento afterhide
92
Método getCurrentState
El objeto que retornemos en este método estará disponible si hacemos back dentro del
contexto del componente. Interesante si queremos hacer reset al estado del componente y
guardar solo la información imprescindible, ya que podemos ahorrar memoria con el
proceso.
TAL BBC nos ofrece distintos tipos de widget a la hora de componer las pantallas, pero
como hemos visto, si queremos tener un control del histórico de nuestra aplicación, debemos
de tener una relación uno a uno entre los component container y los componentes.
93
6.1.6 Navegación y gestión de foco automática
Una de las características que hizo que me decantara por TAL es la gestión de foco que
incorpora gracias al uso de un VDOM y de una estrategia de propagación del foco muy
eficiente.
En un primer lugar tenemos la gestión del foco. Los botones son los únicos widgets
capaces de obtener el foco. Cuando ponemos el foco en un botón, el widget notifica a la
aplicación de que va a obtener el foco. El contexto de aplicación entonces quitara el foco
al widget anterior en el caso de existir agregándose la clase CSS focus al nuevo widget.
En la siguiente figura podemos ver un árbol de widgets, en este caso tendremos una lista
horizontal que contiene cuatro botones como hijos, estando el último en posesión del foco:
1. Recibimos el evento elevado por pulsar la tecla izquierda. Como el ítem no tiene
más hijos y no puede gestionar por si mismo el evento, lo eleva a su padre.
3. La lista horizontal puede gestionar los botones derecho e izquierdo. En este punto
consultara a sus hijos para ver si alguno de ellos puede obtener el foco
94
6.1.7 Dispositivo
La abstracción del dispositivo solo puede ser accedida desde el módulo RuntimeContext:
var runtimeContext = require('antie/runtimecontext');
var device = runtimeContext.getDevice();
Storage
En la siguiente figura podemos ver como se realizan las llamadas y gestionan los callback:
var handlers = {
onLoad: function(response){
console.log('okcb '+response);
},
onError: function (response){
console.log('nokcb '+response);
}
};
device.loadURL('https://httpbin.org/get', handlers); // will log the ok response
device.loadURL('https://httpbin.org/status/400', handlers); // will log the nok
Figura 6.12: XHR
95
Media
Una vez que accedemos al objeto media, podemos iniciar la reproducción del contenido.
Hay que prestar especial atención a como se reproduce.
Config
Los problemas detectados son visibles en la aplicación de ejemplo de TAL BBC, así
como cuando empezamos a trabajar con el mismo.
La aplicación de ejemplo que ofrece TAL BBC no funciona, partes enteras de la misma
están desactualizadas y rompen sin ninguna explicación. Esto hace que empezar a trabajar
con la herramienta sea complicado y tedioso.
96
Código susceptible a errores
Este punto puede parecer poco importante o que saca a la luz malas prácticas por parte
del desarrollador, pero no es así.
El problema con TAL es que los métodos que expone, así como la gestión de los eventos,
no es siempre clara. Esto junto a que el framework tiende a ocultar los errores en tiempo
de ejecución, hace que sea complicado el darse cuenta de donde se están cometiendo los
errores de implementación.
El primer problema que he notado es que no existe una separación clara entre el contexto
de TAL y el contexto de aplicación, ya que podemos encontrar dependencias dentro de las
definiciones de los dispositivos a la estructura de directorios de la aplicación. Un framework
debería de estar auto contenido, permitiendo ser configurado mediante ficheros creados
para tal efecto, pero en ningún caso debería de forzar una estructura determinada de la
aplicación.
Peticiones XHR
97
Creación de vistas
A lo largo del análisis he puesto el foco en las facilidades que nos da TAL respecto a la
composición de pantallas y la navegación automática. La realidad es que si queremos
obtener todos los beneficios debemos de agregar muchas capas a dichas pantallas,
entorpeciendo el desarrollo y haciendo difícil el poder abstraerse para poder pensar en el
VDOM que nos ofrece el framework.
Versión de ECMAScript
6.3 Conclusiones
El equipo de desarrolladores de BBC ha realizado un gran trabajo con TAL, ofreciendo
una base de código clara y bien documentada. Usando patrones de desarrollo bien conocidos
e intentado hacer lo más accesible posible su herramienta.
La solución que ofrecen para organizar las vistas y navegación de nuestra aplicación
mediante widgets es muy elegante y sofisticada, los componentes y su ciclo de vida permiten
estructurar nuestro código de una forma limpia aun sin ser un framework MVC.
Para concluir creo que con TAL BBC se pueden hacer aplicaciones de una complejidad
media o baja, pero es suficiente para iniciarse en el mundo del desarrollo de aplicaciones
de vídeo en streaming.
98
7 Aplicación - Generador Yeoman TAL
Ahora que entendemos el complicado ecosistema de las aplicaciones OTT vamos a
analizar un posible entorno de desarrollo para poder afrontar los retos que se nos plantean
de una forma más sencilla, mejorándolo en los puntos que considero más críticos.
7.1 Retos
Los retos que nos encontramos cuando queremos empezar a desarrollar una aplicación
en cualquier lenguaje y framework nuevo son comunes y se pueden resumir en: accesibilidad
de la documentación, estructura definida de código y aplicaciones de ejemplo.
A raíz de los problemas detectados con el framework voy a solucionar los relacionados
con los siguientes puntos: estructura y código de ejemplo:
7.1.1 Estructura
El primer paso que debemos dar es entender bien como tenemos que estructurar el
código, ya que si somos capaces de visualizar donde debemos de colocar cada una de las
piezas que conforman nuestra aplicación, será más fácil crear un código sencillo de mantener
y escalable en el tiempo.
99
7.2 Entorno de desarrollo
Para el desarrollo de este proyecto vamos a necesitar un editor de texto, cualquier
navegador moderno, las herramientas de desarrollo incluidas en el navegador, Node.js y
NPM para poder usar módulos ya creados, y Yeoman como director, que gracias al
generador que vamos a desarrollar, se encargará de crear la base para nuestros futuros
proyectos.
En la siguiente figura podemos ver los logos de todos los componentes que forman parte
del entorno de desarrollo:
En los proximos puntos detallo que aplicaciones y versiones de las mismas he usado, y
por qué recomiendo usar las mismas:
Con la popularidad de las aplicaciones web han surgido multitud de editores que
permiten usar herramientas como validadores de código (linters como JSHint o ESLint),
transpiladores (Babel), y procesadores de código que nos permiten minimizar el tamaño del
mismo (Uglify).
Sublime Text fue el primer editor de texto ligero que introdujo nuevos flujos de trabajo,
incluyendo un gestor de dependencias que permite personalizar el editor de una forma
inmediata, ajustando el mismo a las necesidades de cada desarrollador. A su sombra han
aparecido muchos editores que, partiendo de todas las buenas ideas de Sublime, las han
100
ido perfeccionando, incorporando nuevos conceptos o eliminando la necesidad de pasar por
caja para poder hacer un uso legal del editor.
Podemos dividir los editores entre los que son de código abierto y gratuitos, como Atom
de GitHub, Visual Studio Code de Microsoft y Brackets de Adobe; y los que son de código
cerrado y de pago, como Sublime Text 2.x/3.x y WebStorm de Jetbrains. Existen muchos
más editores, pero creo que estos son los más relevantes cuando nos centramos en el
desarrollo web o de JavaScript.
Para este proyecto he usado Visual Studio Code (Microsoft, 2017) de Microsoft, ya que
se integra muy bien con las herramientas que he utilizado; además es libre y gratuito,
soporta extensiones y permite usar los atajos de teclado de Sublime y Emacs, editores de
texto que vengo usando desde 2010.
7.2.2 Navegadores
Dado que las aplicaciones que corren en los dispositivos conectados y las Smart TV no
son más que aplicaciones web maquilladas para que no muestren la barra de herramientas
del mismo, la elección de un buen navegador es imprescindible para poder desempeñar
nuestro trabajo.
Hoy en día todos los navegadores web incluyen herramientas suficientes como para
ayudarnos en el proceso de desarrollo, así que no hay una elección clara al respecto.
Por costumbre yo he usado Google Chrome para realizar este proyecto de fin de carrera,
ya que suelen incorporar, versión tras versión, nuevas capacidades a las herramientas de
desarrollo.
Este último punto es muy importante, ya que desde dicha consola podemos tomar
control de la aplicación si sabemos, por ejemplo, recuperar el contexto de ejecución,
pudiendo modificar el comportamiento de la misma en tiempo real y siendo muy útil para
101
desarrollar nuevas características de nuestras aplicaciones o cerrar un bug que se está
resintiendo o que es difícil de ver.
Otra opción que nos ofrece esta herramienta de desarrollo es la posibilidad de crear
dispositivos virtuales, permitiendo modificar las resoluciones horizontales y verticales, así
como los userAgents. Esto será de especial interés para poder probar que nuestra aplicación
identifica a los dispositivos de forma correcta.
7.2.4 Node.js
Como hemos visto en el análisis de JavaScript, Node.js es un intérprete de este lenguaje
que no requiere de un navegador y que permite hacer operaciones de entrada y salida sobre
la máquina que se ejecuta.
La versión usada es Node.js v8.0.0, versión estable a la fecha de escribir esta memoria.
7.2.5 NPM
Node Package Manager (NPM por sus siglas en inglés) es una herramienta que nos
permite gestionar las dependencias de nuestros proyectos de una forma sencilla, al generar
un fichero (package.json) que contiene los paquetes instalados. Esto permite aligerar de
una forma considerable el tamaño de los repositorios, ya que solo debemos subir nuestro
código y no el de las dependencias. Además, hace que la tarea de administrar dichas
dependencias en el caso de que tengamos que actualizarlas, sea mucho más sencilla.
NPM es uno de los causantes del éxito de Node.js, ya que existen una cantidad de
paquetes disponibles que cubren casi cualquier necesidad que podamos tener.
7.2.6 TAL
El framework que vamos a usar para desarrollar nuestra aplicación de ejemplo está en
constante desarrollo, incluyendo nuevos dispositivos y modificando la forma en la que se
comporta versión tras versión.
7.2.7 Gulp
Gulp es una herramienta que permite ejecutar tareas de mantenimiento o procesado de
código, así como lanzar servidores web, etc.
102
Es interesante, ya que muchos de los módulos que pueden ser usados con ella simplifican
significativamente el flujo de trabajo de los desarrolladores, disminuyendo el tiempo de
configuración y acelerando el de desarrollo.
7.2.8 Yeoman
Yeoman es un cliente basado en Node.js que facilita la creación de generadores de
aplicaciones.
Lo que nos ofrece esta herramienta es un entorno común para todos los generadores, así
como la posibilidad de buscar los mismos en su página web.
Gracias a los generadores, un usuario que sepa utilizar la herramienta puede, en cuestión
de minutos, empezar a desarrollar aplicaciones usando un framework nuevo, ya que el
generador se encargará de crear todos los ficheros necesarios, instalar las dependencias y
personalizar el proyecto en base a las preguntas que se le hacen al usuario.
Por la inmediatez de uso y lo extendido que está, he decidido usar esta herramienta para
desarrollar un generador TAL, ya que no existe ninguno para dicho framework, y puede
ser una buena oportunidad para acercar el desarrollo de aplicaciones en dispositivos
conectados al público general.
103
En el Anexo A podemos ver como configurar el sistema para ejecutar Yeoman junto con
“generator-tal” y así poder crear nuestra primera aplicación.
Esta aplicación es muy básica, no define buenas prácticas, los espacios de nombre están
ligados al de la aplicación, no es fácil de configurar y no funciona sin modificar el código,
siendo frustrante como aplicación de inicio.
A nivel de librerías la versión de Require.JS incluida y que se usa por defecto es antigua,
no incluye ninguna librería que nos permita usar sintaxis moderna.
Creo que es importante el dar una buena organización a los ficheros, limpiar el código
separando la funcionalidad en los módulos necesarios y cubrir varios casos de uso
incluyendo los wireframes de los mismos.
7.3.2.1 Estructura
La estructura del ejemplo TAL usa como base el código ofrecido por BBC, pero
modificando el mismo para que sea más fácil el desarrollo.
Dado que, como vimos en el análisis del framework, toda la carga de módulos está basada
en Require.js. Gracias a ello he podido modificar los namespaces a mi gusto, simplificando
los mismos, facilitando la legibilidad y accesibilidad de los módulos creados por los usuarios.
104
7.3.2.2 Aislar funcionalidad
En el ejemplo proporcionado por BBC (BBC, 2016) podemos observar como el
documento HTML que devuelve el servidor Node.js mezcla de una forma nada clara la
configuración de la librería Require.js junto con la configuración del framework y el punto
de entrada a la aplicación.
Como hemos visto en la estructura de la aplicación, hay directorios que no pueden ser
completamente eliminados, ya que TAL necesita leer ficheros desde el contexto de
aplicación para poder inicializarse.
La idea que quiero implementar es simplificar todo lo posible este punto de entrada,
cargando la librería de Require.js como una dependencia de Node.js en vez de TAL BBC
para poder disfrutar de los nuevos flujos que ofrece la librería. Así mismo la configuración
y punto de entrada quedarán fuera de dicho documento.
El objetivo de todos estos cambios es facilitar la lectura del código siguiendo las guías
de estilo que nos dicta la documentación de Require.js.
Todas las pantallas se van a componer a partir de la siguiente figura, que analizo a
continuación:
En esta pantalla podemos apreciar una lista horizontal que contiene dos elementos. El
primero de ellos es una lista vertical a modo de menú, y el segundo es un espacio reservado
para representar los distintos subcomponentes asociados a las opciones del menú.
105
La vista vertical se configura a partir de un fichero externo. La acción predeterminada
es cargar un componente en la caja habilitada de forma dinámica. De este modo, editando
el fichero de configuración del menú, y añadiendo componentes en su directorio, podemos
evolucionar la aplicación según nuestras necesidades.
En los siguientes puntos voy a comentar los casos de uso incluido y su importancia.
Su relevancia viene por ser la pantalla principal, pudiéndonos fijar en cómo se construyen
las vistas dentro de un componente, así como en las buenas prácticas a la hora de manejar
los estados de componente.
Como detalle final, los elementos son navegables y permiten interactuar con los mismos,
de forma que muestro como se usan los listeners de eventos en TAL y las buenas prácticas
asociadas a los mismos.
106
En la siguiente figura podemos ver la composición de esta pantalla:
A esta pantalla accederemos desde la lista de vídeos. Cobra relevancia ver cómo podemos
pasar datos cuando cambiamos de un componente a otro, lo cual nos permite construir
vistas con los datos que ya disponemos, o pasar identificadores que nos sirven para obtener
los datos relacionados con los mismos.
107
Reproductor de vídeo
Es interesante ver como se tratan los eventos del reproductor, así como se pueden
actualizar los tiempos cuando recibimos los eventos pertinentes.
En este punto explicaré el ciclo de vida del generador, la estructura que he adoptado.
108
• conflicts Resolución de conflictos. Método interno de Yeoman
7.3.3.2 Estructura
Como podemos ver en la siguiente figura, la estructura básica de un generador es muy
sencilla:
.
├── LICENSE
├── README.md
├── __tests__
│ └── app.js
├── generators
│ └── app
│ ├── index.js
│ └── templates
│ └── dummyfile.txt
├── package-lock.json
└── package.json
Figura 7.8: Estructura generador-tal
El trabajo realizado es sobre el fichero “generators/app/index.js”, donde se encuentra
toda la lógica necesaria para crear la aplicación base, y en templates, que es donde está
almacenada la aplicación TAL anteriormente descrita.
7.3.3.3 Conclusiones
Crear el generator-tal ha sido sencillo, ocupando todo el trabajo la organización del
código de ejemplo, ya que Yeoman facilita mucho, con su ciclo de vida, el realizar el proceso
de forma correcta.
109
110
8 Conclusiones
Gracias a este proyecto fin de carrera he podido profundizar en el ecosistema de las
aplicaciones OTT, permitiéndome entender con mayor claridad todos los actores
involucrados. De esta forma he conseguido tener una visión global de lo importante que es
este mercado, la proyección a futuro que tiene, y cuáles son las tendencias actuales del
mismo.
En un sector en el que se prevé que el 80% del tráfico en internet sea vídeo, creo que el
haber obtenido dicha visión puede prepararme para los retos con los que puedo encontrarme
en mi futuro profesional.
Espero haber plasmado la importancia que tiene este sector, así como su dinamismo
potenciado por los distintos fabricantes de dispositivos de consumo que están compitiendo
entre sí para obtener el mayor número de usuarios posibles y de JavaScript como lenguaje
de programación casi universal para las aplicaciones.
Como punto negativo he podido confirmar que la fragmentación es una gran lacra que
impide que los desarrolladores puedan incorporarse a este mercado de una forma sencilla,
lo que ha desembocado en un ecosistema de aplicaciones que aún no está maduro. Por otro
lado, esto brinda una oportunidad única a quien quiera introducirse en este mercado, ya
que no hay competencia real.
El análisis técnico de todos los actores de las plataformas de vídeo bajo demanda me ha
permitido ver que las aplicaciones de vídeo tienen detrás de sí una compleja infraestructura
altamente entrelazada.
Antes de realizar este proyecto fin de carrera no era consciente de la cantidad de servicios
que una aplicación es capaz de consumir, y tampoco entendía la complejidad de las
relaciones que hay entre cada una de las partes.
El detalle que me ha resultado más interesante es el relacionado con el vídeo y todos los
procesos que se llevan a cabo desde los orígenes hasta su distribución a los clientes finales.
Al no estar cubierta por la especialidad de Telemática, los distintos pasos a los que se
someten los vídeos y en especial la parte relacionada con la segurización de los mismos ha
sido completamente nueva para mí. Esto me ha ayudado a desmitificar tecnologías como
el DRM, entendiendo bien cómo funciona, visualizando donde están los problemas éticos
que pueden atentar contra nuestra libertad en el futuro, relacionados con las malas
prácticas de las compañías, no con la tecnología en sí misma.
En relación con los modelos de segurización me han resultado interesantes las distintas
estrategias que siguen los fabricantes para disuadir a los usuarios, en especial las firmas
estenográficas, ya que antes de este proyecto no conocía nada acerca de las mismas.
Con el análisis en profundidad de TAL BBC he podido aprender cómo está construido
un framework en constante desarrollo, estudiando mucho sobre cómo hay que plantear este
111
tipo de herramientas para que otros usuarios sean capaces de usarlas y extenderlas. El
resultado de este análisis se ha visto reflejado en la fase de desarrollo, en la cual he
intentado solucionar los problemas más evidentes que he identificado en TAL, como es la
falta de convenciones.
Como conclusión final decir que he aprendido y disfrutado mucho según he escrito la
memoria. La visión más completa que ahora poseo del desarrollo de aplicaciones de VOD
en dispositivos conectados hace que me parezca un sector con muchísimo potencial y retos
por delante, lo cual me hace seguir queriendo trabajar e investigar más sobre él.
112
9 Líneas futuras de investigación
A lo largo de esta memoria hemos visto que el ecosistema OTT es muy amplio y
complejo, a la par que hermético al no existir mucha documentación sobre ninguno de los
actores y tecnologías involucradas para proteger el contenido de usos fraudulentos.
Del análisis realizado podemos determinar dos líneas futuras de investigación, una
relacionada con la creación de un framework que nos permita agilizar y unificar el desarrollo
de aplicaciones de VOD y otra relativa al desarrollo de un reproductor de vídeo que
solucione los problemas de incompatibilidad que existen con los distintos streams y
dispositivos.
113
9.2 Desarrollo de reproductor HTML5
Otra futura línea de investigación que puede desarrollarse en paralelo con la anterior es
la creación de un reproductor de vídeo multidisposivo que permita reproducir casi cualquier
formato de streaming, sea cual sea el codec y DRM asociado.
• Ser totalmente compatible con las tecnologías HTML JS sin requerir de ningún
motor o lenguaje externo al navegador para poder funcionar.
Como hemos visto en el Capítulo 5 “Análisis de dispositivos HTML JS”, los navegadores
están en una constante evolución, y gracias a las políticas de actualización de estas
aplicaciones en los PC, las últimas novedades están ampliamente implantadas.
114
Trabajando en conjunto con dichas tecnologías deberíamos de ser capaces de tratar
cualquier stream de vídeo desde el navegador web, pudiendo recodificar el vídeo y audio
en el caso de que no esté soportado gracias a WebAssembly y las Media Source Extensions.
En el caso de que el contenido esté protegido con tecnologías DRM podríamos usar las
Encrypted Media Extensions junto con WebAssembly para hacer todas las operaciones de
autenticación y desencriptarlo de forma eficiente.
115
116
10 Glosario
AES Advanced Encryption Standard
ABR Average Bit Rate
API Application Programming Interface
AD Advertising
AMD Asynchronous module definition
AVOD Advertisement VoD
ES ECMA Script
ECMS Editorial CMS
EPG Electronic Program Guide
I18n Internationalisation
ID Identifier
IPTV IP Television
JS JavaScript
JSON JavaScript Object Notation
117
OTA Over The Air
OTT Over The Top
118
11 Bibliografía
LG. (2017). WebOSTV UX Checklist. Obtenido de http://webostv.developer.lge.com/design/ux-
checklist/)
Cisco. (2015). By 2019, 80% of the World’s Internet Traffic Will Be Video [Cisco Study]. (T.
Insights, Productor) Obtenido de http://tubularinsights.com/2019-internet-video-
traffic/#ixzz4fwgHOGvz
Council, FTTH. (2011). The Growth of Fiber to the Home. Obtenido de The Growth of Fiber to
the Home: https://toolkit.fiberbroadband.org/d/do/21
Crockford, D. (2001). JSON. Obtenido de http://www.json.org/
The Economist. (2017). VR Has been more about hype. Obtenido de
https://www.economist.com/news/business/21724863-vr-has-been-more-about-hype-
substance-will-change-reality-check-virtual
Accedo. (2017). Transforming the video experience. Obtenido de https://www.acccedo.tv)
A. Colwell, A. B. (2014). Media Source Extensions W3C Candidate Recommendation. Obtenido
de W3C: https://www.w3.org/TR/2014/CR-media-source-20140717
Aguinaga, J. (2016). How it feels to learn JavaScript in 2016. Obtenido de Hackernoon:
https://hackernoon.com/how-it-feels-to-learn-javascript-in-2016-d3a717dd577f
Apple. (2016). Apple FairPlay Streaming. Obtenido de https://developer.apple.com/streaming/fps
Apple. (5 de July de 2017). Support. App Store. Obtenido de
https://developer.apple.com/support/app-store/
BBC. (2016). TAL Example. Obtenido de Github: https://github.com/bbc/talexample)
Dash-IF. (2014). DASH Industry Reference player. Obtenido de GitHub: https://github.com/Dash-
Industry-Forum/dash.js/
ECMA. (1997). ECMAScript: A general purpose, cross-platform programming language.
Obtenido de http://www.ecma-international.org/publications/files/ECMA-ST-
ARCH/ECMA-262,%201st%20edition,%20June%201997.pdf)
ECMA. (2011). Standard ECMA-262 5.1 Edition. . Obtenido de https://www.ecma-
international.org/ecma-262/5.1/
ECMA. (2013). ECMA-404. The JSON Data Interchange Format. Obtenido de http://www.ecma-
international.org/publications/files/ECMA-ST/ECMA-404.pdf
ECMA. (2015). Standard ECMA-262 6th Edition. Obtenido de https://www.ecma-
international.org/ecma-262/6.0/
ECMA. (2016). Standard ECMA-262 7th Edition. Obtenido de https://www.ecma-
international.org/ecma-262/7.0/
ECMA. (2017). Standard ECMA-262 8th Edition. Obtenido de https://www.ecma-
international.org/ecma-262/8.0/
Eich, B., Mills, C., & User:Sneethli2. (2012). A Short History of JavaScript. (W3C) Obtenido de
W3C: https://www.w3.org/community/webed/wiki/A_Short_History_of_JavaScript
Fontaine., R. (2016). Twitch Cheer. Obtenido de https://blog.twitch.tv/introducing-cheering-
celebrate-together-da62af41fac6
Garrett, J. J. (2005). Ajax: A New Approach to Web Applications. Obtenido de Adaptative path:
http://adaptivepath.org/ideas/ajax-new-approach-web-applications
Github. (2016). The estate of the Octoverse . Obtenido de https://octoverse.github.com
Google. (2017). Versiones de la plataforma. Obtenido de
https://developer.android.com/about/dashboards/index.html#Platform
Google. (2017). YouTube Super Chat. Obtenido de
https://support.google.com/youtube/answer/7277005
119
IAB + Maru/Matchbox. (2017). The Changing TV Experience. Obtenido de
https://www.iab.com/insights/2017ChangingTVExperience
Kang, A. (23 de January de 2017). As Larger TVs Gain Popularity, TV Panel Area Demand to
Grow 8 Percent in 2017. (IHS Markit) Obtenido de https://technology.ihs.com/587999/as-
larger-tvs-gain-popularity-tv-panel-area-demand-to-grow-8-percent-in-2017-ihs-markit-
says
McDonal., B. (2017). Google, I/O 2017 Live Event Coverage. (Google) Obtenido de
https://youtu.be/lHQUQUotkQ0?t=1h46m49s
Microsoft. (1996). JScript (ECMAScript3). Obtenido de
http://msdn.microsoft.com/library/hbxc2t98.aspx
Microsoft. (2013). Microsoft Play Ready Header Object. Obtenido de
http://download.microsoft.com/download/2/0/2/202E5BD8-36C6-4DB8-9178-
12472F8B119E/PlayReady%20Header%20Object%204-15-2013.docx
Microsoft. (2017). Microsoft VSCode. Obtenido de Github: https://github.com/Microsoft/vscode
Movistar +. (2016). Comienza producción de series originales. Obtenido de
https://www.telefonica.com/documents/23283/4472063/NdP_produccion_original_La_Pes
te.pdf/8c4a7e02-de67-456e-bfac-4937adf0e824?version=1.0)
Netflix. (2017). Netflix Q1 Results and Q2 Forecast. Obtenido de
http://files.shareholder.com/downloads/NFLX/4303306568x0x937576/7DAD8A22-F8FE-
4339-A534-4A851A5C68E5/Q117ShareholderLetterV2FINAL.pdf
News, D. T. (2017). EU adopts rules to allow OTT roaming. . Obtenido de
http://www.digitaltvnews.net/?p=29216
Orange. (2017). HAS Player. Obtenido de Github: https://github.com/Orange-
OpenSource/hasplayer.js
Osmani, A. (2012). Learning Javascript Design Patterns. En O’Reilly Media. O’Reilly Media.
Obtenido de A. Osmani. Learning Javascript Design Patterns. O’Reilly Media 2012.
Capitulo Facade pattern.
(https://addyosmani.com/resources/essentialjsdesignpatterns/book/#facadepatternjavascrip
t)
Osmani, A., Sorhus, S., Hartig, P., Sawchuk, S., Boudrias, S., Ford, B., . . . Dara, M. (2017).
Writing your own yeoman generator. (Yeoman) Obtenido de http://yeoman.io/authoring/
Require.js. (2017). How to get started with RequireJS. (Require.js) Obtenido de
http://requirejs.org/docs/start.html
Samsung. (2017). Design Principles. Obtenido de Samsung Developers:
http://developer.samsung.com/tv/design/design-principles
Samsung. (2017). Smart TV Specifications. Obtenido de Samsung Developers:
http://developer.samsung.com/tv/develop/specifications/general-features
Stack Overflow. (2016). Developer Survey Results. Obtenido de Most Popular Technologies:
https://insights.stackoverflow.com/survey/2016#technology
Stack Overflow. (2017). Developer Survey Results. Obtenido de Most Popular Technologies:
https://insights.stackoverflow.com/survey/2017
Tom Huddleston, J. (2017). Obtenido de Fortune: http://fortune.com/2017/06/15/netflix-more-
subscribers-than-cable/
W3C. (2015). W3C Web Assembly Community Group. Obtenido de
https://www.w3.org/community/webassembly/
Wolenetz, M., Smith, J., Watson, M., Colwell, A., & Bateman, A. (10 de August de 2016). W3C
ISO BMFF Byte Stream. Obtenido de https://w3c.github.io/media-source/isobmff-byte-
stream-format.html
Yeoman. (2017). Generator-generator. Obtenido de GitHub: Generator-generator. Yeoman.,.
(https://github.com/yeoman/generator-generator)
120
Anexo A – Manual de usuario
En este apartado describiré los pasos que un usuario de Yeoman debe de seguir para
poder poner a punto un proyecto basado en el framework TAL.
TAL generator
El generador de TAL BBC nos permite crear un punto de partida para desarrollar
nuestras aplicaciones. Está basado en Yeoman.io.
Instalación
Para poder usar el generador primero debemos de tener instalado Node.js y NPM. En
el caso de no tenerlo instalado podemos seguir las instrucciones de https://nodejs.org/en/
para descargar la última versión.
npm install –g yo
Ahora tendremos que instalar el generador desde la carpeta generator-tal que podemos
encontrar en el CD/USB:
cd /media/cdrom/generator-tal
npm link
node index.js
http://localhost:1337/
121
Anexo B - Manual de referencia
El código de este proyecto de fin de carrera puede encontrarse en el DVD y USB adjuntos a la
memoria.
122