Aquí está el problema, quiero cambiar el botón de reproducción al botón de pausa cuando la transmisión de video comienza a reproducirse en la vista de video, pero no sé cómo detectar ese evento.¿Cómo detectar cuándo se inicia la reproducción de VideoView (Android)?
Respuesta
Terminé usando VideoView.setOnPreparedListener. Esto fue suficiente para cubrir mi problema (botón de reproducción dibujable para pausar)
isPlaying() se puede llamar para probar si el objeto MediaPlayer está en el Iniciado
Por lo que yo sé, no hay ningún evento enviado cuando el vídeo comienza a reproducirse en VideoView, pero puede piense en dos opciones:
- Cree usted mismo una versión de VideoView que envíe eventos en esos casos.
- Uso MediaController (que es por defecto en VideoView)
Si desea una opción de seguir - se puede obtener la fuente de VideoView from here
Otra forma de detectar si la video-vista comenzó es usando videoView.getCurrentPosition(). getCurrentPosition() devuelve 0 si la transmisión no se inició.
protected Runnable playingCheck = new Runnable() {
public void run() {
while (true) {
if (vw.getCurrentPosition() != 0) {
// do what you want when playing started
break;
} else {
try {
Thread.sleep(250);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
};
luego llamar a:
new Thread(playingCheck).start();
Por favor, intente esto:
final Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
if (videoView.getCurrentPosition() != 0) {
((ProgressBar) rootView.findViewById(R.id.pgStreaming)).setVisibility(View.GONE);
} else {
h.postDelayed(this, 250);
}
}
}, 250);
Hay un gran artículo sobre MediaPlayer aquí - http://www.malmstein.com/blog/2014/08/09/how-to-use-a-textureview-to-display-a-video-with-custom-media-player-controls/
Puede establecer infoListener en su VideoView
setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START) {
// Here the video starts
return true;
}
return false;
}
Gracias, pero desafortunadamente requiere API> 16 –
aceptado La respuesta aquí no es 100% exacta.
En ocasiones, la preparación se realiza 3 segundos antes de que se muestre el primer fotograma. Sugiero tener una devolución de llamada en ese evento (MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START)
mMediaPlayer.setOnInfoListener(new MediaPlayer.OnInfoListener() {
@Override
public boolean onInfo(MediaPlayer mediaPlayer, int i, int i1) {
if (i == MediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START){
//first frame was bufered - do your stuff here
}
return false;
}
});
ver información multimedia documantaion para más devoluciones de llamada de información/advertencia: https://developer.android.com/reference/android/media/MediaPlayer.html#MEDIA_INFO_VIDEO_RENDERING_START
- 1. VideoView no se inicia cuando es invisible
- 2. Android VideoView, reproducción sin interrupciones durante el cambio de orientación
- 3. Reanudar reproducción de VideoView desde onResume
- 4. Android VideoView: detectar punto de tiempo en video
- 5. ¿Cómo detener la reproducción de video en VideoView mediante programación en android?
- 6. Cómo rastrear el uso de la aplicación en Android? ¿Cómo detectar cuándo se lanza una actividad?
- 7. ¿Cómo detectar cuando el usuario inicia otra aplicación? (Android)
- 8. Silenciar un video en reproducción por VideoView en la aplicación Android
- 9. ¿Cómo se puede detectar el lanzamiento de una aplicación Android?
- 10. Android VideoView repetición
- 11. Android Emulator no se inicia
- 12. Android :: VideoView dentro de ScrollView
- 13. cómo detectar cuando un androide se inicia y termina la actividad
- 14. Reproducción de video en android directamente desde el servidor
- 15. Android 2.2 problema de VideoView
- 16. Controla la velocidad de reproducción de video en Android
- 17. Redimensionar VideoView
- 18. ¿Cómo puedo detectar cuándo se está redireccionando la salida?
- 19. VideoView Android Guardar RTSP stream
- 20. Cómo detectar cuándo un usuario toca una vista en Android
- 21. Primer Android Test Project no se inicia
- 22. ¿Detecta cuándo se inicia una aplicación de iOS por primera vez?
- 23. Android: múltiples pistas de audio en VideoView?
- 24. Android: detectar cuando se inicia otra actividad (o su actividad pierde el foco)
- 25. Reproducción de sonidos simultáneamente Android
- 26. Android Crear lista de reproducción
- 27. ¿Cómo se inicia una actividad con AlarmManager en Android?
- 28. Android 3.1/Galaxy Tab/VideoView no se reproducirá
- 29. ¿Cómo detectar cuándo se está maximizando el formulario?
- 30. ¿Cómo puedo detectar cuándo se ha movido mi Vista?
OMG, por favor no ir por este camino! Estás encuestando por un tiempo (verdad). Esto es realmente malo – edoardotognoni
Estoy de acuerdo con @edoardotognoni –
el punto clave de la respuesta no es la parte de bucle, sino el método getCurrentPosition(). Solo quería llamar a esta función periódicamente para detectar si el video se inició o no. puede usar diferentes estructuras para operaciones periódicas si lo desea. pero como dije, no es la parte importante del problema "es mi video iniciado" –