2012-07-29 15 views
13

मैं एंड्रॉइड पर मीडियाप्लेयर का उपयोग कर ऑडियो स्ट्रीम कर रहा हूं।एंड्रॉइड मीडियाप्लेयर स्ट्रीमिंग नेटवर्क परिवर्तन पर रोकता है

सेल नेटवर्क या इसके विपरीत करने के लिए वाई-फाई से डिवाइस चलता है, MediaPlayer बंद हो जाता है जब प्लेबैक।

आमतौर पर वहाँ बहुत प्लेबैक तत्काल समाप्त नहीं करता है, बफर में ऑडियो के कुछ सेकंड-लायक हैं।

आदर्श रूप से मैं निर्बाध प्लेबैक के लिए स्ट्रीम चुनना चाहता हूं, लेकिन मैं नहीं देख सकता कि इसे कैसे किया जाए।

मैं सर्वर पर होस्ट की गई एमपी 3 फ़ाइलों और लाइव प्रसारण स्ट्रीम के साथ काम कर रहा हूं।

+0

हमारे साथ साझा करने के लिए कोई भी कोड? – Erol

+0

वहाँ साइडबार अगर आप MediaPlayer साथ मदद की जरूरत में उदाहरण के बहुत सारे है, लेकिन यह वास्तव में सरल है: 'MediaPlayer mMediaPlayer = MediaPlayer.create (संदर्भ, Uri.parse (यूआरएल));' 'mMediaPlayer.prepare(); ' ' mMediaPlayer.start(); ' आपको प्रारंभ हो जाएगा। यदि आप वाई-फाई से कनेक्ट हैं और 3 जी कवरेज है, तो स्ट्रीमिंग और प्लेबैक बंद होने पर वाई-फाई बंद करें। – lightversusdark

+2

हां, मुझे पता है कि मीडिया प्लेयर का उपयोग कैसे करें। मैं सिर्फ यह पूछ रहा था कि आपने उस तरफ से कुछ भी करने की कोशिश की है और अपनी प्रगति साझा करना चाहते हैं ताकि हम उस पर सुधार कर सकें। – Erol

उत्तर

0

मैं क्यों अपने मीडिया प्लेयर को रोक रहा है पता नहीं है, लेकिन हो सकता है आप एक onReceive विधि जोड़ सकता है और डाल "mp.start()" विधि में यह प्लेबैक को पुनः आरंभ करने के लिए।
Android, How to handle change in network (from GPRS to Wi-fi and vice-versa) while polling for data

आप एक अलग वर्ग बनाने के लिए आवश्यकता हो सकती है, लेकिन यह एक विधि है कि जब आप नेटवर्क स्विच कहा जाता है, जो बिंदु पर आप "mp.start()" कॉल प्लेबैक फिर से शुरू करने के लिए कर सकता है बनाने के लिए कैसे की व्याख्या करनी चाहिए (मान लीजिए एमपी आपका मीडियाप्लेयर है)।
यह मानता है कि, आपका मीडियाप्लेयर केवल रोका गया है जब आप नेटवर्क स्विच कर रहे हैं, रोका नहीं है।

14

देखने के एक सर्वर की दृष्टि से, 3 जी (वीजा विपरीत) वाईफ़ाई से नेटवर्क मोड बदल कर एक अलग आईपी के (ग्राहक) से एक नया कनेक्शन की तरह दिखाई देगा।

सर्वर है कि आप से डाउनलोड कर रहे हैं धारा (उदाहरण, सेकंड की संख्या, अनुक्रम, बाइट) (मीडिया सर्वर के विपरीत) पर नज़र रखने का समर्थन नहीं करता है, तो यह फिर से 0 बाइट से अपने एमपी 3 की सेवा शुरू करने के लिए होगा।

अपने URL एक एमपी 3 एक मानक HTTP सर्वर पर स्थित फ़ाइल की ओर इशारा करते है, तो अपनी स्थिति क्या उम्मीद करना होगा। आपको मीडिया स्ट्रीमिंग सर्वर का उपयोग करना चाहिए, ताकि आप अपनी पसंद पर डाउनलोड/स्ट्रीमिंग फिर से शुरू कर सकें। जब आप इस उद्देश्य को प्राप्त करते हैं कि कनेक्शन गुम/फिर से शुरू हो गया है, तो आप यूआरएल में फ़ाइल-स्थिति के साथ अपने mediaplayer को नए यूआरएल पर इंगित कर सकते हैं (उदाहरण सेकेंड = 1 9, बाइट्स = 57365)।

यह सुनिश्चित नहीं है कि यह आपकी मदद करता है, लेकिन यह "दृश्यों के पीछे" क्या हो रहा है।

1

कोशिश की स्थापना अपने setOnCompletionListener और setOnErrorListener। लाइव स्ट्रीम के साथ पूरी तरह से आप केवल prepareAsync() पर कॉल कर सकते हैं और यह फिर से स्ट्रीम को बंद कर देगा। ऐसा करने का कोई शानदार तरीका नहीं है जब तक कि आप अपना खुद का मीडिया ढांचा नहीं लिखते।

MEDIA_ERROR_SERVER_DIED के लिए आप onError() में भी सुन सकते हैं, फिर आप prepareAsync() फिर से आग लग सकते हैं।

आप पाएंगे कि मीडियाप्लेयर या तो त्रुटि या पूर्ण होगा। यदि आप इन कॉलबैक दोनों को संभालते हैं तो कम से कम आप नेटवर्क के परिवर्तन पर स्ट्रीम को पुनरारंभ कर सकते हैं, जैसे कि चिकनी प्लेबैक के लिए .. कस्टम मीडिया फ्रेमवर्क की आवश्यकता होगी क्योंकि एंड्रॉइड एक बहुत कमजोर है।

0

जैसा कि विदर कहते हैं, कनेक्शन को पुन: स्थापित करने से सर्वर द्वारा एक नए कनेक्शन के रूप में व्यवहार किया जाएगा।

ऐसा प्रतीत होता है कि मुझे ऑडियो प्लेबैक को डबल-बफर करना है, जिसका अर्थ है कस्टम मीडिया प्लेयर बनाना। यह निरंतर ऑडियो प्रदान कर सकता है, लेकिन लाइव स्ट्रीम को सुनते समय भी यह छोड़ जाएगा।

एमपी 3 फ़ाइल थोड़ा आसान है क्योंकि मैं प्लेबैक स्थिति जान सकता हूं। लाइव स्ट्रीम के साथ ऐसा नहीं है।

जैसा कि gmaster कहता है, नेटवर्क बदलने पर मुझे एक नया कनेक्शन स्थापित करने के लिए एक प्रसारण रिसीवर की आवश्यकता होगी। नए कनेक्शन के माध्यम से एक नया ऑडियो बफर भरने के दौरान पिछले नेटवर्क कनेक्शन से ऑडियो बफर प्लेबैक जारी रखना चाहिए।

जब नया बफर प्लेबैक शुरू करने के लिए पर्याप्त भरा होता है तो मैं इसे प्लेबैक स्विच कर सकता हूं। यदि मैं सर्वर समर्थन और थोड़ा सा काम के साथ एक फ़ाइल स्ट्रीम कर रहा हूं, तो मैं यह सुनिश्चित कर सकता हूं कि वर्तमान प्लेबैक स्थिति डेटा दोनों बफर में है और निर्बाध रूप से स्विच करें।

चूंकि लाइव स्ट्रीम बफर सिंक्रनाइज़ नहीं किए जा सकते हैं, तो स्विच होने पर अनिवार्य रूप से एक गड़बड़ी होगी।

कनेक्शन में थोड़ी देर लगने पर एक बड़ा बफर ऑडियो ड्रॉप-आउट से बच जाएगा, लेकिन प्लेबैक की पहली शुरुआत में देरी होगी। एक एमपी 3 फ़ाइल डाउनलोड की जा सकती है और बफर को वास्तविक समय से तेज़ी से भर सकती है, लेकिन लाइव स्ट्रीम वास्तविक समय में बफर होगी।

क्रिस.जेनकिन्स कुछ मीडियाप्लेयर विधियों का उल्लेख करता है जो मदद कर सकते हैं लेकिन यह बताते हैं कि ऐसा एक कस्टम ढांचे की आवश्यकता है। उसे उन शर्तों को संभालने की आवश्यकता होगी जिन्हें उन्होंने उल्लेख किया है और अन्य।

यदि मैं इसे सुंदर दिख सकता हूं तो मैं इसे यहां पोस्ट करूंगा। मैं सवाल खोलने जा रहा हूं।

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