Displaying live UDP or RTP stream (multicast) on Android
Solution 1
First, you get the exception because there is no app installed on your device which can handle such an rtp://
url.
You may want to check the intent before you start it: queryIntentActivities(..)
Second, I think emulator is pretty slow compared to any available real device, you may not want to use emulator to test A/V streaming.
Solution 2
VLC Android SDK works really perfect in UDP/RTP
https://code.videolan.org/videolan/vlc-android
libvlc
Comments
-
Thibault almost 2 years
I am new to Android development since a few weeks, and I need to write an app that can display the user a live stream multicasted in UDP or RDP. The stream is located at an address such as "rtp://230.0.0.11:1234", and is emitted by WIFI thanks to this module : http://www.ikusi.es/public/ctrl_public_prod.php?accion=verProducto&id_familia=34&id_gama=186&id_producto=351
I already tried to read it from a player (Daroon player, from PlayStore), and it worked well, so I assume that my foolowing problem is not due to the broadcast.
I saw that it is possible to display video content to the user by different ways :
Using a new Intent with an ACTION_VIEW, and Android selects an app that can view the content;
Using the MediaPlayer class and VideoView.
I have two issues, let us start with the most important : - For both solution above, there is an issue : I read everywhere that MediaPlayer only support http/s and rtsp protocols, is that right? And for the action view here is what I tried before :
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);
Here is the 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
My understanding is that the error InvocationTargetException, usually due to error on class names, cannot be resolved directly here, since I don't call any class in startActivity. However I think my syntax is not correct, maybe the method is not the right one to use. Of course if I uncomment the setDataAndType line, it displays the same error.
I noticed the error come when I launch my implicit intent.
- My second problem is that Daroon Player works well on my set top box, I can see my stream on my TV. But when I try to launch it from Eclipse emulator, it doesn't play, even if I can play it from VLC... Is the emulator powerful enough to read those kind of stream?
I hope that you have some clues on how to solve that! :)
-
Thibault almost 12 yearsIndeed, queryIntentActivities returns an empty list! Thank you for spotting this problem. However, since I have Daroon Player installed (which can read rdp stream, I tried), shouldn't it be in this list? Unless I misunderstood the purpose of this method... Can we manually call an app, in order to avoid this error?
-
chrulri almost 12 yearsI don't know if Daroon Player has an intent filter set which listens for
rtp://
urls. But each app can define multiple intent filters to listen for specific intent actions (likeACTION_VIEW
) and intent data (likertp://...
). Thus you do not have to know what app will be started, it could be any app. But if there is no app installed, listening for this kind of intent, an exception will be thrown. -
chrulri almost 12 yearsPS: you may want to have a look at MXPlayer: groups.google.com/forum/?fromgroups#!topic/mx-videoplayer/…
-
Thibault almost 12 yearsMXPlayer was the solution! Unfortunately, I was not able to install it on the AVD, because of a codec issue, but it works fine (even better than Daroon Player!) on the TV, so it is sufficient. The link you provided was very instructive about my problem, thanks a lot!