【问题标题】:Displaying live UDP or RTP stream (multicast) on Android在 Android 上显示实时 UDP 或 RTP 流(多播)
【发布时间】:2012-07-12 06:20:19
【问题描述】:

几周以来我是 Android 开发的新手,我需要编写一个可以向用户显示以 UDP 或 RDP 多播的实时流的应用程序。该流位于诸如“rtp://230.0.0.11:1234”之类的地址,并且由于此模块而由WIFI发出: http://www.ikusi.es/public/ctrl_public_prod.php?accion=verProducto&id_familia=34&id_gama=186&id_producto=351

我已经尝试从播放器(Daroon 播放器,来自 PlayStore)中读取它,并且效果很好,所以我认为我的愚蠢问题不是由于广播。

我看到可以通过不同的方式向用户显示视频内容:

  • 使用带有 ACTION_VIEW 的新 Intent,Android 选择可以查看内容的应用;

  • 使用 MediaPlayer 类和 VideoView。

我有两个问题,让我们从最重要的开始: - 对于上述两种解决方案,都有一个问题:我到处都读到 MediaPlayer 只支持 http/s 和 rtsp 协议,对吗?对于动作视图,这是我之前尝试过的:

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

这里是 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

我的理解是错误InvocationTargetException,通常是类名错误,这里不能直接解决,因为我在startActivity中没有调用任何类。但是我认为我的语法不正确,也许该方法不适合使用。当然,如果我取消注释 setDataAndType 行,它会显示相同的错误。

我注意到当我启动我的隐式意图时出现了错误。

  • 我的第二个问题是 Daroon Player 在我的机顶盒上运行良好,我可以在电视上看到我的流。但是当我尝试从 Eclipse 模拟器启动它时,它无法播放,即使我可以从 VLC 播放它......模拟器是否强大到足以读取这些流?

我希望您对如何解决这个问题有一些线索! :)

【问题讨论】:

  • 您好,正在寻找非常基本的多播 UDP/RTP 播放器。我可以为您的服务付费。

标签: android udp video-streaming rtp


【解决方案1】:

首先,您会遇到异常,因为您的设备上没有安装可以处理此类rtp:// url 的应用程序。

您可能想在开始之前检查意图:queryIntentActivities(..)

其次,我认为模拟器与任何可用的真实设备相比都非常慢,您可能不想使用模拟器来测试 A/V 流。

【讨论】:

  • 确实,queryIntentActivities 返回一个空列表!感谢您发现此问题。但是,由于我安装了 Daroon Player(可以读取 rdp 流,我试过了),它不应该在这个列表中吗?除非我误解了这个方法的目的......我们可以手动调用一个应用程序,以避免这个错误吗?
  • 我不知道 Daroon Player 是否有一个意图过滤器集来监听rtp:// url。但是每个应用程序都可以定义多个意图过滤器来监听特定的意图操作(如ACTION_VIEW)和意图数据(如rtp://...)。因此,您不必知道将启动哪个应用程序,它可以是任何应用程序。但是如果没有安装应用,监听这种intent,就会抛出异常。
  • MXPlayer 是解决方案!不幸的是,由于编解码器问题,我无法将它安装在 AVD 上,但它在电视上运行良好(甚至比 Daroon Player 更好!),所以就足够了。您提供的链接对我的问题很有启发性,非常感谢!
【解决方案2】:

VLC Android SDK 在 UDP/RTP 中非常完美

https://code.videolan.org/videolan/vlc-android

libvlc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多