2014-09-17 13 views
5

यह एक गतिविधि पर दो अलग-अलग वीडियो व्यू में दो अलग-अलग वीडियो चलाने के बारे में कोई सवाल नहीं है।एक ही समय में एक वीडियो व्यू में दो वीडियो चलाएं

मुझे यह देखने के लिए कहा गया है कि क्या एक वीडियो व्यू के साथ गतिविधि बनाना संभव है या नहीं। जब उपयोगकर्ता गतिविधि खोलता है, तो उन्हें बेस वीडियो चुनने के लिए कहा जाता है और फिर दूसरा वीडियो चुनें। दोनों वीडियो एक ही समय में एक वीडियो व्यू में खेलेंगे, लेकिन मूल वीडियो में 255 का अल्फा होगा और दूसरे वीडियो में 150 का अल्फा होगा।

हालांकि परीक्षण के लिए, फोन पर स्थित वीडियो फाइलें कर।

इस समय, मैं केवल एक ऐसी गतिविधि बनाने में सक्षम हूं जो वीडियो व्यू में एक वीडियो चलाता है।

मैं अगर मैं एक कस्टम VideoView वर्ग मैं OnDraw समारोह रद्द कर सकते थे और किसी तरह दूसरा वीडियो से वीडियो फ्रेम हड़पने, अल्फा लागू करते हैं और फिर पहली VideoView के कैनवास पर पुनः बनाने बनाया सोचा है, लेकिन मैं नहीं जानता कि जहां शुरू करने के लिए ।

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

मुझे यकीन नहीं है कि कहां से शुरू करना है या इस पर कैसे पहुंचा जा सकता है और यदि संभव हो, तो कुछ मार्गदर्शन या वस्तुओं का उपयोग करने के लिए कुछ मार्गदर्शन की उम्मीद कर रहा था।

मैं ग्रहण का उपयोग कर एंड्रॉइड 2.2 सिस्टम पर क्लाइंट को दिखाने के लिए डेमो एप्लिकेशन विकसित कर रहा हूं। मैं इस समय किसी भी उच्च सिस्टम को लक्षित नहीं करना चाहता क्योंकि डेमो फोन एंड्रॉइड 2.2 चलाता है।

+0

आप दूसरे के ऊपर 2 वीडियो व्यू का उपयोग कर सकते हैं। वीडियो दृश्य दोनों का फ्रेम समान होगा। वैसे भी एक वीडियो व्यू में एक ही समय में 2 अलग-अलग वीडियो खेलना संभव नहीं है। – Deepak

उत्तर

1

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

यह देखने के लिए कि मीडियाप्लेयर वीडियो व्यू के अंदर एक वीडियो कैसे प्रस्तुत करता है और मीडिया नियंत्रक प्लेबैक को कैसे नियंत्रित करता है, यह देखने के लिए the source code पर एक नज़र डालें। आप शायद एक ही वीडियो व्यू/SurfaceView पर दो मीडियाप्लेयर पॉइंट होने के लिए वहां पर हैक कर सकते हैं। वैकल्पिक रूप से आप कई डेटा स्रोतों को संभालने के लिए शायद MediaPlayer उपclass कर सकते हैं।

इन चीजों में से कोई भी करना वीडियोव्यू और मीडियाप्लेयर के लिए बनाया गया है, और प्रदर्शन एक बड़ी हिट करने जा रहा है।

यदि वीडियो व्यू का उपयोग करना कठिन आवश्यकता नहीं है, तो मेरा सुझाव मौजूदा वीडियो लाइब्रेरी जैसे ffmpeg का उपयोग करना होगा, जो बेस मीडिया कक्षाओं को फिर से लिखने से आसान और अधिक प्रदर्शनकारी होगा (चेतावनी: एफएमपीईपीई का उपयोग करने से एनडीके की आवश्यकता होगी, मैं समय बचाने के लिए existing ffmpeg wrapper का उपयोग करने का सुझाव देता हूं)।

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

संभवतः लेने का सही मार्ग इस बात पर निर्भर करता है कि आप इसे प्राप्त करने के बाद यौगिक वीडियो के साथ क्या करना चाहते हैं (एक वीडियो के रूप में वीडियो निर्यात करें, प्लेबैक को नियंत्रित करें, आदि)।

+1

हाय एंड्रयू, आपकी टिप्पणी के लिए धन्यवाद। इस सवाल को पोस्ट करने के बाद मैंने ffmpeg में देखना शुरू कर दिया, लेकिन आपने उल्लेखित ओवरले वीडियोफिल्टर क्लास नहीं मिला। –

1

एक वीडियो व्यू में दो वीडियो बजाना संभव नहीं है।ऐसा इसलिए है क्योंकि वीडियो व्यू वास्तविकता में एक विस्तारित भूतल दृश्य है, जो पुराना है, और कभी भी सुपर अच्छी तरह से काम करने के लिए काम नहीं करता है। (नीचे इस पर अधिक)

मुझे नहीं पता कि आपको वीडियो व्यू का उपयोग करने की कठोर आवश्यकता क्यों है, क्योंकि यह बहुत सरल है, और आपको जो चाहिए वह आपको नहीं देगा।

यदि वीडियो व्यू के लिए आपकी आवश्यकता है क्योंकि आप मीडिया नियंत्रण और प्लेबैक कार्यक्षमता रखना चाहते हैं, तो आप एक कस्टम व्यू बनाने से बेहतर हैं। LinearLayout बढ़ाएं और 1 के वजन के साथ दो सतह दृश्य जोड़ें। VideoView.java की सामग्री की प्रतिलिपि बनाएँ और इसे अपने नए दृश्य में रखें, और दो सतहों को दो सिंक्रनाइज़ तरीके से दो सतहों को चलाने के लिए संशोधन करें।

आप वास्तव में SurfaceViews के बजाय TextureViews का उपयोग करना बेहतर कर रहे हैं, जहां एपीआई 14 में जोड़ा गया है। यह SurfaceView की कमियों में से कई को सुधारता है, और वीडियो व्यू की तुलना में एनिमेशन जैसी चीजों को बेहतर तरीके से संभाल देगा।

+0

हाय डोगे, आपकी टिप्पणी के लिए धन्यवाद। मैंने TextureViews का उपयोग करने के बारे में सोचा, लेकिन इसे एपीआई 14 में जोड़ा गया था, और मैं एंड्रॉइड 2.2 सिस्टम पर एपीआई 8 को लक्षित करना चाहता हूं। –

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