2010-12-16 6 views
29

मुझे कुछ स्पष्ट याद आना होगा, लेकिन मुझे यह निर्धारित करने की अनुमति देने के लिए कुछ भी नहीं मिल रहा है जब MediaPlayer ऑडियो बफर कर रहा है। मैं इंटरनेट ऑडियो स्ट्रीम कर रहा हूं और मैं एक बफरिंग इंडिकेटर प्रदर्शित करना चाहता हूं, लेकिन मैंने जो कुछ भी कोशिश नहीं की है, मुझे यह जानने की अनुमति मिलती है कि जब मीडियाप्लेयर ऑडियो को बफर में बाधित करता है, तो मैं एक बफरिंग सूचक को सही ढंग से प्रदर्शित नहीं कर सकता। कोई सुराग?एंड्रॉइड - कैसे कहें मीडियाप्लेयर

+0

इस पर कोई अपडेट? मैं स्ट्रीमिंग वीडियो प्लेयर बनाने की कोशिश कर रहा हूं। सभी टिप्पणियां आपका स्वागत है। – Sen

उत्तर

6

@ डैनियल, @ जेआरएल के उत्तर पर आपकी टिप्पणी के अनुसार, आप शायद यह थ्रेड कताई करके और टाइमआउट की प्रतीक्षा करके काम कर सकते हैं।

DetectBufferTimeout.java (अनचाहे) की तरह कुछ अच्छी तरह से करेगा।

हालांकि, मैं सहमत हूं कि इस अलग थ्रेड को कताई करना एक हैक का थोड़ा सा है। शायद OnBufferingUpdateListener बफरिंग प्रगति में बदलाव के बावजूद onBufferingUpdate() पर कितनी बार कॉल करता है, इस बारे में गारंटी दे सकती है ताकि हम यह पता लगा सकें कि हमें वही मूल्य मिल रहा है या नहीं।

+1

धन्यवाद, मैट। मेरी समस्या यह है कि मीडियाप्लेयर वास्तव में बफर को ट्रैक रोकने के लिए कोई सूचना नहीं देता है। लेकिन आपका सुझाव अभी भी अच्छा है। मुझे लगता है कि बफरिंग प्रगति की जांच करने के बजाए एक ही तकनीक लागू होगी ... मुझे नाटक की प्रगति की जांच करनी चाहिए। अगर यह अपडेट नहीं हुआ है और यह मेरे अंत से रोका या बंद नहीं हुआ है, तो MediaPlayer इंस्टेंस को कुछ और ऑडियो डेटा बफर करने के लिए इसे रोक दिया होगा। धन्यवाद! – Daniel

+0

आह हाँ, मुझे एहसास नहीं हुआ था कि आप जानना चाहते थे कि ट्रैक कब स्पष्ट रूप से रुक गया था क्योंकि यह अपने बफर के माध्यम से बाहर चला गया था। –

1

OnBufferingUpdate श्रोता पंजीकृत करें।

+2

धन्यवाद। मैंने ऐसा किया है, लेकिन ऐसा लगता है कि मुझे ऑडियो ट्रैक का प्रतिशत बताता है जिसे buffered किया गया है। मैंने ट्रैक के वर्तमान प्ले टाइम की तुलना करने की कोशिश की। मैंने सोचा कि शायद मैं देख सकता हूं कि वर्तमान बफर प्रतिशत वर्तमान प्ले टाइम प्रतिशत <= है। लेकिन यह काम नहीं करता है क्योंकि मीडियाप्लेयर में कुछ बफरिंग कोड बेक किया गया है ताकि बफर पूरी तरह से बाहर हो जाने से पहले बफर हो। इसलिए जब ट्रैक बफरिंग हो रहा है तो मेरे पास अभी भी बताना (या नियंत्रण) करने का कोई तरीका नहीं है। उम्मीद है कि मुझे कुछ याद आ रहा है? – Daniel

10

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

हालांकि, मैंने देखा कि मीडियाप्लेयर स्थिरांक कुछ जोड़े हैं जो उपयोग में हो सकते हैं: MEDIA_INFO_BUFFERING_START और MEDIA_INFO_BUFFERING_END। लेकिन वे केवल एपीआई स्तर 9 + में उपलब्ध हैं, और दस्तावेज़ उनके बारे में कुछ भी नहीं कहते हैं। मुझे लगता है कि इन्हें OnInfoListener के साथ उपयोग किया जा सकता है।

मैं निराश हूं, लेकिन कम से कम मैं अपने पहियों को कताई बंद कर सकता हूं और किसी और चीज पर जा सकता हूं।

47
नीचे की तरह

(एपीआई स्तर ≥ 9):

mp.setOnInfoListener(new OnInfoListener() { 

    @Override 
    public boolean onInfo(MediaPlayer mp, int what, int extra) { 
     switch (what) { 
      case MediaPlayer.MEDIA_INFO_BUFFERING_START: 
       loadingDialog.setVisibility(View.VISIBLE); 
       break; 
      case MediaPlayer.MEDIA_INFO_BUFFERING_END: 
       loadingDialog.setVisibility(View.GONE); 
       break; 
     } 
     return false; 
    } 
}); 

नोट: वहाँ एंड्रॉयड में एक ज्ञात बग है। एचएलएस स्ट्रीम खेलते समय यह कभी भी OnInfoListener या OnBuffering को कॉल नहीं करता है। इस लिंक को जांचें OnInfoListener bug

+0

यह सही काम करता है! धन्यवाद –

+5

क्या तथ्य यह है कि 'मीडियाप्लेयर' ने बफरिंग गारंटी शुरू कर दी है कि उसने प्लेबैक बंद कर दिया है? मैं इस बारे में निश्चित नहीं हूँ। – shujj

+0

मैं आपको दस लाख का भुगतान करता हूं;) – ZimaXXX

0

आप ऐसे थ्रेड का उपयोग कर सकते हैं जो मीडियाप्लेयर की वर्तमान स्थिति की जांच करता है। यदि स्थिति बदलती नहीं है, तो आप निष्कर्ष निकाल सकते हैं कि मीडिया बफरिंग स्थिति में है। यहां पूरा ट्यूटोरियल है जो मैंने लिखा: http://www.ottodroid.net/?p=260