2011-10-04 23 views
8

खेलते समय एंड्रॉइड मीडिया प्लेयर में 15 सेकंड देरी/कैशिंग से कैसे बचें मैं एक मीडिया प्लेयर को कार्यान्वित कर रहा हूं जो रिमोट मशीन से स्ट्रीम चलाता है। मेरे ऐप के माध्यम से मैं रिमोट मशीन को नियंत्रित कर सकता हूं (उदा। दूसरे की तलाश करें)। आकर्षण की तरह काम करता है, लेकिन: एंड्रॉइड मीडिया प्लेयर कुछ पागल 10-15 सेकंड (!!) बफर करता है, जिसका अर्थ है कि प्रत्येक क्लिक ('तलाश') को प्रभावी होने के लिए 10-15 सेकंड लगते हैं, भले ही यह एक सेकंड से भी कम हो डेटा आता है।धारा

मेरा प्रश्न: क्या कैशिंग को नियंत्रित करने (सीमा) करने का कोई तरीका है? या मैं बस कुछ गलत कर रहा हूँ? क्या मैं अकेला हूं इस मुद्दे को?

मेरे कोड बहुत सरल है:

player = new MediaPlayer() 
player.setDataSource(url); 
player.setOnPreparedListener(new OnPreparedListener() { 

    public void onPrepared(MediaPlayer mp) { 
     mp.start(); 
    } 
}); 
player.prepareAsync(); 

अद्यतन: मैं एक स्थानीय स्व निर्मित मिनी HTTP सर्वर का उपयोग कर रहा Androids मीडिया प्लेयर के लिए मेरी बाइट धारा कनेक्ट करने के लिए। ऐसा लगता है कि एंड्रॉइड डीआरएम इस मामले में देरी/कैशिंग है। अभी भी स्पष्ट नहीं है क्यों (और क्यों नहीं यदि मैं अपने आईआईएस से कनेक्ट करता हूं जो फ़ाइल होस्ट करता है)। यह भी नहीं पता कि इसे कैसे कामयाब किया जाए।

इनपुट स्वागत है!

धन्यवाद! डैनियल

उत्तर

1

ठीक है, इस बीच मैं समाधान के करीब हो गया। मेरी समस्या का स्रोत बंद कर दिया एंड्रॉइड डीआरएम है! (नहीं, मैं एक संरक्षित फाइल नहीं खेल रहा हूं। इसका मानक एमपी 3)।

एंड्रॉइड 3.1 में डीआरएम पेश किया गया प्रतीत होता है (मैं गैलेक्सी टैब 10.1 पर परीक्षण कर रहा था)। यह एम्यूलेटर पर ठीक काम करता है (शायद डीआरएम लागू नहीं किया गया है?)

कोई विचार है कि मैं इसे कैसे अक्षम या तेज कर सकता हूं? एंड्रॉइड डीआरएम इम्प्लेक्स में कहीं भी 10 सेकंड टाइमर लगता है जो इंतजार कर रहा है - जो भी, कोई विचार नहीं। मेरी त्रुटि लॉग:

10-06 17:38:19.020: ERROR/MediaExtractor(226): **********MediaExtractor::Create 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(226): add uniqueid 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 1 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :ADD_UNIQUEID 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 3 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :ADD_CLIENT 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(226): Entering BpDrmManagerService::openDecryptSession 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 27 
10-06 17:38:19.020: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FROM_URI 
10-06 17:38:19.020: ERROR/DrmManagerService(Native)(225): Entering DrmManagerService::openDecryptSession with uri 

10 seconds wait 

10-06 17:38:29.040: ERROR/DrmManager(Native)(225): DrmManager::openDecryptSession: no capable plug-in found 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): NULL decryptHandle is returned 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(226): no decryptHandle is generated in service side 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(226): remove uniqueid 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 2 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :REMOVE_UNIQUEID 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 4 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :REMOVE_CLIENT 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(226): setDrmServiceListener 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): Entering BnDrmManagerService::onTransact with code 5 
10-06 17:38:29.040: ERROR/IDrmManagerService(Native)(225): BnDrmManagerService::onTransact :SET_DRM_SERVICE_LISTENER 
10-06 17:38:29.040: ERROR/DrmManagerService(Native)(225): Entering setDrmServiceListener 
+0

क्या आपने कभी इसके लिए कोई समाधान पाया है? – ernazm

+1

कोई भी जिसे मैंने साझा करने की हिम्मत नहीं की :) कुछ पुराने 3.0 एंड्रॉइड संस्करण पर मैं काम कर सकता था इसके बारे में \ n \ n से \ n \ r तक मेरी HTTP प्रतिक्रिया न्यूलाइन को प्रतिस्थापित करके। हाँ, उस पल में मेरी सीएस डिग्री लौटने के बारे में सोच रहा था :)। शायद मैंने वहां कुछ बग का शोषण किया। दुर्भाग्य से इस परीक्षण का परीक्षण करने के लिए कोई डिवाइस नहीं है, इसलिए मैं पुन: पेश नहीं कर सकता। – Daniel

0

इसे आजमाएं। इस निश्चित रूप से :: आप में मदद मिलेगी

private class TouchandshowTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected Void doInBackground(Void... arg0) { 
     try { 
     player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
     player.setDataSource("URL"); 
     player.prepare(); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

     return null; 
    } 
    protected void onPostExecute(final Void unused) { 

    } 
} 

OnCreate()

new TouchandshowTask().execute(); 
+0

दुर्भाग्यवश इससे मदद नहीं मिली। और इससे भी बदतर, मैंने देरी को कम करने के लिए शुरुआत में स्थानांतरण को टर्बोचार्ज करने की कोशिश की: मैंने पहली मेगाबाइट (3 में से 3) को दूसरी बार स्थानांतरित कर दिया, और अभी भी इसे शुरू करने के लिए 10 सेकंड लग गए! कोई विचार नहीं कि वहां क्या चल रहा है, लेकिन यह कैशिंग समस्या की तरह महसूस नहीं करता है। – Daniel

+0

मुझे इस समस्या का कभी सामना नहीं हुआ है, मुझे सर्वर से ध्वनि भी मिलती है लेकिन कोई देरी नहीं होती है। मुझे 50 ध्वनि मिलती है लेकिन समस्या कभी नहीं बढ़ती –

+1

जब मैं बस सर्वर से फ़ाइल स्ट्रीम करता हूं तो यह मेरे लिए भी पूरी तरह से काम करता है। लेकिन एक बार जब मैं स्ट्रीम में ट्यूनिंग कर रहा हूं तो देरी हो रही है ... – Daniel

0

समस्या न केवल एंड्रॉइड मीडिया प्लेयर पर हो सकती है। वीडियो स्ट्रीम करने वाले सर्वर को आवश्यक प्रारूप का समर्थन करना चाहिए।

यदि यह एमपी 4 है तो आपको एच 264-छद्म-स्ट्रीमिंग मॉड्यूल (एचएलएस के लिए समान) स्थापित करने की आवश्यकता है यदि यह एमएसएस (माइक्रोसॉफ्ट चिकनी स्ट्रीमिंग) है - आईआईएस के लिए विशेष मॉड्यूल हैं।

इसके अलावा, उपयोगकर्ता 'खोज करने' के बाद इसका मतलब है कि मूल प्लेयर रेंज अनुरोध भेज देगा, जिसे सर्वर द्वारा समर्थित किया जाना चाहिए। Nginx डिफ़ॉल्ट रूप से उनका समर्थन करता है, आईएसएस & अपाचे के साथ कुछ समस्याएं हैं। हालांकि आसान विन्यास योग्य।

0

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

ए (खराब हैक) वर्कअराउंड एमपी 3 फ़ाइलों से XING शीर्षलेख को हटाने के लिए है (यह वह जगह है जहां वीबीआर जानकारी संग्रहीत की जाती है)। ऐसा लगता है कि खिलाड़ी एक सरल एल्गोरिदम पर वापस आ जाता है और केवल 100kb बफर करने के बाद मेरी सभी फ़ाइलों के लिए प्लेबैक सफलतापूर्वक शुरू करता है ...