2012-09-21 16 views
8

का उपयोग कर समस्या तैयार करते हैं, मुझे एक वीडियो स्ट्रीमिंग एप्लिकेशन के साथ एक अजीब समस्या का सामना करना पड़ रहा है जिस पर मैं काम कर रहा हूं। वीडियो/ऑडियो की वास्तविक स्ट्रीमिंग मेरे सभी परीक्षण उपकरणों पर ठीक काम कर रही है। हालांकि, आरटीएसपी यूआरएल का उपयोग करते समय, किसी भी डिवाइस 4.0+ पर, तैयार() तुरंत लौटता है (इससे वीडियो को लोड होने और कुछ अन्य सिस्टमों में हस्तक्षेप करते समय उपयोगकर्ताओं को उचित प्रतिक्रिया प्रदान करने का कोई कारण होता है)।एंड्रॉइड 4.0.4 मीडियाप्लेयर आरटीएसपी यूआरएल

नीचे कोड मैं कहाँ प्रारंभ और सेटअप मेरी MediaPlayer के ब्लॉक है, लेकिन मन में कुछ चीजें रखना:

  • मेरे initPlayer विधि एक AsyncTask से कहा जाता है।
  • वीडियो अंततः सही ढंग से खेलता है, लेकिन वीडियो लोड के दौरान तुरंत लौटने की तैयारी उपयोगकर्ता को फीडबैक की कमी बनाता है। पूरी प्रक्रिया के दौरान
  • किसी भी प्रकार की कोई त्रुटि नहीं पाए जाते हैं
  • start() मेरी OnPreparedListener, जो स्पष्ट रूप से जब तैयार (एक मुद्दा बन जाता में MediaPlayer पर कहा जाता है onPrepared विधि के माध्यम से) देता है इससे पहले कि यह वास्तव में खेला जा करने के लिए तैयार है ।
  • HTTP स्ट्रीम ठीक काम करने लगते हैं, और 4.0 से नीचे प्रत्येक टेस्ट डिवाइस पर समस्या उत्पन्न नहीं होती है।

मैं इसे हास्यास्पद समय के लिए ठीक करने की कोशिश कर रहा हूं, और इस समस्या में भाग लेने वाले किसी और को खोजने में सक्षम नहीं हूं। किसी भी विचार की बहुत प्रशंसा की जाएगी।

public void initPlayer() { 
     //We first need to make sure the MediaPlayer isn't null 
     if(mMediaPlayer==null){ 
      mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer.setOnPreparedListener(mediaPlayerPreparedListener); 
      mMediaPlayer.setOnCompletionListener(mediaPlayerCompletionListener); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     } 
     //If a video/stream has been chosen while another is already playing 
     else if(mMediaPlayer.isPlaying()){ 
      mMediaPlayer.reset(); 
     } 
     //Video is not in full screen mode 
     second = false; 
     try { 
      mMediaPlayer.setDataSource(videoString); 
      holder = mPreview.getHolder(); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepare(); 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      e.printStackTrace(); 
     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    //onPreparedListener 
    private OnPreparedListener mediaPlayerPreparedListener = new OnPreparedListener(){ 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
      vidPb.setVisibility(View.INVISIBLE); 
     } 
    }; 
+0

मैं अभी एक ही मुद्दे का सामना करना पड़ रहा हूँ:

सभी सब में, यह कुछ इस तरह दिखता चाहिए। क्या आपने समस्या का समाधान किया है? यदि हां कृपया समाधान के साथ अपने प्रश्न का उत्तर दें। इंतज़ार कर रही...!!! –

+1

कोई समाधान ??? –

+0

दुर्भाग्यवश मुझे कोई समाधान नहीं मिला, हालांकि मैंने कुछ समय पहले इस परियोजना पर काम करना बंद कर दिया था। – bread

उत्तर

0

mp.prepareAsync() का उपयोग करें क्योंकि यह स्ट्रीमिंग मीडिया के लिए बेहतर है। prepare() ब्लॉक का उपयोग तब तक जब तक मीडियाप्लेयर प्लेबैक के लिए तैयार नहीं है या एक IllegalStateException होता है। इसके अलावा, एंड्रॉइड 4 (आईसीएस) में, किसी भी यूआई थ्रेड पर अवरुद्ध करना और भी सख्त है और एक एएनआर (गतिविधि प्रतिक्रिया नहीं दे रहा है) संवाद प्रकट हो सकता है।

एक अंतिम विचार, एंड्रॉइड ऐप्स में e.printStackTrace(); का उपयोग करने से बचने का प्रयास करें। इसके बजाय, से एंड्रॉइड लॉगिंग सिस्टम में त्रुटियों को प्रिंट करने के लिए Log.e("TAG_STRING", e.getMessage(), e); का उपयोग करें।

try { 
     mMediaPlayer.setDataSource(videoString); 
     holder = mPreview.getHolder(); 
     mMediaPlayer.setDisplay(holder); 
     mMediaPlayer.prepareAsync(); 
    } catch (IllegalArgumentException e) { 
     Log.e("TAG_STRING", e.getMessage(), e); 
    } catch (SecurityException e) { 
     Log.e("TAG_STRING", e.getMessage(), e); 
    } catch (IllegalStateException e) { 
     Log.e("TAG_STRING", e.getMessage(), e); 
    } catch (IOException e) { 
     Log.e("TAG_STRING", e.getMessage(), e); 
    } 
+1

धन्यवाद पेटी। मैं एक AsyncTask से तैयार कॉलिंग कर रहा हूँ, इसलिए यह यूआई थ्रेड को अवरुद्ध नहीं कर रहा है। भले ही, मैंने readyAsync() के साथ-साथ एक ही परिणाम के साथ प्रयोग करने का प्रयास किया है। – bread

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