android - extension - hls mediasource exoplayer
ExoPlayer de Android: ¿Resuelve el problema de reproducción sin interrupciones/sin interrupciones que se rompe para el Reproductor de Android? (4)
¿Alguien ha intentado usar ExoPlayer para lograr esto? Intenté buscar en línea sin éxito.
Cuando digo reproducción sin interrupciones, me refiero al problema de usar el reproductor multimedia para reproducir videos locales en forma consecutiva. Después de que se haya reproducido el primer video, hay un retraso notable de 1 segundo antes de que comience el segundo video.
Esperar esta pregunta ayuda a comprender mejor este problema. Para referencia por favor mira la siguiente pregunta:
Android: Reproducción de video sin formato o sin interrupciones de MediaPlayer
Acabo de intentar cambiar a ExoPlayer desde la implementación estándar de MediaPlayer y la brecha es la misma, si no peor. Sin embargo, he utilizado un método muy simple para reiniciar el reproductor cuando el estado cambia a finalizado. No sé si hay una mejor manera de hacerlo, tal vez con 2 ExoPlayers diferentes.
Sé que esta no es la respuesta que ha estado buscando, pero es la única respuesta razonable. La única manera de asegurarse de que no haya brechas en la reproducción es descargar todo el archivo primero y comenzar a reproducir cuando haya terminado. De lo contrario, en caso de que pierda la conectividad antes de que el archivo finalice la descarga, la pausa es ineludible.
ExoPlayer 2 , que ahora se lanza oficialmente, parece ser compatible con la reproducción sin intervalos usando la clase ConcatenatingMediaSource
. De su guía para desarrolladores :
Las transiciones entre fuentes son ininterrumpidas. No hay ningún requisito de que las fuentes que se están concatenando tengan el mismo formato (por ejemplo, está bien concatenar un archivo de video que contenga 480p H264 con uno que contenga 720p VP9). Las fuentes pueden ser de diferentes tipos (por ejemplo, está bien concatenar un video con una transmisión de audio solamente).
Y el código de ejemplo:
MediaSource firstSource = new ExtractorMediaSource(firstVideoUri, ...);
MediaSource secondSource = new ExtractorMediaSource(secondVideoUri, ...);
// Plays the first video, then the second video.
ConcatenatingMediaSource concatenatedSource =
new ConcatenatingMediaSource(firstSource, secondSource);
EDITAR: ExoPlayer 2 admite la reproducción sin interrupciones, pero en el momento de la escritura aún no se ha lanzado como una versión estable.
Lo más probable es que nunca pueda lograr una reproducción perfecta sin interrupciones de múltiples pistas con ExoPlayer o Android Media Player. Ninguno de los dos ha sido escrito para admitir el inicio de múltiples pistas y me imagino que quedará fuera del alcance de ambos.
Puede lograr una reproducción sin interrupciones utilizando 2 instancias de reproductor diferentes, una vez que haya iniciado y jugado la primera, puede cargar la segunda y comenzar la reproducción una vez que finalice la primera. Usando este método, podría tener una solución sin interrupciones, siempre y cuando prepare el segundo video durante la reproducción del primero.
Para ir más lejos, también puede usar 2 texturas de superficie diferentes para renderizar los múltiples videos, una vez que el primer video llega al final, puede desvanecer la textura y desvanecerse en el nuevo. Resultando en un bonito efecto de video sin fisuras.
Debido a la naturaleza de la reproducción de varios videos a la vez, lo más probable es que desee crear su propio temporizador para aumentar el tiempo y decidir cuándo cambiar al siguiente video, en lugar de intentar usar las devoluciones de llamada de ExoPlayer o Android Media. Esto le permitirá realizar un seguimiento del tiempo de una manera más precisa, sin necesidad de seguir hablando con varios códecs de video.