Así funciona Black Mirror Bandersnatch en iOS y por qué no funciona en el Apple TV
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 basado en los años 80 y el mundo(planeta) de los juegos cuenta con una peculiaridad que ha traído a la memoria a bastantes de vosotros esos maravillosos libros de “Elige tu propia aventura”. Unos libros que no se leían de modo lineal porque te obligaban a coger decisiones que tenían que visualizar con la propia historia del libro. Si vas al norte pasa a la página 62, si prefieres conversar con el duende ve a la página 51. Así se estructuraban estos libros y en esta nueva ofrece de Black Mirror tenemos una interesante transformación para el formato audiovisual online.
No obstante, el lanzamiento no ha estado carente de polémica. No vamos a acceder en quien califica que el contenido de la propia película sea mala o buena. Pero técnicamente nos hemos hallado con el hecho que dos aparatos de los más usados para visualizar Netflix℗ hoy día (sobre todo el primero) no soportan esta función y no podrán gozar de la interactividad del episodio: Google Chromecast℗ y el Apple℗ TV.
Para comprender esta dificultad técnica vamos a aclarar en qué consiste el sistema usado por Netflix℗ y luego miraremos por qué ambos aparatos 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(365días) 1997, el año(365días) que el mundo(planeta) 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 distintos capítulos con el objetivo de no reiterar la misma película muchas 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 exponer contenido en distintos idiomas.

Vamos a visualizar un ejemplo concreto para entenderlo mejor: Star Wars. Cuando colocamos una película de la saga, lo 1.º que miramos siempre es el comienzo con la historia en vuestro idioma (si lo colocamos en español). Pero si colocamos 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 compuesto 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 modo no tenemos que poner la película entera si deseamos muchas versiones. Solo capítulos.
Esta técnica además puede usarse para saltar entre capítulos de modo 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 coger la decisión o movimiento acertado en el momento apropiado. Dirigida por el profesor 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 además soportan los Blu-ray, es la usada por Netflix. La película está dividida por capítulos, en un organigrama bastante complicado (podéis visualizar el diagrama completo en Reddit, pero ojo con los spoilers, pulsando aquí), y cuando tenemos que coger 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 elección de escena durante unos segundos (la decisión).

Si no elegimos, el sistema elegirá una por nosotros, pero si hemos escogido una cuando acaba de reproducirse ese capítulo, engancha de modo dinámica el próximo en seamless branching, por lo que nos da la sensación que la película no se ha detenido y que todo modo 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 conjunto 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 acceder en mucho detalle técnico, lo que hace Apple℗ es bajarse la lista de reproducción completa al aparato 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 visualizar 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 modo continua. Nosotros logramos meditar que miramos un solo vídeo, pero en realidad una película puede tener miles de trozos seguidos uno tras otro. El problema empieza cuando requerimos que esa reproducción sea dinámica. Que nos permita escoger uno u otro capítulo y salte a ese punto de la lista sin parada en la reproducción. Y los programadores de Apple℗ lo conocemos perfectamente: cuando una función no es soportada de modo oficial es un sufrimiento obtener 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 anunció cómo lo han logrado finalmente en iOS, pero sí que han tenido que trucar el reproductor para obtener esta funcionalidad. Como menciona Jordanna Kwok, ingeniera de desarrollo en Netflix, obtener la reproducción fluida en iOS℗ no ha sido nada trivial. Mi teoría, pero es solo una suposición, es que han superpuesto distintos 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 alternativas que el espectador pueda elegir, ocultos para que no se vean. Un desarrollador puede saber la ubicación precisa 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 bastante 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 escoge aleatoriamente) al llegar el evento de final, oculto el player que acaba de morir y muestro el nuevo dándole a PLAY de modo automática. Y apto que hayan tenido que poner un gap de un 2.º o así. Es decir: lanzo la reproducción esconde un 2.º 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 logramos controlar, si no un curso 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 code javascript puede anunciar un reproductor.
El reproductor híbrido de Netflix
¿Es técnicamente inalcanzable hacer que esta funcionalidad interactiva funcione en tvOS? Sí y no. Si Netflix℗ hubiera inventado 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 modo que funcione.

Esto supone que efectivamente la funcionalidad sería posible, pero no tendríamos la experiencia fluida. Siendo Netflix℗ estoy seguro que han aparecido a un punto semejante al mío y han visto que no hay modo de hacerlo bien. Aunque eso no elimina que en el futuro a Apple℗ le interese incluir esta función. No solo para su propio servicio de streaming, si no para aumentar las experiencias en sus sistemas y hacer la vida más sencillo a los desarrolladores. Estoy seguro que entre las nuevas funciones de iOS℗ 13 habrá la eventualidad de este seamless branching de modo nativa, tanto en iOS℗ como tvOS.
El caso de Google℗ Chromecast℗ es más complicado aún y complicado de solventar. Funcionalmente, cuando un Chromecast℗ soporta un servicio, lo que hace el reproductor es enviar la lista de reproducción establecida del servicio hacia el aparato registrado. Básicamente, no hay conexión entre vuestro terminal 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 info 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 logramos 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 probable si Google℗ saca un nuevo aparato que permitiera que desde el terminal eligiéramos en un momento dado la decisión y cambiara de modo fluida entre distintos 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 aparato así sería complicado hacerlo sin que el espectador notara un corte.
La clave: la fluidez
Como ya hemos comentado, es probable que Chromecast℗ y Apple℗ TV hagan esta funcionalidad, pero lo que no es probable (todavía) es que sea fluido: que el espectador vea que hay una permanencia y no una pausa. Si no cumple esa premisa, evidentemente Netflix℗ lo descartará.
Espero que os haya quedado claro y de equivalente 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 modo nativa. Permitiría experiencias muy atrayentes a bastantes niveles de nuevos contenidos.
También te recomendamos
Suenan de nuevo los tambores: Apple℗ podría comprar Netflix℗ según Citi
El bueno, el feo y el malo en las comisiones bancarias: ¿es probable evitarlas?
Netflix℗ lanza un juego de Stranger Things para iOS, y es tan 'retro' como la propia serie
–
La noticia Así funciona Black Mirror Bandersnatch en iOS℗ y por qué no funciona en el Apple℗ TV fue publicada originalmente en Applesfera por Julio(mes) César Fernández .