9
votes

Comment détecter quand VideoView commence à jouer (Android)?

Voici le problème, je veux modifier le bouton de lecture pour mettre en pause le bouton lorsque le flux vidéo commence à jouer à videoview, mais je ne sais pas comment détecter cet événement?


0 commentaires

7 Réponses :


-1
votes

isplaying () peut être appelé pour tester si l'objet Mediaplayer est dans le démarrage

Android MediaPlayer.isplaying ()


0 commentaires

1
votes

Autant que je sache, il n'y a pas d'événement envoyé lorsque la vidéo commence à jouer à videoview, mais je peux penser à deux options:

  1. Créez une version de vidéoView par vous-même, qui envoie un événement dans ces cas.
  2. Utilisez MediaController (qui correspond à la valeur VideoView)

    Si vous souhaitez suivre l'option une - vous pouvez obtenir la source de videoView d'ici


0 commentaires

12
votes

J'ai fini par utiliser vidéoview.setonpreparedlistener. C'était suffisant pour couvrir mon problème (bouton de lecture de bouton de poulement en pause)


0 commentaires

-1
votes

Une autre façon de détecter si VideoView démarré utilise VideoView.getCurrentSITION (). getcurrentPosition () strong> retourne 0 si le streaming non démarré. xxx pré>

Appelez: P>

new Thread(playingCheck).start();


4 commentaires

OMG, s'il vous plaît, n'allez pas de cette façon! Vous interrogez avec un moment (vrai). C'est vraiment mauvais.


Je suis d'accord avec @edoardotognoni


Le point clé de la réponse n'est pas la partie en boucle, mais la méthode GetCurrentPosition (). Je voulais juste appeler cette fonction périodiquement pour détecter si la vidéo est démarrée ou non. Vous pouvez utiliser différentes structures pour des opérations périodiques si vous le souhaitez. mais comme je l'ai dit, ce n'est pas la partie importante de "ma vidéo a commencé"


Et je serai si heureux si vous indiquez que dois-je utiliser au lieu de (vrai), s'il vous plaît.



-1
votes

Veuillez essayer ceci:

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


0 commentaires

19
votes

Il y a un excellent article sur MediaPlayer ici - http://www.malmstein.com/blog/2014/08/09/how-a-uuse-a-textureview-to -Display-a-video-with-personnalisé-media-lecteur-contrôle /

Vous pouvez définir Infolistener sur votre vidéoView xxx


3 commentaires

Merci, mais malheureusement, cela nécessite une API> 16


Le lien est cassé ici


Génial, ça marche bien



9
votes

La réponse acceptée ici n'est pas précise à 100%.

Parfois, onPréparation est appel 3 secondes avant que la première image soit rendu. Je suggère d'avoir un rappel sur cet événement (MediaPlayer.MediaMefo_Video_Rendinging_Start) P>

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


0 commentaires