Android पर हार्डवेयर त्वरित वीडियो डिकोडिंग का उपयोग कैसे करें?




video h.264 (3)

ExoPlayer ( github ) का प्रयोग करें।

यह एक Google प्रायोजित ओपन-सोर्स प्रोजेक्ट है जो प्लेटफ़ॉर्म के मीडियाप्लेयर को प्रतिस्थापित करता है। पाइपलाइन में प्रत्येक घटक नमूना स्रोत (कैसे आपके कस्टम प्रोटोकॉल से H.264 फ्रेम निकाले जाते हैं) को प्रतिपादन (एक सतह, सतह के मिश्रण, आदि) में विस्तारित किया गया है।

इसमें उपयोग करने वाला एक अच्छा डेमो ऐप शामिल है।

एक आत्म-परिभाषित प्रोटोकॉल का परीक्षण करने के लिए मुझे एक शोध परियोजना के लिए हार्डवेयर-त्वरित H.264 डिकोडिंग की आवश्यकता है।

जैसा कि मेरे पास वेब पर खोज है, मुझे एंड्रॉइड पर हार्डवेयर-त्वरित वीडियो डिकोडिंग करने के कुछ तरीके मिल गए हैं।

  1. Ffmpeg libstagefright (libstagefright का अवलोकन ) का उपयोग करें या ओएस में libstagefright का उपयोग सीधे here
  2. विशिष्ट हार्डवेयर प्लेटफ़ॉर्म पर ओपनमैक्स का उपयोग करें। यहां सैमसंग डिवाइस के बारे में और यहां क्वालकॉम स्नैपड्रैगन श्रृंखला के बारे में बताया गया है
  3. कुछ लोगों ने पीवीप्लेयर का उल्लेख किया,

कुछ लोग "say" libstagefright एकमात्र तरीका है जबकि क्वालकॉम लोगों ने सफलतापूर्वक सफलता हासिल की है।

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

जैसा कि मैंने गैलेक्सी टैब 7.7 (3.2 और एनक्सियोस), वीएलसी, मोबो, रॉक, वीप्लेयर, रॉक और मोबो काम ठीक के साथ अपने एच / डब्ल्यू त्वरण के कुछ वीडियो प्लेयर का परीक्षण किया है, वीएलसी काम नहीं करता है, वीप्लेयर में एक प्रतिपादन प्रतीत होता है बग जो इसके प्रदर्शन को खर्च करता है।

वैसे भी, मैंने रॉकप्लेयर पर 'ऑपरेशन' किया और डेटा \ डेटा \ com.redirecting \ rockplayer में libs को हटा दिया, और सॉफ़्टवेयर डिकोडिंग क्रैश हो गया जबकि एचडब्ल्यू डिकोडिंग अभी भी ठीक है! मुझे आश्चर्य है कि उन्होंने ऐसा कैसे किया। ऐसा लगता है कि एचडब्ल्यू त्वरण हार्डवेयर प्लेटफॉर्म से स्वतंत्र हो सकता है।

क्या कोई इस समस्या को नाखुश कर सकता है? या अतिरिक्त जानकारी या बेहतर विवरण के साथ कोई संदर्भ प्रदान करते हैं?


उपरोक्त प्रश्न का उत्तर देने के लिए, मुझे एंड्रॉइड से संबंधित कुछ अवधारणाओं को पेश करने दें

OpenMAX एंड्रॉइड कोडेक इंटरफेस के लिए ओपनमैक्स का उपयोग करता है। इसलिए सभी मूल कोडेक्स (हार्डवेयर त्वरित या अन्यथा) OpenMAX इंटरफ़ेस प्रदान करते हैं। इस इंटरफ़ेस को कोडेक का उपयोग करके मीडिया को डीकोड करने के लिए स्टेजफ्राइट (प्लेयर फ्रेमवर्क) द्वारा उपयोग किया जाता है

NDK एंड्रॉइड जावा अनुप्रयोगों को एनडीके का उपयोग कर अंतर्निहित सी / सी ++ देशी पुस्तकालयों के साथ बातचीत करने की अनुमति देता है। इसके लिए जेएनआई (जावा नेटिव इंटरफेस) का उपयोग करना आवश्यक है।

अब आपके प्रश्न पर आना How to tap native decoder to decode raw video bitstream?

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

4.1 (जेली बीन संस्करण) में, एंड्रॉइड जावा एपीआई के माध्यम से आवेदन स्तर पर हार्डवेयर त्वरित डिकोडर्स तक पहुंच प्रदान करता है। http://developer.android.com/about/versions/android-4.1.html#Multimedia पर नए एपीआई के बारे में अधिक जानकारी


आप MediaExtractor और MediaCodec को आजमा सकते हैं (वे एनडीके में भी उपलब्ध हैं - AMediaExtractor और AMediaCodec - यहां native-codecnative-codec खेलने के लिए नमूना देखें)





stagefright