2011-08-10 24 views
5

को दोबारा बदलें मेरे पास एक वीडियो व्यू वाला एक एप्लिकेशन है जो एक ही वीडियो को तब तक लूपिंग रखेगा जब तक कोई उपयोगकर्ता डिवाइस (टच स्क्रीन इत्यादि) में कुछ नहीं करता है, वर्तमान में मैं वीडियो को पुनरारंभ करने के लिए ऑनकंप्लिशन लिस्टनर() का उपयोग कर रहा हूं एक बार यह खत्म होता है। यह सैमसंग प्रतिपूर्ति को छोड़कर, मैंने परीक्षण किए गए हर डिवाइस पर ठीक से काम करता है।वीडियो व्यू लूपिंग वीडियो

mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
      mVideoView.setVideoPath(file.getAbsolutePath()); 
      mVideoView.start(); 
     } 
    }); 

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

यहाँ मेरी कोड है। हर दूसरे डिवाइस मैं इस सटीक एक ही कोड के साथ पर परीक्षण किया है पर यह वीडियो को दोहराने के लिए काम किया है। क्या किसी को पुन: भरने के बारे में कुछ भी पता है जो इस त्रुटि का कारण बन सकता है? मैं शायद setVideoPath() के लिए कॉल में देरी सोचा, और (200-300ms से शुरू) यह मदद कर सकता है, लेकिन है कि कोई को प्रभावित किया था। मैं वास्तव में यहां एक नुकसान में हूँ।

मैं अपने लॉग इन इन संदेशों को देख रहा हूँ:

त्रुटि/QCvdec (87): OMX फ्लश जारी जब vdec अभी तक प्रारंभ नहीं किया गया है।

त्रुटि/QCvdec (87): OMXCORE-एसएम: प्राप्त आदेश अक्षम (2)

त्रुटि/QCvdec (87): OMX फ्लश जारी जब vdec अभी तक प्रारंभ नहीं किया गया है।

त्रुटि/QCvdec (87): OMXCORE-एसएम: प्राप्त आदेश सक्षम (3)

लेकिन इन लॉग हो रही हैं दोनों जब वीडियो शुरू होता है (पहली बार खेलता है) और जब यह विफल शुरू करने के लिए फिर। इसलिए मुझे यकीन है कि अगर वे मेरी समस्या से संबंधित हैं नहीं कर रहा हूँ

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

मैं सिर्फ शून्य पर mVideoView की स्थापना, और फिर findViewById साथ यह करने के लिए एक नया संदर्भ में हो रही() सही setVideoPath से पहले की कोशिश की()। मैं जानता हूँ कि इस तरह से OnCompletionListener की स्थापना की है मुश्किल होगा। लेकिन इस पर ध्यान दिए बिना कि यह वैसे भी काम नहीं करता है, फिर भी एक ही अंधेरे स्क्रीन।

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

मुझे लगता है कि कभी कभी वीडियो सूचना के लिए भी पहली बार शुरू नहीं करता है शुरू कर दिया है। मैं ये वही दो लाइनों का उपयोग कर रहा यह पहली बार शुरू करने के लिए:

 mVideoView.setVideoPath(file.getAbsolutePath()); 
     mVideoView.start(); 

यह अधिक consistantly शुरू करने के लिए लगता है, लेकिन% काफी नहीं 100 जब इसकी पहली बार यह खेला जा रहा है।

संपादित करें 3: यह मैं कैसे यह अब की स्थापना की है। मैं मैन्युअल OnPreparedListener की स्थापना कर रहा हूँ मेरे लिए वीडियो शुरू करने के लिए। तो मैं अपने OnCreate() को यह जोड़ा

 mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer arg0) { 
       mVideoView.start(); 
      } 
     }); 

फिर जब मैं वीडियो मैं सिर्फ केवल setVideoPath() विधि कहते हैं, इस तरह पुनः आरंभ करने के लिए तैयार हूँ:

mVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    public void onCompletion(MediaPlayer mp) { 
     mVideoView.setVideoPath(file.getAbsolutePath()); 

    } 
}); 

यह लगता है कर रहा करने के लिए चाल। मैं निश्चित रूप से यह सुनिश्चित करने के लिए थोड़ी देर के लिए दौड़ रहा हूं।

संपादित 4:

@MByD VideoView setVideoPath() के लिए कोड में setVideoUri के लिए एक आवरण है()। setVideoURI() mStartWhenPrepared = false; सेट कर रहा है डिफ़ॉल्ट OnPreparedListener यह स्विच यह तय करने के लिए करता है कि प्लेबैक शुरू करना है या नहीं। यही कारण है कि यह डिफ़ॉल्ट श्रोता के साथ शुरू नहीं होता है। मैंने इसे उससे अधिक नहीं देखा है, लेकिन एक सेटर विधि हो सकती है जो मुझे mStartWhenPrepared मान को सत्य में बदलने देता है, जिससे वीडियो को डिफ़ॉल्ट श्रोता से शुरू किया जा सकता है।

+0

दिलचस्प सवाल। – PedroAGSantos

उत्तर

3

क्या आपने कॉल करने से पहले अपने वीडियो को तैयार करने की कोशिश की है .start()?

डॉक्स से

: एक OnPreparedListener साथ http://developer.android.com/reference/android/media/MediaPlayer.html#prepare%28%29

आप जब इसकी तैयार अपने वीडियो शुरू कर सकते हैं।

+0

वीडियो व्यू का उपयोग करते समय आपको तैयार करने की आवश्यकता नहीं है। – MByD

+0

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

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