Las listas de reproducción de ExoPlayer son diferentes. La API de ExoPlayer MediaItem es excelente … | Autor: Nick Ross | Diciembre de 2021
ExoPlayer MediaItem
La API es ideal para modificaciones lista de reproducción. Puede agregar, eliminar y mover MediaItem
Gire alrededor de la lista de reproducción que crea conveniente. Sin embargo, ExoPlayer no manejará ninguna diferencia.
¿A qué me refiero con diferencia?Compartiré un ejemplo primeroelectrónicoNo utilices la diferencia.Suponga que tiene una lista de tres videos [A, B, C] Y configúrelos en la instancia de ExoPlayer.Después de un tiempo, obtendrá una nueva lista de videos. [B, C, D] Y desea reemplazar su lista de reproducción actual con ellos. La forma más sencilla de actualizar esta lista de reproducción es borrar todos sus videos y luego insertar una nueva lista de videos. Esto funciona, pero dará como resultado una transición deficiente a la nueva lista. En el ejemplo anterior, si estaba viendo el video B cuando ocurrió el reemplazo de la lista, el video C comenzaría a reproducirse repentinamente. El video C levanta su fea cabeza porque está en el índice 1 de la nueva lista de videos, que es el mismo que el video índice B en la lista anterior. ExoPlayer solo sabe que el video se está reproduciendo en el índice 1; para recuperarse de que la lista de reproducción se eliminó y se reemplazó con una lista de reproducción completamente (por su parte) nueva, lo mejor que puede hacer es continuar reproduciendo en el índice 1. Cualquier contenido en el lugar.
El método ExoPlayer en realidad tiene una sobrecarga setMediaItems
Esto le permite configurar una nueva lista de elementos y hacer que la reproducción comience en un índice y una posición específicos. Este método resuelve el problema de índice mencionado anteriormente. Sin embargo, borrar la lista de elementos de video y reemplazarlos tiene otro efecto negativo. El jugador debe preparar un nuevo video desde el principio. Al preparar una nueva lista, la reproducción de video se interrumpirá en el mejor de los casos. Por tanto, no es una solución ideal.
La mejor manera de lidiar con este tipo de reemplazo de listas es diferenciar o pasar de una lista a otra en la menor cantidad posible de incrementos.Por ejemplo, de [A, B, C] llegar [B, C, D] Esto se puede hacer eliminando el video A y agregando el video D al final de la lista.Cuando se usa la API MediaItem, por ejemplo removeMediaItem
y addMediaItem
Con este fin, puede lograr una transición completamente fluida. Si está viendo el video B, no sabrá que el video A se eliminó y el video D se agregó hasta que intente avanzar / retroceder en la lista de reproducción. Esto parece una solución obvia, pero pasar de una lista arbitraria a otra no es fácil.Afortunadamente, alguien mucho más inteligente que yo se ha dado cuenta Salir Haga esto hace décadas. El mismo algoritmo se puede utilizar para actualizar de forma inteligente la lista de reproducción de ExoPlayer.
Existe una biblioteca popular de código abierto llamada java-diff-utils Completó el pesado trabajo de traducir el algoritmo de Myers al código Java. Todo lo que queda es conectarlo con la API ExoPlayer MediaItem. Agregué una viñeta a continuación, ¡y así es como se hace!
Si está buscando un proyecto real para ver su efecto real, puede consultar uno de mis proyectos de código abierto aquí: https://github.com/nihk/videopager