programacion - manual de android en pdf
Android: cómo saber cuándo MediaPlayer está en el búfer (5)
Debo estar perdiendo algo obvio aquí, pero parece que no puedo encontrar nada que me permita determinar cuándo MediaPlayer está almacenando en búfer el audio. Transmito audio por Internet y quiero mostrar un indicador de búfer, pero nada de lo que he intentado me permite saber cuándo MediaPlayer interrumpe el audio a búfer, por lo que no puedo mostrar correctamente un indicador de búfer. ¿Alguna pista?
@Daniel, por su comentario sobre la respuesta de @JRL, probablemente podría hacer que esto funcione girando un hilo y esperando un tiempo de espera.
Algo como DetectBufferTimeout.java (no probado) haría muy bien.
Sin embargo, estoy de acuerdo en que girar este hilo separado es un poco pirateado. Quizás OnBufferingUpdateListener
podría garantizar la frecuencia con la que llama onBufferingUpdate()
independientemente de si se ha producido un cambio en el progreso del almacenamiento en búfer, por lo que podemos detectar si obtenemos el mismo valor una y otra vez.
Como abajo (nivel API ≥ 9):
mp.setOnInfoListener(new OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
loadingDialog.setVisibility(View.VISIBLE);
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
loadingDialog.setVisibility(View.GONE);
break;
}
return false;
}
});
NOTA: Hay un error conocido en Android. Cuando se reproduce la transmisión HLS, simplemente nunca se llama OnInfoListener o OnBuffering. compruebe este enlace OnInfoListener error
Ok, me siento un poco vindicado ahora. Revisé la aplicación Pandora y no muestra un indicador de almacenamiento en búfer. Cuando se interrumpe la música para el almacenamiento en búfer, simplemente se queda allí como si nada hubiera pasado y la interfaz de usuario parece que todavía se está reproduciendo. Así que he llegado a la conclusión de que si está utilizando MediaPlayer, simplemente no es posible determinar si la pista está temporalmente en pausa para el almacenamiento en búfer.
Sin embargo, noté que hay un par de constantes de MediaPlayer que podrían ser útiles: MEDIA_INFO_BUFFERING_START y MEDIA_INFO_BUFFERING_END. Pero solo están disponibles en el nivel API 9+, y los documentos no dicen nada sobre ellos. Supongo que se pueden utilizar con un OnInfoListener.
Estoy decepcionado, pero al menos puedo dejar de girar mis ruedas ahora y pasar a otra cosa.
Puedes usar un hilo que verifique la posición actual del MediaPlayer. Si la posición no cambia, puede concluir que los medios están en estado de almacenamiento en búfer. Aquí está el tutorial completo que escribí: http://www.ottodroid.net/?p=260
Registrar un oyente OnBufferingUpdate .