2011-09-22 15 views
19

मैं एक एंड्रॉइड ऐप विकसित कर रहा हूं और मैं अपने ऐप में कुछ वीडियो चलाने के लिए एंड्रॉइड एसडीके के MediaPlayer का उपयोग कर रहा हूं। जब मैं अपने ऐप में वीडियो चलाता हूं, तो पांच बार में से एक के बारे में, ऑडियो बिना वीडियो के बजाता है। यह एक साधारण कोडिंग त्रुटि नहीं है क्योंकि अधिकांश समय वीडियो पूरी तरह से खेलता है।एंड्रॉइड मीडियाप्लेयर - कभी-कभी कोई वीडियो नहीं खेला जाता है, भले ही ऑडियो प्ले

मैंने माना है कि मेरे कोड में दौड़ की स्थिति ने बग का कारण बना दिया है। हालांकि, मैंने कई डीबग स्टेटमेंट जोड़े और सब कुछ ठीक से स्थापित होने पर प्रतीत होता है जब वीडियो नहीं चलता है।

मैंने वेब स्कैन किया है और SO समाधान खोजने की कोशिश कर रहा है लेकिन कोई भी पर्याप्त नहीं है (नीचे देखें)।

क्या कोई इस प्रकार की समस्या से पहले चला गया है? यदि ऐसा हो, तो आप क्या करते?

इसी प्रकार के प्रश्न:

MediaPlayer Video not played

android media player shows audio but no video

android video, hear sound but no video

कुछ अधिक जानकारी:

  • मैं इस बग में दो फोन पर आया हूं। सैमसंग चार्ज वीडियो पर 80% समय लगता है और 20% समय ऑडियो है लेकिन कोई वीडियो नहीं है। टी-मोबाइल धूमकेतु पर यह बहुत खराब है; वीडियो केवल समय के लगभग 10% खेलता है।
  • फ़ाइल के साथ कोई समस्या नहीं है, मैंने विभिन्न वीडियो फ़ाइलों और कोडेक्स की कोशिश की है और एक ही समस्याएं प्राप्त की हैं।
  • स्टोरेज माध्यम में कोई समस्या नहीं है। जब मैंने आंतरिक स्टोरेज और एसडीकार्ड पर संग्रहीत किया था, तो मैंने वीडियो चलाने की कोशिश की है, न तो कोई फर्क पड़ता है। मैंने इसे खेलने से पहले कुछ फाइल पढ़ने की भी कोशिश की है, उम्मीद है कि सिस्टम इसे कैश करेगा, लेकिन ऐसा लगता है कि यह भी मदद नहीं करता है।

अद्यतन:

मैं इस डिबगिंग किया गया है और logcat के माध्यम से देख। मैंने पाया है कि जब वीडियो काम करता है, निम्नलिखित की तरह कुछ logcat में प्रकट होता है:

09-28 00:09:03.651: VERBOSE/PVPlayer(10875): setVideoSurface(0x65638) 

लेकिन जब वीडियो नहीं चला है, यह एक अशक्त प्रविष्टि वहाँ दिखाई देता है:

09-28 00:03:35.284: VERBOSE/PVPlayer(10875): setVideoSurface(0x0) 

अद्यतन 2:

जब वीडियो खेलने में विफल रहता है, तो फ़ंक्शन MediaPlayer.OnInfoListener पैरामीटर what==MEDIA_ERROR_UNKNOWN(0x1) और extra==35 के साथ फ़ंक्शन। मैंने एंड्रॉइड कोड-बेस को देखा कि यह निर्धारित करने के लिए कि अज्ञात त्रुटि 35 का क्या अर्थ है। मैं फ़ाइल pv_player_interface.h में आया, जो इंगित करता है कि त्रुटि कोड 35 PVMFInfoTrackDisable नामक किसी चीज़ से मेल खाता है। मैंने उस शब्द को गुमराह किया जो मुझे नामक फ़ाइल में लाया। उस फ़ाइल ने मुझे निम्नलिखित अनजान स्पष्टीकरण दिया:

4.34।PVMFInfoTrackDisable

अधिसूचना कि पेटिकुलर ट्रैक अक्षम है। यह प्रति ट्रैक आधार पर है। असम्पीडित ऑडियो/वीडियो स्वरूपों के लिए, सामग्री में उपलब्ध ट्रैक को चुनने की प्रक्रिया के दौरान, यदि डिकोडर ट्रैक का समर्थन नहीं करता है, तो PVMFInfoTrackDisable ईवेंट भेजा जाता है। यदि आवश्यक हो, तो प्रति ट्रैक एक बार भेजा जाएगा।

मुझे लगता है कि मैं एक लंबा सफर तय कर चुका हूं, लेकिन जवाब खोजने के करीब नहीं हूं ... अभी भी जांच कर रहा हूं।

+1

क्या आप हर बार एक ही मीडिया सामग्री खेलते हैं या एक अलग? – bluefalcon

+0

क्या आपने यह सुनिश्चित करने के लिए कई डिवाइसों पर परीक्षण किया है कि यह डिवाइस त्रुटि नहीं है? – Cameron

+0

मैंने आपकी टिप्पणियों की इनलाइन का जवाब दिया है। – speedplane

उत्तर

18

मैं एक पूरी तरह से hackish तरह से समस्या हल हो गया है, हालांकि।

  1. ईविल जानकारी 35 संदेश: मुझे लगता है कि कभी-कभी MediaPlayer.OnInfoListener अतिरिक्त == 35 के साथ कहा जाता हो जाएगा पाया वहाँ वास्तव में दो समस्याएं हैं। जब ऐसा होता है, तो आप खराब हो जाते हैं और वीडियो ठीक से नहीं खेलेंगे। मुझे नहीं पता कि इसका क्या कारण है। मुझे मिला एकमात्र फिक्स वीडियो को पुनरारंभ करने और फिर से तैयार करने के लिए पूरी तैयारी एसिंक प्रक्रिया के माध्यम से जाना था। वीडियो प्लेबैक आमतौर पर दूसरी बार काम करता है।

  2. वीडियो का आकार सेट नहीं: MediaPlayer.OnPreparedListener के बाद भी जारी किया जाता है (या समतुल्य() रिटर्न तैयार) वीडियो आकार निर्धारित किया गया हो नहीं सकता है। रिटर्न तैयार करने के बाद वीडियो आकार आमतौर पर कुछ मिलीसेकंड सेट किए जाएंगे, लेकिन कुछ ही क्षणों के लिए यह एक घबराहट स्थिति में है। यदि आप वीडियो आकार सेट करने से पहले MediaPlayer.start() को कॉल करते हैं, तो प्लेबैक कभी-कभी (लेकिन हमेशा नहीं) असफल हो जाता है। इसके लिए दो संभावित समाधान हैं: (1) मतदान मीडियाप्लेयर.getVideoHeight() या getVideoWidth() जब तक वे शून्य न हों या (2) प्रतीक्षा करें जब तक OnVideoSizeChangedListener को कॉल नहीं किया जाता है। इन दो घटनाओं में से केवल एक के बाद, क्या आपको प्रारंभ() शुरू करना चाहिए।

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

+1

उत्कृष्ट, उत्कृष्ट, उत्कृष्ट विश्लेषण और कामकाज! –

+0

मैंने इस मुद्दे पर कई दिनों तक संघर्ष किया। OnPrepareListener का मतलब पूरी तरह से तैयार नहीं है। मैं समाधान (1) अपनाने और यह काम करता है। बहुत बहुत धन्यवाद! –

+0

मेरे लिए काम नहीं करता है :-(मुझे 35 त्रुटि नहीं मिलती है और ऊंचाई और चौड़ाई हमेशा ठीक होती है – Nativ

-4

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

मुझे पता है कि यह उस तरह का उत्तर नहीं है जिसे आप सुनना चाहते हैं लेकिन मुझे कोई अन्य आत्मा नहीं मिली।

यहाँ आप अपने डिवाइस के लिए कस्टम रोम लगता है: XDA Developers

मुझे आशा है कि मैं आपकी सहायता कर सकता है।

बेस्ट सादर और हैप्पी फिल्म देख

सफारी =)

+0

धन्यवाद, लेकिन मैं सिर्फ एक फोन लिख रहा हूं, न केवल अपने फोन पर वीडियो चलाने की कोशिश कर रहा हूं। मैं अपने उपयोगकर्ताओं को नए रोम स्थापित करने के लिए नहीं कह सकता। – speedplane

1

मैं इस बग का अध्ययन 2 सप्ताह कर रहा हूं, और मैंने वास्तविक समस्या को कम या ज्यादा समझ लिया है। बेशक मैं के बारे में बात कर रहा हूं ईविल जानकारी 35 संदेश। यदि आप इस अद्भुत अजीब त्रुटि से मिले हैं, तो अब आप खुश हो सकते हैं और सैमसंग जैसे कुछ विक्रेताओं को गोली मार सकते हैं: डी ...

समस्या आती है क्योंकि उपयोगकर्ता द्वारा सतह दृश्य को देखा जा सकता है (टैबहोस्ट या विराम-वेकअप फ़ंक्शन में गतिविधि, कभी-कभी फोकस में नहीं, कभी-कभी कभी भी नहीं (शायद))।

यही कारण है कि कुछ वीडियो उस रीसेट को ठीक करते हैं, क्योंकि यह फोकस प्राप्त करता है या शायद दूसरी गतिविधि/ऑब्जेक्ट इसे ओवरलैप नहीं कर रहा है।

जब उनमें से कुछ होते हैं, तो मध्यस्थता सोचती है कि आप वीडियो नहीं देख सकते हैं या यह नहीं खेल सकता है, और यह वीडियो ट्रैक को अक्षम करते हुए आपको अपने कार्यस्थल में सबसे खराब सिरदर्द देकर वीडियो ट्रैक अक्षम करता है।

अगली बग, शुभकामनाएं देखेंगे। : डी

-5

मौलिक प्रश्न यह है: सतह से पहले क्रिएटिव ने वीडियो प्लेबैक शुरू किया, जब धारक मीडियाप्लेयर के लिए तैयार नहीं है, ताकि आप केवल ध्वनि सुन सकें लेकिन तस्वीर नहीं देख पा रहे हैं!

सही तरीका है:

+5

सही तरीका है .. । – asteri

+0

जब मैं कोड इनपुट करता हूं, तो यह मुझे एक त्रुटि संकेत देता है! – yichouangle

2

बाद speedplane के सुझावों मैं निम्नलिखित कोड के साथ आया था। यदि MediaPlayer.getVideoHeight() 0 पर वापस लौटाता है तो मैं 1 सेकंड के लिए देरी करता हूं और पुनः प्रयास करता हूं। अब अगर यह पहली बार नहीं खेलता है तो यह आमतौर पर 1 सेकंड बाद खेलेंगे। मैंने देखा है कि यह कई कोशिशें लेता है।

private void videoPlayer(String path){ 
     if (mMediaController == null) 
     { 
     mMediaController = new MediaController(this); 
     mVideoView.setMediaController(mMediaController); 
     } 
     if (!mMediaController.isShowing()) 
     mMediaController.show(); 

     getWindow().setFormat(PixelFormat.TRANSLUCENT); 
     mVideoView.setVideoPath(path); 
     mVideoView.requestFocus(); 
     mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
       public void onPrepared(final MediaPlayer mp) { 
       mVideoView.seekTo(mImageSeek); 
       if (mp.getVideoHeight() == 0) { 
        final Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         @Override 
          public void run() { 
          mVideoView.stopPlayback(); 
          mMediaController = null; 
          videoPlayer(mImageFilepath); 
         } 
        }, 1000); 
       } else 
        mVideoView.start(); 
      } 
     }); 
    } 
संबंधित मुद्दे