2011-11-29 22 views
6

मेरे पास एक एंड्रॉइड प्रोजेक्ट है जहां मुझे यूडीपी या आरटीपी यूनिकास्ट वीडियो स्ट्रीम प्राप्त करने और उन्हें वापस चलाने के लिए क्लाइंट ऐप बनाने की आवश्यकता है। दुर्भाग्यवश, मुझे यह काम नहीं मिल रहा है और समाधान के लिए बड़े पैमाने पर खोज की गई है!एंड्रॉइड पर यूडीपी वीडियो स्ट्रीमिंग

मैं ज़ूम (एंड्रॉइड 3.2) और नेक्सस एस (एंड्रॉइड 2.3.6) पर परीक्षण कर रहा हूं और जानता हूं कि क्लाइंट के रूप में MX Player (एक तृतीय-पक्ष मीडिया प्लेयर ऐप) का उपयोग करते समय वे सामग्री चला सकते हैं लेकिन मैं सामग्री को वापस चलाने के लिए मूल मीडिया प्लेयर नहीं मिल सकता है। मैंने एक साधारण वीडियो व्यू और मीडियाप्लेयर दोनों का उपयोग करने का प्रयास किया है, लेकिन दोनों एक ही त्रुटि कोड के साथ विफल हो जाते हैं और मुझे वास्तव में कोई उपयोगी जानकारी नहीं मिल सकती है।

वीडियो एच 2264 एएसी ऑडियो के साथ एन्कोड किया गया है।

इसके अलावा, सर्वर एक तृतीय पक्ष द्वारा एक समाधान है जिसके पास मेरे पास कोई पहुंच नहीं है (udp या rtp निर्दिष्ट करने के अलावा) लेकिन जैसा कि मैंने कहा, एमएक्स प्लेयर का उपयोग करते समय, धाराएं खेली जा सकती हैं।

public class Main extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 
     MediaPlayer player = new MediaPlayer(); 
     SurfaceView surface = (SurfaceView) findViewById(R.id.video); 

     player.setDisplay(surface.getHolder()); 

     player.setDataSource(this, Uri.parse("udp://192.168.0.78:1234")); 

     player.prepare(); 

     player.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       Log.d("SimpleVideoPlayer", "Starting player"); 
       mp.start(); 
      } 
     }); 

     player.setOnErrorListener(new OnErrorListener() { 

      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) { 
       Log.d("SimpleVideoPlayer", "error with code: " + what); 
       return false; 
      } 
     }); 

    }catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

त्रुटि मैं प्राप्त कर रहा हूँ है:

11-29 15:44:14.660: D/MediaPlayer(15451): Couldn't open file on client side, trying server side 
11-29 15:44:14.670: E/MediaPlayer(15451): error (1, -2147483648) 
11-29 15:44:14.670: W/System.err(15451): java.io.IOException: Prepare failed.: status=0x1 
11-29 15:44:14.670: W/System.err(15451): at android.media.MediaPlayer.prepare(Native Method) 
11-29 15:44:14.670: W/System.err(15451): at com.android.vidplayer.Main.onCreate(Main.java:26) 
11-29 15:44:14.670: W/System.err(15451): at android.app.Activity.performCreate(Activity.java:4397) 
11-29 15:44:14.670: W/System.err(15451): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1804) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1856) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.access$500(ActivityThread.java:125) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1049) 
11-29 15:44:14.670: W/System.err(15451): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 15:44:14.670: W/System.err(15451): at android.os.Looper.loop(Looper.java:132) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.main(ActivityThread.java:4157) 
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invoke(Method.java:491) 
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-29 15:44:14.670: W/System.err(15451): at dalvik.system.NativeStart.main(Native Method) 

मैं इंटरनेट अनुमतियों भी निर्धारित किया है

यहाँ मेरी कोड के मीडिया प्लेयर हिस्सा है।

क्या किसी के पास कोई सुझाव है ?? मुझे कहीं भी कोई उपयोगी जानकारी नहीं मिल रही है।

धन्यवाद।

+0

क्या आपने 'player.prepare()' के बजाय 'player.prepareAysnc()' का उपयोग करने का प्रयास किया है? धाराओं को चलाने के दौरान आपको 'readyAsync() 'का उपयोग करना चाहिए। – Squonk

उत्तर

3

मुझे यकीन है कि एंड्रॉयड देशी रूप यूडीपी का समर्थन करता है के रूप में यह नेटवर्क प्रोटोकॉल

http://developer.android.com/guide/appendix/media-formats.html

कई 3 पार्टी मीडिया प्लेयर्स FFMPEG पुस्तकालयों पर आधारित हैं में सूचीबद्ध नहीं है नहीं कर रहा हूँ। आप अपनी परियोजना में एफएफएमपीईजी का उपयोग करना चाह सकते हैं हालांकि यह एक कार्य है।

+0

हां ऐसा लगता है कि यह मामला है! मैंने उस पृष्ठ को देखा होगा लेकिन उम्मीद कर रहा था कि कोई अपने समाधान के साथ आया होगा! – theChumpus

+0

@theChumpus, Alex, क्या आपने चुड़ैल ffmpeg lib का उपयोग किया था? क्या आपने किसी भी पूर्व-संकलित lib का उपयोग किया था? क्या आपने स्ट्रीम h264 वीडियो की कोशिश की? – Derzu

+0

@Derzu मैंने यूनिक्स के तहत ffmpeg संकलित किया है जैसा कि वे http://code.google.com/p/dolphin-player/ पर करते हैं। यह एच 264 हां खेलता है। –

1

आप विटामी लाइब्रेरी का उपयोग करके udp: // के माध्यम से भी स्ट्रीम कर सकते हैं (यह दृश्यों के पीछे ffmpeg का उपयोग करता है)। http://www.vitamio.org/en/

+0

मैंने अपनी पिछली पोस्ट हटा दी है, क्योंकि मैंने अपने टैबलेट (नेक्सस -7) पर विटामिन का परीक्षण किया है और यह अच्छा काम करता है। – user1767754

+0

क्या आप कृपया https://stackoverflow.com/questions/45521175/vitamio-unable-to-play-udp-streaming-in-android की जांच कर सकते हैं? –

+0

मुझे 4 साल पहले एक विशेष परियोजना के लिए अपने पीओसी कोड की तलाश करनी होगी; मेरे पास वास्तविक कार्य नहीं है जो निश्चित रूप से किया गया था, क्योंकि मेरे पास इसका स्वामित्व नहीं है। कोई वादा नहीं कर रहा, लेकिन मैं देख लूंगा। –

संबंधित मुद्दे