Las redes están revolucionadas con la nueva película/episodio de Black Mirror. Siguiendo la estela de experiencias anteriores como un episodio de El Gato con Botas en la misma Netflix o la adaptación del Story Mode de Minecraft. El nuevo episodio inspirado en los años 80 y el mundo de los videojuegos cuenta con una peculiaridad que ha traído a la memoria a muchos de nosotros esos maravillosos libros de “Elige tu propia aventura”. Unos libros que no se leían de forma lineal porque te obligaban a tomar decisiones que tenían que ver con la propia historia del libro. Si vas al norte pasa a la página 62, si prefieres hablar con el duende ve a la página 51. Así se estructuraban estos libros y en esta nueva entrega de Black Mirror tenemos una interesante evolución para el formato audiovisual online.
No obstante, el lanzamiento no ha estado carente de polémica. No vamos a entrar en quien califica que el contenido de la propia película sea mala o buena. Pero técnicamente nos hemos encontrado con el hecho que dos dispositivos de los más usados para ver Netflix hoy día (sobre todo el primero) no soportan esta función y no podrán disfrutar de la interactividad del episodio: Google Chromecast y el Apple TV.
Para entender esta dificultad técnica vamos a explicar en qué consiste el sistema usado por Netflix y luego veremos por qué ambos dispositivos no tienen soporte para esta experiencia.
La fuente, seamless branching
La técnica que usa Netflix para esta película interactiva no es nueva. Para entenderla tenemos que retroceder al año 1997, el año que el mundo conoció el Disco Versátil Digital o DVD. El comienzo de la revolución digital en la industria del entretenimiento. El DVD, entre sus funciones, contaba con una bastante interesante: el seamless branching o “ramificación fluida”. Este sistema, básicamente, permite crear listas de reproducción de diferentes capítulos con el objetivo de no repetir la misma película varias veces y poder crear varios montajes de la misma con solo incluir trozos o escenas nuevas. Y el seamless indica que la transición es limpia y el espectador no se dará cuenta que ha habido un salto entre capítulos de su DVD. También se los conocía como ángulos, y eran muy útiles para mostrar contenido en diferentes idiomas.
Vamos a ver un ejemplo concreto para entenderlo mejor: Star Wars. Cuando ponemos una película de la saga, lo primero que vemos siempre es el comienzo con la historia en nuestro idioma (si lo ponemos en español). Pero si ponemos la película en inglés se verán las letras en inglés. ¿Está grabada dos veces la película? No. La película es una composición de capítulos estructurados en listas de reproducción. De esa forma, cuando reproducimos el audio en español coge una pista que tiene el crawler del comienzo en ese idioma y cuando acaba, pasa a reproducir el capítulo inmediatamente posterior a dichas letras que ya es común al resto de idiomas. El corte es de frame a frame y el salto instantáneo. De esta forma no tenemos que poner la película entera si queremos varias versiones. Solo capítulos.
Esta técnica también puede usarse para saltar entre capítulos de forma fluida e instantánea para crear experiencias interactivas. Un formato que técnicamente ya tenían los discos digitales LaserDisc que usaban clásicos como aquel de 1983 llamado Dragon's Lair. Una auténtica película de dibujos interactivos, donde teníamos que tomar la decisión o movimiento apropiado en el momento apropiado. Dirigida por el maestro Don Bluth, por cierto, crear de "Fievel y el Nuevo Mundo" (An American Tail), "En Busca Del Valle Encantado" (The Land Before Time) o Anastasia.
Pues bien, esta misma técnica que también soportan los Blu-ray, es la usada por Netflix. La película está dividida por capítulos, en un organigrama bastante complejo (podéis ver el diagrama completo en Reddit, pero ojo con los spoilers, pulsando aquí), y cuando tenemos que tomar una decisión es siempre al final de un capítulo. Cuando quedan unos segundos se nos pide una decisión y se nos muestra una selección de escena durante unos segundos (la decisión).
Si no elegimos, el sistema elegirá una por nosotros, pero si hemos elegido una cuando acaba de reproducirse ese capítulo, engancha de manera dinámica el siguiente en seamless branching, por lo que nos da la sensación que la película no se ha detenido y que todo forma parte de un mismo flujo. Sin duda bastante ingenioso y con un resultado interesante. Eso sí, por ahora las decisiones son siempre binarias: o una cosa u otra.
El impedimento técnico
El equipo de Netflix se enfrentó a un problema bastante serio cuando quiso implementar esta función en iOS hace unos meses cuando se lanzó el episodio de El Gato con Botas que permitió probarla: la API oficial de Apple para reproducir vídeo (AVFoundation) no soporta seamless branching. Sin entrar en mucho detalle técnico, lo que hace Apple es bajarse la lista de reproducción completa al dispositivo e ir pidiendo los trozos que la componen. La reproducción por streaming, que usa el formato m3u8, es una sucesión de chunks o trozos que componen la reproducción del contenido. Unos chunks que nada tienen que ver con capítulos. Ese es otro metadato que va aparte para clasificar, si el contenido lo soporta.
Pero como decimos, la API de Apple se baja la lista antes de la reproducción y va pidiendo cada trozo de forma continua. Nosotros podemos pensar que vemos un solo vídeo, pero en realidad una película puede tener miles de trozos seguidos uno tras otro. El problema comienza cuando necesitamos que esa reproducción sea dinámica. Que nos permita elegir uno u otro capítulo y salte a ese punto de la lista sin parada en la reproducción. Y los desarrolladores de Apple lo sabemos perfectamente: cuando una función no es soportada de forma oficial es un sufrimiento conseguir lo que quieres (si es que lo logras).
I can’t get into all the reasons around this, but Bandersnatch and other interactive titles on iOS are indeed built with AVFoundation and UIKit. Branching playlists are not supported by Apple’s APIs, so the implementation we have to achieve seamless playback is non-trivial.
— Jordanna Kwok (@jordeewok) 30 de diciembre de 2018
En el caso de Netflix, no se ha hecho público cómo lo han conseguido finalmente en iOS, pero sí que han tenido que trucar el reproductor para conseguir esta funcionalidad. Como menciona Jordanna Kwok, ingeniera de desarrollo en Netflix, conseguir la reproducción fluida en iOS no ha sido nada trivial. Mi teoría, pero es solo una suposición, es que han superpuesto diferentes reproductores y han activado uno u otro en función de la opción.
Cuando un vídeo finaliza su reproducción, salta un evento del sistema que informa de ello y nos permite hacer algo cuando esto pasa. Yo lo hubiera hecho con un player ya cargado con las dos posibles opciones que el espectador pueda elegir, ocultos para que no se vean. Un programador puede saber la posición exacta del contenido que se reproduce, así que yo cuando quedara un minuto o dos crearía dos vistas nuevas de reproducción, con el contenido precargado y con el buffer suficiente para darle PLAY y que se vea fluido. Cuando llegue el momento de la decisión, muestro los botones sobre el reproductor. Si el espectador pulsa en una (o se elige aleatoriamente) al llegar el evento de final, oculto el player que acaba de morir y muestro el nuevo dándole a PLAY de forma automática. Y capaz que hayan tenido que poner un gap de un segundo o así. Es decir: lanzo la reproducción oculta un segundo antes que acabe la que se ve y luego quito y pongo vistas.
Sí, es un poco “chapucilla”, pero la propia Netflix ha calificado la implementación en iOS como algo no trivial como ya hemos visto. Así que calculo que algo así, ajustado al milímetro con mucha prueba y error, es lo que habrán hecho al final. Esto en iOS, es operativo, pero en Apple TV no. En Apple TV el reproductor es más limitado y no permite ese juego porque no es una vista que podemos controlar, si no un proceso al que lanzamos una lista y nada más. Está hecho así para integrarse con la librería TVMLKit, hecha en javascript. De esa forma, un código javascript puede lanzar un reproductor.
El reproductor híbrido de Netflix
¿Es técnicamente imposible hacer que esta funcionalidad interactiva funcione en tvOS? Sí y no. Si Netflix hubiera creado una parte nativa de reproducción sobre UIKIt, podríamos tener ese control sobre el player y hacer el truco de iOS. Pero en las pruebas que he hecho, no obstante, no se consigue la fluidez necesaria. Siempre hay una pausa para rellenar el buffer con la florecita girando. El mismo truco que funciona en iOS en el Apple TV no hay forma que funcione.
Esto supone que realmente la funcionalidad sería posible, pero no tendríamos la experiencia fluida. Siendo Netflix estoy seguro que han llegado a un punto similar al mío y han visto que no hay forma de hacerlo bien. Aunque eso no quita que en el futuro a Apple le interese incluir esta función. No solo para su propio servicio de streaming, si no para mejorar las experiencias en sus sistemas y hacer la vida más fácil a los desarrolladores. Estoy seguro que entre las nuevas funciones de iOS 13 habrá la posibilidad de este seamless branching de forma nativa, tanto en iOS como tvOS.
El caso de Google Chromecast es más complejo aún y difícil de solventar. Funcionalmente, cuando un Chromecast soporta un servicio, lo que hace el reproductor es enviar la lista de reproducción determinada del servicio hacia el dispositivo registrado. Básicamente, no hay conexión entre nuestro móvil y el Chromecast, salvo el envío de la petición.
Cuando es a través de un servicio registrado, es dicho servicio (como Netflix) quien manda la información directamente al Chromecast y este se reproducirá hasta el final, con la única opción de un control mínimo de reproducción (volumen, pausa y poco más). Por lo tanto, ahí tampoco podemos jugar con listas de reproducción interactivas y, mucho menos, con botones personalizados que permitan funcionalidad específica. Es un reproductor limpio.
Desde mi punto de vista y analizando la tecnología Google Cast, solo sería posible si Google saca un nuevo dispositivo que permitiera que desde el móvil eligiéramos en un momento dado la decisión y cambiara de forma fluida entre diferentes listas de reproducción. Pero cargar el buffer de una lista de reproducción y que esté lista para reproducir es algo que no es trivial y en un dispositivo así sería complejo hacerlo sin que el espectador notara un corte.
La clave: la fluidez
Como ya hemos comentado, es posible que Chromecast y Apple TV hagan esta funcionalidad, pero lo que no es posible (todavía) es que sea fluido: que el espectador vea que hay una continuidad y no una pausa. Si no cumple esa premisa, obviamente Netflix lo descartará.
Espero que os haya quedado claro y de igual forma, esperamos que haya más experiencias de este tipo en el futuro y que Apple se ponga las pilas (estoy seguro que con el nivel mediático que ha tomado este episodio, lo hará) y para iOS 13 nos ofrezca esta funcionalidad de manera nativa. Permitiría experiencias muy interesantes a muchos niveles de nuevos contenidos.
Ver 24 comentarios