केवल प्रदर्शन के लिए, GLSurfaceView
, SurfaceTexture
का उपयोग वीडियो फ्रेम प्रस्तुत करने के लिए, और MediaPlayer
का उपयोग करने के लिए एक आसान तरीका है। प्रोकेश का उत्तर एक ओपन सोर्स लाइब्रेरी से जुड़ा हुआ है जो दिखाता है कि इसे कैसे पूरा किया जाए। यदि आप उन शर्तों को एक साथ खोजते हैं तो आसपास के कई अन्य उदाहरण हैं। उस मार्ग को लेते हुए, आप ओपनजीएल बनावट में वीडियो फ्रेम खींचते हैं और बनावट को कैसे प्रस्तुत किया जाता है, इसका उपयोग करने के लिए ओपनजीएल शेडर्स बनाते हैं। (मैं अधिक जानकारी के लिए Prokash पूछ और उनके जवाब को स्वीकार करता है, तो यह अपनी आवश्यकताओं को भरने के लिए पर्याप्त है सुझाव है।)
इसी तरह, आप MediaCodec
और MediaExtractor
साथ ओपन उपकरण इस्तेमाल कर सकते हैं वीडियो फ्रेम डिकोड करने के लिए। MediaCodec
को SurfaceTexture
पर आउटपुट करने के लिए कॉन्फ़िगर किया जाएगा, इसलिए आउटपुट बफर प्रदान करने के लिए आपको कुछ बॉयलरप्लेट कोड से अधिक कुछ करने की आवश्यकता नहीं होगी। फ़िल्टरिंग प्रक्रिया MediaPlayer
के समान होगी। उपलब्ध एक डिकोडर के रूप में MediaCodec
का उपयोग कर कई उदाहरण हैं, उदा। here और here। Prokash के उदाहरण के GLSurfaceView
के साथ उन उदाहरणों में TextureView
या SurfaceView
को प्रतिस्थापित करने के लिए यह काफी सरल होना चाहिए।
इस दृष्टिकोण का लाभ यह है कि आपके पास मीडिया फ़ाइल में सभी अलग-अलग ट्रैक तक पहुंच है। इसके कारण, आप ओपनजीएल के साथ वीडियो ट्रैक को फ़िल्टर करने और सीधे निर्यात के लिए अन्य ट्रैक कॉपी करने में सक्षम होना चाहिए। आप Surface
के साथ के साथइनपुट के रूप मेंइनपुट और MediaMuxer
के साथ सभी को एक साथ रखने के लिए उपयोग करेंगे। आप BigFlake पर कई प्रासंगिक उदाहरण देख सकते हैं।
आप डीकोडेड बाइट डेटा तक पहुंचने के लिए के बिनाका उपयोग कर सकते हैं और इसे इस तरह से कुशल बना सकते हैं। This example उस दृष्टिकोण को दर्शाता है। आप डेटा में हेरफेर कर सकते हैं और निर्यात के लिए एन्कोडर को भेज सकते हैं या फिट बैठकर इसे प्रस्तुत कर सकते हैं। कच्चे बाइट डेटा से निपटने में कुछ अतिरिक्त जटिलता है। ध्यान दें कि मुझे यह उदाहरण पसंद है क्योंकि यह अलग-अलग ऑडियो और वीडियो ट्रैक से निपटने का वर्णन करता है।
आप देशी कोड में या जावा रैपर में से किसी एक के माध्यम से FFMpeg का भी उपयोग कर सकते हैं। यह विकल्प तत्काल प्लेबैक की तुलना में निर्यात की दिशा में अधिक तैयार है। कुछ पुस्तकालयों के लिए here या here देखें जो जावा पर FFMpeg उपलब्ध कराने का प्रयास करते हैं। वे मूल रूप से कमांड लाइन इंटरफेस के चारों ओर रैपर हैं। आपको एफएफएमपीईजी के माध्यम से प्लेबैक प्रबंधित करने के लिए कुछ अतिरिक्त काम करने की आवश्यकता होगी, लेकिन यह निश्चित रूप से करने योग्य है।
यदि आपके कोई प्रश्न हैं, तो पूछने के लिए स्वतंत्र महसूस करें, और मैं आपके उपयोग के मामले में जो भी विकल्प सबसे अधिक समझ में आता हूं, उस पर विस्तार करने की कोशिश करूंगा।
क्या आप एक तैयार पुस्तकालय चाहते हैं जो प्रदर्शन के लिए वीडियो (जैसे नीचे दिए गए जवाब में) में हेरफेर कर सकता है, या क्या आपके पास अन्य आवश्यकताएं हैं जो इसकी अनुमति नहीं देती हैं? उत्तर में लिंक्ड प्रोजेक्ट 'MediaPlayer' के साथ' GLSurfaceView' का उपयोग करके प्रदर्शन पर फ़िल्टरिंग करने के लिए ओपनजीएल शेडर्स को लागू करता है। अगर आपको फ़िल्टर किए गए वीडियो को निर्यात करने की आवश्यकता नहीं है तो यह निश्चित रूप से एक उचित दृष्टिकोण है। अब से आपकी 'सतह' कहां से आ रही है? – Dave
हाय @ डेव, मैं वर्तमान में जांच कर रहा हूं कि प्रदर्शित वीडियो (आमतौर पर सतह पर) दोनों को समायोजित करना संभव है, लेकिन समायोजित वीडियो भी निर्यात करें। तो मेरे पास कोई ठोस 'सतह' नहीं है - यही वह है जिसे मैं ढूंढ रहा हूं :) – Diolor