2011-07-27 16 views
23

MediaPlayer.seekTo(int msec) क्यों गलत है?MediaPlayer.seekTo (int msecs) की सटीकता

यह कभी-कभी 30 सेकंड जल्दी होता है (एमपी 3 दोनों परिवर्तनीय और स्थिर बिटरेट के साथ)! ऑडियो के साथ स्वाभाविक रूप से समस्याग्रस्त है या यह विधि टूटी हुई है? क्या यह बफरिंग के साथ क्या करना है या क्या?

मैं यह भी देखा है कुल रनटाइम getDuration() गलत हो सकता है कि (जो एक बड़ा मुद्दा नहीं है) और मैं परीक्षण किया है कि getCurrentPosition() काफी सटीक (प्लेबैक के हर n सेकंड में के रूप में है, यह n हजार से बढ़ जाती है)। मैं एंड्रॉइड 2.2 पर हूं।

अंत में, क्या कोई जानता है कि कौन सा प्रारूप वास्तव में इसके लिए लगातार काम करता है (अधिमानतः Wav के अलावा जो संभवतः यह करता है)?

संपादित करें:

मैं मुख्य रूप से पॉडकास्ट सुनता हूं। स्मोडाकास्ट और सोचने की अनुमति कई बार समस्याग्रस्त हो गई है, यहां तक ​​कि सीबीआर में परिवर्तित/पुन: एन्कोड किए जाने के बाद भी। फाइल दूषित नहीं हैं।

क्विकमीडिया कनवर्टर (विंडोज) ठीक काम करता प्रतीत होता है लेकिन ध्वनि कनवर्टर (उबंटू) ने कुछ डोडी फाइलें उत्पन्न की हैं। मैं पूर्व में चिपकने की कोशिश करूंगा ...

अद्यतन: क्विकमीडिया कनवर्टर वास्तव में अच्छा काम करता है लेकिन कोई विचार नहीं। तब से कोई समस्या नहीं!

उत्तर

0

मुझे एंड्रॉइड के बारे में कुछ भी पता नहीं है। लेकिन मुझे पता है मीडिया फ़ाइल फ़ॉर्मेट के अधिकांश में एक प्रावधान है कि प्रविष्टियों या संकेतों प्रविष्टि की तलाश कहा जाता है .. कि यहां से इस विशेष समय वीडियो & ऑडियो शुरू किया जाना चाहिए नीचे समय संकेत है

खेलने के लिए के लिए पता चलता है कि वहाँ प्रवेश 10 सेकंड
12 सेकंड
14 सेकंड

फिर अगर आप 11 सेकंड के लिए की तलाश तो यह हमेशा 10 सेकंड से खेलेंगे अगर आप 12 सेकंड के लिए की तलाश तो यह हमेशा 12 सेकंड

से खेलेंगे अच्छे के लिए फ़ाइल की तलाश उच्च संकेत प्रविष्टि के साथ मिलनी चाहिए ..

27

दो तरीके हैं जिनमें एक मल्टीमीडिया ढांचा मल्टीमीडिया (एवी) फ़ाइल पर एक तलाश ऑपरेशन करेगा।

  1. कुंजी फ्रेम करने के लिए शोध - वीडियो जब इनकोडिंग आमतौर पर कुछ मैं फ्रेम या कुंजी फ्रेम के रूप में कहा जाता है, तो इसका मतलब है फ्रेम जानकारी के बहुत है और अपनी संपूर्णता में एक फ्रेम को डिकोड करने के लिए किया जा सकता है कि । अंतरिक्ष की मात्रा को कम करने के लिए सभी फ्रेम को मुख्य फ्रेम के रूप में एन्कोड नहीं किया जाता है, इसके बजाय उन्हें पी (अनुमानित) फ्रेम या भविष्यवाणी फ्रेम के रूप में एन्कोड किया जाता है, जिसका अर्थ है कि आप कुंजी फ्रेम से सहायता के साथ पी फ्रेम को डीकोड कर सकते हैं।

    तो तलाश ऑपरेशन के दौरान, इस मामले में मांग किसी दिए गए समय अवधि के लिए निकटतम कुंजी फ्रेम में की जाती है। उदाहरण के लिए यदि उपयोगकर्ता 40secs की तलाश करता है और निकटतम कुंजी फ्रेम 35 वें सेकेंड पर है तो 35 वां सेकेंड की मांग की जाती है, न कि 40 वें सेकंड तक।

  2. समय की तलाश करें - यह उपयोगकर्ता द्वारा मांगे जाने वाले सटीक समय की तलाश में है।

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

ऑडियो के मामले में केवल फ़ाइलें वहाँ दो मामलों हो सकता है (अगर कोई पार्सर या एक पार्सर कि टाइमस्टैम्प तालिका निर्माण कर लिया तो doesnot है -)

  1. सीबीआर - लगातार बिट दर - के बाद से बिट दर स्थिर है हम एक निश्चित समय के लिए बाइट्स की आवश्यक संख्या को छोड़ (बिटरेट * timeToSeek = बाइट्स छोड़ी जाने वाली) कर सकते हैं

  2. VBR - विभिन्न बिट दर - बिट दर लगातार यह अलग रहता नहीं है। तो इस मामले में फ़ाइल के औसत बिटरेट को ढूंढें और फिर उपर्युक्त विधि का उपयोग करें, इस मामले में मांग सटीक नहीं होगी।

अब आपके प्रश्न पर वापस आ रहा है, मैं विश्वास से कह सकता हूं कि यह अच्छी तरह से काम करता है और अधिकांश मीडियाफाइलों के लिए सटीक है।

इस तरह के मुद्दों का सामना करने का एकमात्र कारण यह है कि मीडिया फ़ाइल स्वयं दूषित हो गई है। (खोज के दौरान 30 सेकंड्स का अंतर होना संभव नहीं है + आप कह रहे हैं कि अवधि सही ढंग से नहीं लौटाई गई है और एंड्रॉइड 2.2 के लिए कोई भी मध्यस्थ एपीआई टूटा नहीं गया है)

एंड्रॉइड द्वारा कौन से प्रारूप समर्थित हैं यह link

तो क्या आप एक और एमपी 3 फ़ाइल के साथ प्रयास कर सकते हैं?

+0

पवित्र बकवास, आपको दस लाख बार धन्यवाद। मैं अपने वेबपैप को फोनगैप से लपेटने की कोशिश कर रहा था और मेरे ऑडियो स्प्राइट्स बंद थे। मुझे लगता है कि यह फोनगैप के प्रदर्शन की वजह से था ... फिर एंड्रॉइड सीखने और अपना पहला ऐप बनाने के बाद, मुझे पता चला कि मुझे वही सटीकता के मुद्दे मिल रहे थे। विकास के 2 दिनों के बाद, मैंने यह जवाब पढ़ा और महसूस किया कि मैं एक बहुत संपीड़ित 'ogg' फ़ाइल का उपयोग कर रहा था और यह समझ में आया। मैंने उच्च गुणवत्ता वाली ध्वनि का उपयोग किया और मेरे सभी ऑडियो स्प्राइट्स पूरी तरह से काम कर रहे थे। – ilovett

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