android - एंड्रॉइड: मल्टीमीडिया फ्रेमवर्क के लिए डिकोडर को कैसे एकीकृत किया जाए



android-ndk android-mediaplayer (1)

एंड्रॉइड एसएफ फ्रेमवर्क में, codecs media_codecs.xml माध्यम से पंजीकृत हैं। मानक एंड्रॉइड वितरण में, एक उदाहरण media_codecs.xml यहां पाया जा सकता है । सभी ऑडियो-विजुअल घटकों को OMX घटकों के रूप में पंजीकृत किया गया है।

1. कोडेक पंजीकरण

अपने वीडियो डिकोडर को पंजीकृत करने के लिए, आपको <Decoders> सूची के तहत एक नया एंट्री जोड़नी होगी यह सुनिश्चित करने के लिए कि आपका कोडेक हमेशा उठाया गया है, कृपया सुनिश्चित करें कि आपका codec विशिष्ट MIME प्रकार के लिए पहली प्रविष्टि के रूप में सूचीबद्ध है। एक H.264 विकोडक के लिए एक उदाहरण प्रविष्टि नीचे के रूप में हो सकता है।

<Decoders>
    <MediaCodec name="OMX.ABC.XYZ.H264.DECODER" type="video/avc" >
        <Quirk name="requires-allocate-on-input-ports" />
        <Quirk name="requires-allocate-on-output-ports" />
    </MediaCodec>
    <MediaCodec name="OMX.google.h264.decoder" type="video/avc" />

कहा पे,

ए। OMX.ABC.XYZ.H264.Decoder आपके घटक का नाम है

ख। video/avc आपके घटक का MIME प्रकार है। इस उदाहरण में, यह एक एवीसी / एच .264 वीडियो डिकोडर को दर्शाता है।

c.The अगले 2 बयानों quirks या अपने घटकों की विशेष आवश्यकताओं को निरूपित। दिए गए उदाहरण में, requires-allocate-on-input-ports की आवश्यकता है Stagefright requires-allocate-on-input-ports Stagefright फ्रेमवर्क को इंगित करता है कि घटक सभी को इनपुट पोर्ट्स पर बफ़र आवंटित करना पसंद करता है। इसी तरह, अन्य एक प्रकार का quirk यह सूचित कर रहा है कि घटक भी इसके आउटपुट पोर्ट पर आवंटित करना पसंद करेंगे। सिस्टम में समर्थित quirks की एक सूची के लिए, आप OMXCodec::getComponentQuirks cpp फ़ाइल में फ़ंक्शन OMXCodec::getComponentQuirks का उल्लेख कर सकते हैं। ये क्विकर्स झंडे में अनुवाद करते हैं, जो तब घटकों को बनाने और शुरू करने के लिए ढांचे द्वारा पढ़ाए जाते हैं।

उदाहरण के उदाहरण में, यह दिखाया जाता है कि आपका OMX घटक डिफ़ॉल्ट Google के कार्यान्वित वीडियो डिकोडर से पहले पंजीकृत है।

नोट : यदि आप किसी एंड डिवाइस पर कोशिश कर रहे हैं, तो आपको यह सुनिश्चित करना होगा कि यह प्रविष्टि अंतिम media_codecs.xml फ़ाइल में दिखाई media_codecs.xml

2. ओएमएक्स कोर पंजीकरण

अपना घटक बनाने और यह सुनिश्चित करने के लिए कि सही कारखाना विधि लागू की जाती है, आपको अपने OMX कोर को Stagefright फ्रेमवर्क के साथ पंजीकृत करना पड़ सकता है

एक नए कोर को पंजीकृत करने के लिए, आपको libstagefrighthw.so नामक एक नई लाइब्रेरी बनाना होगा जो आपके /system/lib में /system/lib पर स्थित होगा। इस लाइब्रेरी को createOMXPlugin प्रतीक का पर्दाफाश करना होगा जो कि dlsym द्वारा देखा जाएगा।

OMX कोर का पंजीकरण इस प्रकार है: OMXMaster आह्वान करता है जो आंतरिक रूप से addPlugin("libstagefrighthw.so")addPlugin , createOMXPlugin को देखा जाएगा जो कि makeComponentInstance , destroyComponentInstance आदि के लिए अन्य फ़ंक्शन पॉइंटर्स का उपयोग किया जाता है।

एक बार जब OMX कोर शुरू हो गया है, तो आप एंड्रॉइड फ्रेमवर्क के भीतर अपने खुद के घटक को चलाने के लिए तैयार हैं। OMXMaster लिए संदर्भ यहाँ पाया जा सकता है

इन परिवर्तनों के साथ, आपके वीडियो डिकोडर को एंड्रॉइड मंचफ्राइट फ्रेमवर्क में एकीकृत किया गया है।

हाल ही में मैंने एंड्रॉइड को सफलतापूर्वक एक वीडियो डिकोडर पोर्ट किया है। इसके अलावा एक सतह के दृश्य पर आउटपुट को डंप किया गया और देशी एपीआई के उपयोग से आउटपुट की जाँच की गई। अब अगला कार्य खेलने, रोकें, स्ट्रीमिंग आदि को लागू करना है। मीडिया प्लेयर की अन्य विशेषताओं का अर्थ है। यह करना एक पुन: कार्य होगा क्योंकि इन सभी कार्यात्मकता पहले से ही एंड्रॉयड मल्टीमीडिया फ़्रेमवर्क में परिभाषित हैं। मैंने सुना है कि हम अपने डिकोडर को प्लग-इन के रूप में बना सकते हैं और इसे एंड्रॉइड के मल्टीमीडिया फ़्रेमवर्क में एकीकृत कर सकते हैं। हालांकि मैं इसके बारे में उलझा हुआ हूं, मैं इसके बारे में कोई जानकारी नहीं मिल सकता इसलिए मैं कृपया किसी भी पाठकों से अनुरोध करता हूं कि उपरोक्त समस्या के लिए कुछ रिलेवेंट लिंक या समाधान। अग्रिम धन्यवाद, आपके उत्तर की प्रतीक्षा कर रहा है।





stagefright