2011-08-28 20 views
20

मैं एक ऐप बना रहा हूं जो सफलतापूर्वक एमपी 4 वीडियो फ़ाइल को बटन पर क्लिक कर रहा है। मैं वीडियो के यूआरआई (रिमोट यूआरएल) को प्री-बफर या प्रीलोड करना चाहता हूं ताकि बटन क्लिक होने के बाद वीडियो के खेल में देरी न हो। मैं इसे तुरंत क्लिक करना और खेलना चाहता हूं, इसलिए ऐप लॉन्च स्प्लैश स्क्रीन पर प्री-लोडिंग या बफरिंग एक फिटिंग समाधान की तरह दिखता है। केवल एक चीज है मुझे नहीं पता कि कैसे। मेरे पास कई एंड्रॉइड बुक्स हैं, लेकिन उनमें से कोई भी बफरिंग को कवर नहीं करता है या वे केवल ऑडियो को कवर करते हैं।एंड्रॉइड ऐप विकास में प्री-लोड या प्री-बफर .mp4 वीडियो

क्या कोई मुझे बता सकता है कि पिछले गतिविधि पर वीडियो को कैसे बफर करना है?

धन्यवाद।

+1

क्या आप केवल वीडियो के एक हिस्से को बफर करना चाहते हैं? यदि नहीं, तो आप MP4 को फ्लैश मेमोरी डाउनलोड करने के लिए डाउनलोड कर सकते हैं और फिर फ़ाइल की तरह खेल सकते हैं। – braden

+0

यकीन नहीं है, लेकिन क्या आपने स्टार्ट कॉल करने का प्रयास किया था, फिर तुरंत रोकें या रोकें? –

+0

क्या आपको कभी समाधान मिला? –

उत्तर

0

देशी एंड्रॉइड ब्राउज़र मीडिया फ़ाइलों (ऑडियो या वीडियो) को बफर नहीं करता है, इसलिए HTML5 पर ऐसा करने का कोई तरीका नहीं है। जैसा कि @ bradenV2 ने कहा था, आप फ़ाइल को स्मृति में कॉपी कर सकते हैं (यदि आप ऐप है तो आप फोनगैप का उपयोग कर सकते हैं)। कॉल prepareAsync() मीडियाप्लेयर अपने वीडियो बफ़र जाएगा

mediaPlayer = new MediaPlayer(); 
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mediaPlayer.setOnPreparedListener(<implementation of MediaPlayer.OnPreparedListener>); 

mediaPlayer.setDataSource(dataSource); 
mediaPlayer.prepareAsync(); 

:

2

आप वीडियो को तैयार है, इस तरह के लिए MediaPlayer उपयोग कर सकते हैं। MediaPlayer.OnPreparedListener.onPrepared() आपको बताएगा कि क्या mediaplayer अभी तक खेलने के लिए तैयार है। http://developer.android.com/guide/topics/media/exoplayer.html

यह पृष्ठभूमि में बफरिंग के रूप में अलग राज्य का समर्थन करता है:

बस तैयार ध्वज की जाँच करें और mediaplayer.start() फोन जब आप अपने बटन पर क्लिक करें "onButtonClick"

+0

इस उत्तर के लिए धन्यवाद। आईडी एक वीडियो प्लेलिस्ट बनाना पसंद करती है जो आने वाले वीडियो को प्रीबफर कर देगी। क्या मुझे इसके लिए 2 मीडियाप्लेयर का उपयोग करना चाहिए? आईडी प्रत्येक वीडियो के बीच संक्रमण की तरह तत्काल होना चाहिए। मैं 2 खिलाड़ियों के बीच बदलने की सोच रहा था। क्या आप इस दृष्टिकोण की सिफारिश करेंगे? – codeshark

+0

आप वह दृष्टिकोण कर सकते हैं या आप "प्रीलोड हेल्पर" क्लास बना सकते हैं जो अपकमिंग वीडियो के लिए प्री-डाउनलोड करता है। – leegor

+0

यदि वीडियो ए खेल रहा है और मैंने वीडियो बी को डेटा स्रोत सेट किया है और readyAsync() को कॉल किया है, तो क्या मीडिया प्लेयर में वीडियो ए चलाना बंद हो जाएगा? प्रीलोड हेल्पर क्लास द्वारा, क्या वह दूसरे मीडिया प्लेयर का उपयोग करेगा? साथ ही, नए एक्सोप्लेयर एंड्रॉइड क्लास का उपयोग करने पर आपके विचार क्या हैं? धन्यवाद! – codeshark

3

गूगल ExoPlayer जो मीडिया खेलने के लिए एक उच्च स्तर प्रदान करता है जारी किया :

// 1. Instantiate the player. 
player = ExoPlayer.Factory.newInstance(RENDERER_COUNT); 
// 2. Construct renderers. 
MediaCodecVideoTrackRenderer videoRenderer = … 
MediaCodecAudioTrackRenderer audioRenderer = ... 
// 3. Inject the renderers through prepare. 
player.prepare(videoRenderer, audioRenderer); 

मैंने इसे अपने स्वयं के प्रोजेक्ट में उपयोग किया और यह बहुत ही कुशल लगता है। इसके अलावा Google ने प्लेयर का पूर्ण डेमो बनाया: https://github.com/google/ExoPlayer/tree/master/demo/src/main/java/com/google/android/exoplayer/demo/full जो सरल डेमो से अधिक शक्तिशाली है।

+0

इस उत्तर के लिए धन्यवाद ह्यूगो। आईडी एक वीडियो प्लेलिस्ट एप्लिकेशन बनाना पसंद है। वीडियो आईपी से अधिक हो जाएगा। आईडी प्रत्येक वीडियो के बीच संक्रमण की तरह तत्काल होना चाहिए। वीडियो चलाने से पहले, आईडी आने वाले अगले वीडियो को प्रीबफर करना पसंद करती है। क्या मुझे एक्सप्लेयर के दो उदाहरणों का उपयोग करना चाहिए? क्या यह संभव है? क्या आप इस दृष्टिकोण की सिफारिश करेंगे? – codeshark

+0

मैं sur नहीं हूं कि exoplayer कई उदाहरणों का समर्थन करता है लेकिन मुझे यकीन है कि ऐसा करने का एक तरीका होना चाहिए। मैं ExoPlayer का उपयोग करने पर विचार करता हूं, आप github पर कोई समस्या खोल सकते हैं: https://github.com/google/ExoPlayer –