2012-07-12 23 views
4

我是幾個星期以來對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在Android上顯示實時UDP或RTP流(多點傳送)

我已經試圖從玩家閱讀(Daroon球員,從PlayStore),它運作良好,所以我認爲我的愚蠢問題不是由於廣播。

我看到,這是能夠顯示視頻內容給用戶通過不同的方式:

  • 使用新的意圖與ACTION_VIEW和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播放它...模擬器是否足夠強大,可以讀取這些類型的流?

我希望你有一些關於如何解決這個問題的線索! :)

+0

嗨,尋找非常基本的多播UDP/RTP播放器。我可以爲您的服務付款。 – Pearlboy 2018-03-01 18:17:29

回答

2

首先,你會得到例外,因爲你的設備上沒有安裝任何應用程序,它可以處理這樣一個rtp:// url。

您可能需要在啓動前檢查目的:queryIntentActivities(..)

其次,我覺得模擬器相比是任何可用的真實的設備很慢,你可能不希望使用模擬器來測試A/V流。

+0

的確,queryIntentActivities返回一個空列表!謝謝你發現這個問題。但是,因爲我安裝了Daroon Player(它可以讀取rdp流,我試過了),它不應該在這個列表中嗎?除非我誤解了這種方法的用途......我們可以手動調用一個應用程序,以避免此錯誤? – Thibault 2012-07-12 15:20:33

+0

我不知道Daroon Player是否有一個旨在偵聽'rtp://'URL的intent過濾器。但每個應用程序都可以定義多個意圖過濾器來偵聽特定的意圖操作(比如'ACTION_VIEW')和意向數據(比如'rtp:// ...')。因此,您不必知道將啓動哪個應用程序,它可以是任何應用程序。但是如果沒有安裝應用程序,那麼傾聽這種意圖,就會拋出異常。 – chrulri 2012-07-12 15:30:47

+0

PS:你可能想看看MXPlayer:https://groups.google.com/forum/?fromgroups#!topic/mx-videoplayer/qzlEfoAEod0 – chrulri 2012-07-12 15:32:34