Displaying live UDP or RTP stream (multicast) on Android

22,074

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
Share:
22,074
Thibault
Author by

Thibault

Student in Ingeneering Mathematics

Updated on July 09, 2022

Comments

  • Thibault
    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
    Thibault almost 12 years
    Indeed, 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
    chrulri almost 12 years
    I 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 (like ACTION_VIEW) and intent data (like rtp://...). 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
    chrulri almost 12 years
    PS: you may want to have a look at MXPlayer: groups.google.com/forum/?fromgroups#!topic/mx-videoplayer/…
  • Thibault
    Thibault almost 12 years
    MXPlayer 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!