2016-01-26 7 views
0

J'ai donc une caméra IP qui émet un flux vidéo auquel je peux me connecter via le protocole rtsp. Je veux l'afficher dans mon application android, donc j'ai mis en place une vidéo en utilisant le code suivant;Déclenchement et déconnexion de flux vidéo avec vidéo en utilisant le flux de caméra IP

VideoView vv = (VideoView)this.findViewById(R.id.videoView); 
    Uri uri = Uri.parse("rtsp://username:[email protected]:554/1/stream3"); 
    vv.setVideoURI(uri); 
    vv.requestFocus(); 
    vv.start(); 

Je mets cela dans le onCreate() de la classe principale d'activité, de sorte que lorsque les charges d'applications jusqu'à il se connecte automatiquement et commence le streaming. Mon expérience avec ceci est que cela fonctionne - mais finit par devenir saccadé et ou s'arrête simplement de manière aléatoire et ne semble jamais revenir à courir encore. Je dois fermer l'application et l'effacer de la mémoire et la redémarrer pour la récupérer - mais ensuite elle perd la connexion peu de temps après, ce qui signifie qu'elle est pratiquement inutile. J'ai également trouvé qu'il semblait être un peu lent lorsque l'on touche à l'écran des objets comme des menus ou des boutons, mais cela pourrait être une coïncidence - je ne peux pas dire à coup sûr. La chose est le flux est parfait à partir d'un PC sur le même réseau via VLC en utilisant la même URL. Alors qu'est-ce que je fais mal, et y a-t-il une meilleure méthode de gestion de la vidéo en streaming? En fin de compte, j'ai voulu coupler la vidéo avec du texte et des boutons superposés, et éventuellement prendre des captures d'écran lorsque cela était nécessaire. En ce moment je suis chanceux si j'obtiens la vidéo pendant quelques secondes avant qu'il coupe ...

Quelques commentaires additionnels;

J'ai réussi à l'utiliser pendant une période plus longue - ce n'est donc pas toujours une mauvaise chose qui rend les choses difficiles à diagnostiquer. Mais quand ça s'arrête, ça s'arrête. Videoview essaie-t-il activement de se reconnecter s'il a perdu une connexion? Y a-t-il une façon de le démontrer avec un indicateur de progression peut-être - donc ça n'a pas l'air de ne rien faire?

Répondre

1

Un peu en retard, mais pour les autres ayant le même problème: essayez le débogage en réglant les écouteurs sur votre VideoView? à-dire onError, onCompletion, etc.

Par exemple:

vv.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) { 
       Log.d("VideoViewError", Integer.toString(what)); 
            //logs the error you're running into 

      //You can also put a switch case here to 
       determine what error it is running into exactly: 
      String errorString = "Media Player Error: "; 
      switch (what) { 
       case MediaPlayer.MEDIA_ERROR_UNKNOWN: { 
        errorString += "Unspecified media player error. "; 
       } 
       case MediaPlayer.MEDIA_ERROR_SERVER_DIED: { 
        errorString += "Media server died. "; 
       } 
      } 
      switch (extra) { 
       case MediaPlayer.MEDIA_ERROR_IO: { 
        errorString += "File or network related operation error."; 
       } 
       case MediaPlayer.MEDIA_ERROR_MALFORMED: { 
        errorString += "Bitstream is not conforming to the related coding standard or file spec."; 
       } 
       case MediaPlayer.MEDIA_ERROR_UNSUPPORTED: { 
        errorString += "Bitstream is conforming to the related coding standard or file spec, but the media framework does not support the feature."; 
       } 
       case MediaPlayer.MEDIA_ERROR_TIMED_OUT: { 
        errorString += "Media operation timed out."; 
       } 
      } 
      Log.d(TAG, errorString); 
       return true; 
      } 
     }); 

Si le flux est 'sa fin', vous obtiendrez un onCompletion

setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     @Override 
     public void onCompletion(MediaPlayer mp) { 
        Log.d("VideoViewError", "Media Player reached end of file"); 
     } 
     } 
     ); 

Vous pouvez faire de même avec setOnInfoListener, qui permet vous connaissez l'état de la vue vidéo pendant la lecture. (Les codes sont ici: http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html)

Peut-être pas la réponse que vous cherchez, mais nous espérons que vous serez à la bonne!