2.7 KiB
2.7 KiB
Notas de reproducción de radio con just_audio/audio_service
Referencia interna para futuras correcciones del reproductor de PluriWave. Este archivo está en docs/ y no se incluye en flutter.assets, por lo que no compila dentro de la app.
Hallazgos útiles
AudioPlayer.play()completa cuando la reproducción termina, se pausa o se detiene. En radio en vivo no representa simplemente “ya empezó a sonar”.- Las versiones antiguas de PluriWave que sí cambiaban de emisora usaban el flujo simple de
audio_service+just_audio:stop() -> setUrl() -> play()dentro deplayMediaItem. - La regresión apareció cuando mezclamos dos responsabilidades: usar
handler.emisoraActualcomo estado técnico de audio y también como estado visual inmediato para mostrar el mini reproductor. - El logcat de 2026-05-21 mostró la media session de PluriWave atascada en
CONNECTINGsinPlayerException, con metadata de la emisora anterior (Track FM). Eso apunta a un player/ExoPlayer reutilizado que queda colgado entrestop/setUrl/play, no a un error HTTP visible.
Decisión aplicada en PluriWave
- Mantener la selección visual inmediata en
EstadoRadiomediante una emisora seleccionada propia, separada delemisoraActualinterno del handler. - No usar
setAudioSource(..., preload: false)como reemplazo desetUrl(...): en esta app rompió incluso la primera conexión. - No esperar
play()como operación de finalización para radio en vivo. - Al cambiar emisora, recrear el
AudioPlayer/ExoPlayer para matar completamente la reproducción anterior antes desetUrl(...). - Proteger
EstadoRadio.reproducircon revisión para que una operación vieja no aplique presets/clicks encima de una nueva.
Intentos descartados
setAudioSource(..., preload: false): teóricamente razonable, pero en PluriWave rompió la primera conexión.- Hacer que el handler publique
emisoraActualantes de que el flujo histórico de audio avance: arregla el mini reproductor, pero cambia la semántica que tenían las versiones viejas. - Reutilizar siempre el mismo
AudioPlayerconstop(): logcat mostró estadoCONNECTINGpersistente sin excepción al cambiar/reintentar.
Fuentes consultadas
- just_audio
AudioPlayer.play()API: https://pub.dev/documentation/just_audio/latest/just_audio/AudioPlayer/play.html - just_audio
AudioPlayerAPI general: https://pub.dev/documentation/just_audio/latest/just_audio/AudioPlayer-class.html - Ejemplo de radio en vivo de just_audio: https://gist.github.com/scysys/7f700cd49f09ba788021504e8d3477aa
- Discusión sobre cambiar fuente con audio_service + just_audio: https://stackoverflow.com/questions/70526156/changing-audio-source-in-audio-service-and-just-audio-flutter