Administrar videos en Android

Por Grey Skold | Android Video Product (Productos de video para Android)

La función de video se lanzó en la aplicación de Pinterest para Android en 2016 a fin de ofrecer una experiencia de video completamente integrada en la aplicación. Esto incluía la capacidad de admitir varios videos por pantalla y, a la vez, controlar de forma dinámica su estado de reproducción al pausarlos automáticamente cuando desaparecían de la pantalla, o controlar la cantidad de videos que se podían reproducir al mismo tiempo.

Pronto nos dimos cuenta de que había muchos desafíos técnicos que debíamos afrontar, entre ellos:

● Administrar el estado de reproducción de todos los videos disponibles actualmente.

● Conocer el porcentaje de visibilidad en pantalla de un video.

● Proporcionar a nuestros desarrolladores un componente de video fácil de usar.

Con el tiempo, renovamos gradualmente nuestra arquitectura de video para abordar estos requisitos. A continuación, analizaremos cómo hicimos frente a estos desafíos en nuestro último módulo de video.

Administrador de videos

En un nivel superior, necesitábamos crear un componente que tuviera en cuenta todas las instancias de video (es decir, las visualizaciones), así como las superficies relacionadas (es decir, los fragmentos) disponibles en pantalla. Administrar las superficies es fundamental para monitorear los estados del ciclo de vida (es decir, onStart(), etc.) que se aplicarán a los elementos secundarios de la superficie y evita agregar un exceso de código a la capa del consumidor para aplicar los últimos cambios de estado a las visualizaciones.

Para hacer un seguimiento de estos eventos clave del ciclo de vida, el marco de Android nos proporciona el estado actual del contenido que se muestra en pantalla, así como los cambios que afectan visualmente a nuestra aplicación. Los eventos clave del ciclo de vida que escuchamos son las llamadas adjuntas de la interfaz de usuario (p. ej., onAttachedToWindow()), así como cuando nuestra pantalla de host cambia su estado de visualización (p. ej., onPause(), etc.).

Con estos métodos de devolución de llamada, intentamos registrar los videos a los que se les proporcionó una URL de video válida. Esto nos dará la lista inicial de videos disponibles dentro de nuestra superficie actual.

En la primera iteración de nuestro marco de video, confiamos en que el código del cliente invocara estas llamadas por sí mismo, pero notamos que no era escalable, ya que sumaba complejidad a la hora de crear funciones de video. En su lugar, abstrajimos las devoluciones de llamada para registrar un video detrás del VideoManager (Administrador de videos) al crear métodos que requerían que se transmitiera el componente de video subyacente. A partir de allí, el VideoManager haría los cálculos correspondientes detrás de escena. Esto eliminó la necesidad de que los consumidores ya tuvieran un conocimiento predefinido del proceso de registro de video, ya que ahora estaba “listo para usar”.

Antes

Después

Contar con esta lista de videos nos permitió establecer dinámicamente el estado de reproducción en función de la visibilidad actual de nuestra aplicación. Esto también brindó flexibilidad para cambiar dinámicamente otras funciones según ciertas propiedades de metadatos transmitidas durante el registro de video.

Por ejemplo, es posible que deseemos que todos los anuncios de video se reproduzcan automáticamente, pero limitemos a que solo 1 video orgánico (es decir, contenido generado por creadores) se reproduzca automáticamente en la misma superficie. Al verificar los metadatos registrados en un video en concreto, podemos aplicar estas limitaciones a la capa de la interfaz de usuario.

También abstrajimos todo el código de análisis específico de Pinterest para mantener un enfoque claro en el VideoManager (administrar y reproducir videos) y lograr que el componente sea independiente de la aplicación.

Cálculo de Viewability

Viewability se define como el porcentaje de área visible de un componente de la interfaz de usuario que se muestra en pantalla. Esta medida es crucial para comprender lo que se muestra actualmente al usuario. Con estos datos, podemos recopilar información para nuestros socios sobre el engagement de su contenido.

Por lo general, dado que el VideoManager contiene referencias a todos los videos activos, podemos hacer un seguimiento de la coordenada exacta de nuestras visualizaciones (es decir, getLocationInWindow()) y el tamaño de pantalla del dispositivo en pixeles (ver DisplayMetrics) para deducir su Viewability en pantalla.

También manejamos la interfaz de usuario superpuesta de estas formas:

● Ofrecer a los consumidores la opción de incluir una lista de visualizaciones de “obstrucción” que podrían superponerse a nuestros videos subyacentes (p. ej., barras de herramientas, botones flotantes, etc.)

● Devoluciones de llamada para las ventanas emergentes que se muestran (es decir, onWindowFocusChanged())

● Componentes para el desplazamiento de pantalla o componentes de la interfaz de usuario que salen de pantalla (ver agentes de escucha de RecyclerView)

● Devoluciones de llamada adicionales para cuando se muestra una superficie de video en pantalla (es decir, onResume(), etc.).

Creamos para los desarrolladores

Si bien queríamos reducir la complejidad de administración de video a la que se exponen nuestros desarrolladores, el área de mayor confusión fue la implementación de una nueva superficie de video. Por lo tanto, abstrajimos la complejidad de la configuración de los videos, así como los componentes de la interfaz de usuario proporcionados por PlayerView de Google que utilizamos:

Antes

Después

Otra complejidad de la infraestructura de video fue la arquitectura real del VideoManager. En la reescritura, consolidamos la mayoría de nuestros componentes antiguos a fin de incluir solo lo estrictamente necesario para que el VideoManager funcione correctamente.

Antes

Después

La nueva arquitectura del VideoManager ofrece una jerarquía clara de eventos y la relación de los componentes entre sí. Esto no solo suena bien en la teoría, sino que la refactorización por sí sola eliminó más de 4,500 líneas de código (menos de un tercio del tamaño de la implementación original).

Reproduciendo videos hasta la puesta del sol

Crear una herramienta de “reproducción de video” adecuada es un proceso largo y arduo, pero con los años creamos algo que realmente evolucionó para contribuir a optimizar nuestro proceso de desarrollo y la experiencia de los usuarios de Pinterest. En el futuro, esperamos lograr que nuestro trabajo sea de código abierto para que otros desarrolladores puedan contribuir al esfuerzo continuo a fin de manejar la reproducción dinámica de video. Seguiremos iterando en nuestra arquitectura de cliente de video y abordando los desafíos que vayan surgiendo, con el objetivo de crear una experiencia de video agradable tanto para los usuarios de Pinterest como para los desarrolladores.

Estamos construyendo el primer motor de descubrimiento visual del mundo. Más de 475 millones de personas de todo el mundo usan Pinterest para soñar, planear y preparar lo que quieren hacer en la vida. ¡Únete a nuestro equipo!


Administrar videos en Android was originally published in Pinterest Engineering Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.

Source: Pinterest

Leave a Reply

Your email address will not be published.


*