2017-02-17 13 views
6

बहुत सारे वीडियो शुरू करना मैं इसे लगभग तीन दिनों के लिए परीक्षण कर रहा हूं। -एंड्रॉइड वीडियो व्यू अनुक्रमिक रूप से

videoView = (VideoView) findViewById(R.id.videoView); 

videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mediaPlayer) { 
      getNewVideo(); 
     } 
    } 
}); 

getNewVideo(); 

-

private void getNewVideo(){ 
    File file = //Any File. I have a list of files and they are executed in order 
    videoView.stopPlayback(); 
    videoView.setVideoPath(file.getPath()); 
    videoView.start(); 
} 

-

<VideoView 
    android:id="@+id/videoView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" /> 
private VideoView videoView; 

:

यहाँ सरल कोड हैमुझे इस कोड को 24/7 निष्पादित करने की आवश्यकता है।

बात यह है कि, अवधि से स्वतंत्र (बहुत भिखारी में, या 20 मिनट चलने के बाद), कुछ समय, वीडियो बस जम जाता है। कोई लॉग नहीं है, इसमें कोई अपवाद नहीं है, केवल एक चीज जो मुझे पता है वह आखिरी चीज है जो फ्रीज से पहले चल रही है।()।

लॉग वीडियो को कॉल करने के सभी प्रयासों के समान है, केवल अंतर यह है कि अंतिम प्रयास (जो फ्रीज करता है), तैयार किए जाने के बाद ही बंद हो जाता है।

किसी भी टिप की सराहना की जाती है।

बिल्ड नंबर im का उपयोग कर, आरकेएम MK902_ANDROID5.1.1-20151016.1805

एक आरकेएम MK902II एंड्रॉयड पीसी डिवाइस के साथ है 42 '

+1

केवल एक चीज मैं सिफारिश कर सकते हैं किसी अन्य खिलाड़ी की कोशिश करने के लिए है, ExoPlayer2 आप सभी कार्यक्षमता देना चाहिए, हो सकता है ExoPlayer के कुछ कार्यान्वयन आप और अधिक दे सकता है की तुलना में आप की जरूरत (प्लेलिस्ट, आदि)। –

+0

मुझे एक ही समस्या है। बिना सफलता के एक्सोप्लेयर v2 भी कोशिश की। मैं जो सोच रहा हूं वह मूल मीडिया प्लेयर में वीडियो के साथ पृष्ठभूमि में हो रहा है और चूंकि एक्सप्लेयर भी इसका उपयोग करता है, यह आईएमओ की मदद नहीं करेगा। –

+0

मुझे लगता है कि मैं समाधान (या बल्कि बग) के करीब आ गया हूं, हालांकि, मुझे नहीं पता कि यह आपको प्रभावित करता है, क्योंकि मैं एंड्रॉइड 4.2 और 4.4 का उपयोग कर रहा हूं। लॉग से मैं देखता हूं कि शायद ऑडियो एचएएल दुर्घटनाग्रस्त हो जाता है। ऐसा लगता है कि वीडियो अंततः * स्टेजफाइट बग (या उसके जैसा कुछ) का फायदा उठाते हैं, बफर ओवरफ्लो का उत्पादन करते हैं, जो मध्यस्थ को दुर्घटनाग्रस्त करता है, और इस प्रकार पूरे एप्लिकेशन को। अब मैं पूरी तरह से libvlc में ऑडियो डिकोडिंग अक्षम करके एक समाधान का परीक्षण कर रहा हूं, उम्मीद है कि यह समस्या हल करती है। –

उत्तर

5

एक टीवी स्क्रीन में चल मैं स्थानीय वीडियो फ़ाइलों खेलने ज्यादा अनुभव नहीं है (मुझे लगता है कि आपका कोड कहता है कि आपके पास "आदेश में निष्पादित फाइलों की सूची" है), लेकिन .....

मेरे अनुभव में आपको videoView.start() पर कॉल नहीं करना चाहिए जब तक कि वीडियो VideoView द्वारा ठीक से प्रारंभ नहीं किया गया हो ।

जब आप videoView.setVideoPath("path") पर कॉल करते हैं तो वीडियो व्यू मीडिया लोड करने के लिए कुछ प्रारंभिक प्रक्रियाएं करेगा। वीडियो व्यू के बाद मीडिया को लोड/प्रारंभ किया गया है, फिर इसके बाद इसे प्रीपेड लिस्टनर कॉलबैक (यदि आपने एक सेट किया है) का आह्वान किया होगा। केवल जब वीडियोबैक द्वारा इस कॉलबैक को बुलाया गया है तो आपको वीडियो प्लेबैक शुरू करने के लिए VideoView.start() पर कॉल करना चाहिए।

तो ... जब आप अपने VideoView पर onCompletionListener सेट ... आप भी एक onPreparedListener स्थापित करना चाहिए। जब VideoView आपकी कक्षा में वापस रिपोर्ट करता है कि यह तैयार है .... प्लेबैक शुरू करने के लिए VideoView.start() पर कॉल करें।

videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      videoView.start(); 
     } 
    } 
}); 

इसके अलावा, मेरे कोड में मैं VideoView.suspend() के लिए एक कॉल इससे पहले कि मैं बाद में एक वीडियो खेलने के लिए VideoView का फिर से उपयोग कर सकते हैं। अपने getNewVideo() विधि की शुरुआत में VideoView.suspend() पर कॉल जोड़ने का प्रयास करें।

+0

मैंने यह किया, लेकिन यह समस्या का कारण नहीं था। वही समस्या हो रही है। – Otuyh

+0

जब आप वीडियो कहते हैं तो "फ्रीज" .... क्या आप थोड़ा और वर्णनात्मक हो सकते हैं? क्या ऑडियो अभी भी खेल रहा है? इसके अलावा, विफलता के बिंदु के बाद विफलता के बिंदु से पहले कुछ लॉग डेटा प्रदान करें। वहां कुछ ऐसा हो सकता है कि आप केवल विश्वास नहीं दे रहे हैं। – dell116

1

जोड़ने

videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
      @Override 
      public boolean onError(MediaPlayer mediaPlayer, int i, int i1) { 

       getNewVideo(); 
       return true; 
      } 
     }); 
+0

कोई त्रुटि घटना कैद नहीं की जाती है। – Otuyh

+0

यह सब अनिवार्य रूप से त्रुटि को संभालने और अगले वीडियो को चलाने शुरू कर देगा। पोस्टर को न केवल त्रुटियों को संभालने की जरूरत है, बल्कि यह भी पता है कि उनके वीडियो क्यों नहीं चल रहे हैं। – dell116

+0

समस्या यह हो सकती है कि उपयोगकर्ता मीडिया प्लेयर द्वारा असमर्थित वीडियो प्रारूप का उपयोग कर रहा है, – mlika

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