Displaying live UDP or RTP stream (multicast) on Android(在 Android 上显示实时 UDP 或 RTP 流(多播))
问题描述
几周以来我是 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
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
我已经尝试从播放器(Daroon 播放器,来自 PlayStore)中读取它,并且效果很好,所以我认为我的愚蠢问题不是由于广播.
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 :
使用带有 ACTION_VIEW 的新 Intent,Android 会选择一个可以查看内容的应用;
Using a new Intent with an ACTION_VIEW, and Android selects an app that can view the content;
使用 MediaPlayer 类和 VideoView.
Using the MediaPlayer class and VideoView.
我有两个问题,让我们从最重要的开始:- 对于上述两种解决方案,都有一个问题:我到处都读到 MediaPlayer 只支持 http/s 和 rtsp 协议,对吗?对于动作视图,这是我之前尝试过的:
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);
这里是 LogCat:
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
我的理解是错误InvocationTargetException,通常是类名错误,这里不能直接解决,因为我在startActivity中没有调用任何类.但是我认为我的语法不正确,也许该方法不适合使用.当然,如果我取消注释 setDataAndType 行,它会显示相同的错误.
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.
- 我的第二个问题是 Daroon Player 在我的机顶盒上运行良好,我可以在电视上看到我的流.但是当我尝试从 Eclipse 模拟器启动它时,它无法播放,即使我可以从 VLC 播放它...模拟器是否强大到足以读取这些类型的流?
我希望您对如何解决这个问题有一些线索!:)
I hope that you have some clues on how to solve that! :)
推荐答案
首先,您会收到异常,因为您的设备上没有安装可以处理这样的 rtp://
url 的应用程序.
First, you get the exception because there is no app installed on your device which can handle such an rtp://
url.
您可能需要在开始之前检查意图:queryIntentActivities(..)
You may want to check the intent before you start it: queryIntentActivities(..)
其次,我认为模拟器与任何可用的真实设备相比都非常慢,您可能不想使用模拟器来测试 A/V 流.
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.
这篇关于在 Android 上显示实时 UDP 或 RTP 流(多播)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 Android 上显示实时 UDP 或 RTP 流(多播)
基础教程推荐
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01