L'affichage en direct UDP ou les flux RTP (multidiffusion) sur Android
Je suis nouveau sur le développement Android depuis quelques semaines, et j'ai besoin d'écrire une application qui permet d'afficher à l'utilisateur un flux en direct multicasted en UDP ou RDP. Le flux est situé à une adresse du type "rtp://230.0.0.11:1234", et est émis par WIFI grâce à ce module :
http://www.ikusi.es/public/ctrl_public_prod.php?accion=verProducto&id_familia=34&id_gama=186&id_producto=351
J'ai déjà essayé de le lire à partir d'un lecteur (Daroon player, de PlayStore), et il a bien fonctionné, donc je suppose que mon foolowing problème n'est pas dû à la diffusion.
J'ai vu qu'il est possible d'afficher du contenu vidéo à l'utilisateur de différentes manières :
-
À l'aide d'une nouvelle Intention avec un ACTION_VIEW, et Android sélectionne une application qui permet de visualiser le contenu;
-
À l'aide de la classe de MediaPlayer et VideoView.
J'ai deux questions, nous allons commencer par le plus important :
- Pour les deux solutions ci-dessus, il y a un problème : j'ai lu partout que MediaPlayer seulement de support http/s et protocoles rtsp, est ce que le droit? Et pour l'action en vue ici est ce que j'ai essayé avant :
Uri streamURL = Uri.parse("rtp://230.0.0.11:1234");
Intent streamIntent = new Intent(Intent.ACTION_VIEW);
streamIntent.setData(streamURL);
// streamIntent.setDataAndType(streamURL,"video/*");
startActivity(streamIntent);
Voici le LogCat :
07-11 00:25:58.119: D/AndroidRuntime(2659): Shutting down VM
07-11 00:25:58.119: W/dalvikvm(2659): threadid=1: thread exiting with uncaught exception (group=0x40015560)
07-11 00:25:58.129: E/AndroidRuntime(2659): FATAL EXCEPTION: main
07-11 00:25:58.129: E/AndroidRuntime(2659): java.lang.IllegalStateException: Could not execute method of the activity
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.view.View$1.onClick(View.java:2144)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.view.View.performClick(View.java:2485)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.view.View$PerformClick.run(View.java:9080)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.os.Handler.handleCallback(Handler.java:587)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.os.Handler.dispatchMessage(Handler.java:92)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.os.Looper.loop(Looper.java:123)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.app.ActivityThread.main(ActivityThread.java:3683)
07-11 00:25:58.129: E/AndroidRuntime(2659): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 00:25:58.129: E/AndroidRuntime(2659): at java.lang.reflect.Method.invoke(Method.java:507)
07-11 00:25:58.129: E/AndroidRuntime(2659): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
07-11 00:25:58.129: E/AndroidRuntime(2659): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
07-11 00:25:58.129: E/AndroidRuntime(2659): at dalvik.system.NativeStart.main(Native Method)
07-11 00:25:58.129: E/AndroidRuntime(2659): Caused by: java.lang.reflect.InvocationTargetException
07-11 00:25:58.129: E/AndroidRuntime(2659): at java.lang.reflect.Method.invokeNative(Native Method)
07-11 00:25:58.129: E/AndroidRuntime(2659): at java.lang.reflect.Method.invoke(Method.java:507)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.view.View$1.onClick(View.java:2139)
07-11 00:25:58.129: E/AndroidRuntime(2659): ... 11 more
07-11 00:25:58.129: E/AndroidRuntime(2659): Caused by: android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=rtp://230.0.0.11:1234 }
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1409)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.app.Activity.startActivityForResult(Activity.java:2827)
07-11 00:25:58.129: E/AndroidRuntime(2659): at android.app.Activity.startActivity(Activity.java:2933)
07-11 00:25:58.129: E/AndroidRuntime(2659): at fr.infosat.tvreplay.MainActivity.listStream(MainActivity.java:35)
07-11 00:25:58.129: E/AndroidRuntime(2659): ... 14 more
07-11 00:26:00.079: I/Process(2659): Sending signal. PID: 2659 SIG: 9
Ma compréhension est que l'erreur InvocationTargetException, généralement en raison de l'erreur sur les noms de classe, ne peut pas être résolu directement ici, car je n'appelle pas n'importe quelle classe de startActivity. Cependant, je pense que ma syntaxe n'est pas correcte, peut-être que la méthode n'est pas la bonne à utiliser. Bien sûr, si je décommentez la setDataAndType ligne, il affiche le même message d'erreur.
J'ai remarqué l'erreur de venir quand je lance mon intention implicite.
- Mon deuxième problème est que Daroon Player fonctionne bien sur mon décodeur, je peux voir mon stream sur ma TV. Mais quand j'essaie de le lancer à partir de l'Éclipse de l'émulateur, il ne joue pas, même si je peux jouer à partir de VLC... Est l'émulateur assez puissant pour lire ce genre de stream?
J'espère que vous avez quelques indices sur la façon de résoudre ce! 🙂
OriginalL'auteur Thibault | 2012-07-12
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, vous obtenez une exception, car il n'y a aucune application installée sur votre appareil peut prendre en charge une telle
rtp://
url.Vous pouvez vérifier l'intention avant de vous lancer: queryIntentActivities(..)
Deuxième, je pense que l'émulateur est assez lent par rapport à n'importe quel périphérique réel, vous ne voulez pas utiliser l'émulateur de test A/V streaming.
Je ne sais pas si Daroon Player a une intention de jeu de filtres qui est à l'écoute de
rtp://
url. Mais chaque application peut définir plusieurs filtres d'intention pour écouter l'intention spécifique des actions (telles queACTION_VIEW
) et à l'intention de données (commertp://...
). Ainsi, vous n'avez pas à savoir ce que l'application est lancée, il pourrait être n'importe quelle application. Mais si il n'y a aucune application installée, à l'écoute de ce genre d'intention, une exception sera levée.PS: vous pouvez avoir un coup d'oeil à MXPlayer: groups.google.com/forum/?fromgroups#!topic/mx videoplayer/...
MXPlayer était la solution! Malheureusement, je n'étais pas capable de l'installer sur l'AVD, en raison d'un problème de codec, mais il fonctionne très bien (même mieux que Daroon Player!) sur la TV, donc c'est suffisant. Le lien que vous avez fourni a été très instructif au sujet de mon problème, merci beaucoup!
OriginalL'auteur chrulri
VLC Android SDK fonctionne vraiment parfait en UDP/RTP
https://code.videolan.org/videolan/vlc-android
OriginalL'auteur Muthukumar Anbalagan