Android ExoPlayer: ¿Resuelve el problema de reproducción sin interrupciones / sin fisuras que está roto para el reproductor de medios Android

¿Alguien ha intentado usar ExoPlayer para lograr esto? Intenté buscar en línea sin éxito.

Cuando digo una reproducción sin interrupciones, me refiero al problema de usar el reproductor multimedia para reproducir videos locales de atrás hacia atrás. Una vez finalizado el primer video, hay un retraso notable de 1 segundo antes de que comience el segundo video.

Esperando que esta pregunta ayude en la comprensión de este asunto más. Para la referencia mira por favor la pregunta siguiente:

Android: Reproducción de video de MediaPlayer sin golpes o sin problemas

ExoPlayer 2 , que ahora está oficialmente lanzado, parece apoyar la reproducción gapless utilizando la clase ConcatenatingMediaSource . De su guía para desarrolladores :

Las transiciones entre fuentes son sin fisuras. No hay ningún requisito de que las fuentes que se concatenan son del mismo formato (por ejemplo, está bien concatenar un archivo de vídeo que contiene 480p H264 con uno que contiene 720p VP9). Las fuentes pueden incluso ser de diferentes tipos (por ejemplo, está bien concatenar un vídeo con una única secuencia de audio).

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); 

EDIT: ExoPlayer 2 admite la reproducción sin intervalos, pero desde el momento de la escritura todavía no se ha publicado como una versión estable.

Lo más probable es que nunca será capaz de lograr una reproducción perfecta y sin interrupciones de múltiples pistas con ExoPlayer o Android Media Player. Ni se han escrito para apoyar el inicio de múltiples pistas y me imagino que se quedará fuera de alcance para los dos.

Usted puede lograr la reproducción gapless utilizando 2 instancias de reproductor diferentes, una vez que haya comenzado y jugado el primero, puede cargar el segundo y comenzar la reproducción una vez que el primero termina. Usando este método usted podría tener una solución gapless, mientras usted prepara el segundo video durante la reproducción del primero.

Para llevarlo más lejos, también puedes usar 2 texturas de superficie diferentes para renderizar los múltiples videos, una vez que el primer video llegue al final, podrías desvanecer la textura y fundirte en la nueva. Resultando en un buen efecto de video sin fisuras.

Debido a la naturaleza de reproducir varios vídeos a la vez, es muy probable que desee crear su propio temporizador para incrementar el tiempo y decidir cuándo cambiar al siguiente vídeo, en lugar de intentar utilizar 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 vídeo.

Sé que esta no es la respuesta que has estado buscando, pero es la única respuesta razonable. La única manera de asegurar que no haya vacíos en la reproducción es descargar todo el archivo primero y comenzar la reproducción cuando se hace. De lo contrario, en caso de que pierda la conectividad antes de que se termine de descargar el archivo, la pausa es ineludible.

Acabo de intentar cambiar a ExoPlayer de la implementación estándar de MediaPlayer y la diferencia es igual si no peor. Sin embargo he utilizado un método muy simple de reiniciar el reproductor cuando el estado cambia a terminado. No sé si hay una mejor manera de hacerlo, quizás con 2 ExoPlayers diferentes.

  • Crear mediaplayer con inputstream en android
  • MediaPlayer.setDataSource falla en el archivo de audio AMR
  • Interferencias de AudioManager MODE_IN_CALL
  • Error de MediaPlayer de Android (1, -38) y (-38, 0)
  • Android mediaplayer loops para siempre en ICS
  • Android 4.2 con 4 MediaPlayers = "No se puede reproducir este video"
  • Android MediaPlayer sincroniza con animación como iOS AVPlayer y capa AVSynchronized
  • implementar detener y suspender para la alarma de Android
  • Android, Cómo mostrar el buffering% de onBufferingUpdate
  • Subtítulos / Soporte de subtítulos en Android
  • ¿Cómo uso Android ProgressBar en modo determinado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.