2012-07-04 39 views
29

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

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

  1. उपयोग ffmpeg libstagefright (overview of libstagefright) या सीधे ओएस में libstagefright उपयोग करते हैं, here की तरह।
  2. विशिष्ट हार्डवेयर प्लेटफ़ॉर्म पर ओपनमैक्स का उपयोग करें। जैसे here about samsung device और here about Qualcomm Snapdragon series
  3. कुछ लोगों PVplayer,

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

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

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

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

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

+0

मैं थोड़ा उलझन में हूँ! क्या आप अपनी बिट-स्ट्रीम को डीकोड करने के लिए एच/डब्ल्यू त्वरित डिकोडर तक पहुंच (एंड्रॉइड मीडिया एपीआई के बिना) तक पहुंच निर्देशित करना चाहते हैं? चूंकि सभी आधुनिक फोन एसओसी एच/डब्ल्यू त्वरण का उपयोग करते हुए एच .264 को डीकोड करते हैं। –

+0

@ ओकबाइट्स, मैं एच/डब्ल्यू त्वरित डिकोडिंग को कार्यान्वित करना चाहता हूं हालांकि यह किया गया है। अब मैं केवल ffmpeg सॉफ़्टवेयर डिकोडिंग के साथ स्ट्रीम को डीकोड करने के बारे में जानता हूं। एच/डब्ल्यू त्वरण 1080 पी @ 30 एफपीएस पर प्रदर्शन के स्तर को संदर्भित करता है जबकि सॉफ्टवेयर डिकोडिंग बहुत कमजोर है। मैंने सीपीयू का उपयोग करने के रूप में सॉफ्टवेयर डिकोडिंग का जिक्र किया है क्योंकि एच/डब्ल्यू त्वरण मॉड्यूल भी सीपीयू का हिस्सा है। आपके द्वारा पहले से उपयोग किए जाने वाले सभी आधुनिक फोनों का क्या मतलब है एच/डब्ल्यू त्वरण? –

+0

जब गैलरी मीडिया प्लेयर का उपयोग H.264 क्लिप खेलने के लिए किया जाता है, तो हाल के एंड्रॉइड फोन एच/डब्ल्यू त्वरित एच .264 डीकोडर का उपयोग करते हैं। मुझे लगता है कि आप H.264 डीकोडर का उपयोग कच्चे H.264 बिटस्ट्रीम को डीकोड करने और फ़ाइल चलाने के बजाए डीकोडेड आउटपुट प्राप्त करने की योजना बनाते हैं, जिसमें H.264 वीडियो और कुछ ऑडियो शामिल हैं। –

उत्तर

22

ऊपर सवाल का जवाब करने के लिए, मुझे कुछ एंड्रॉयड

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

NDK का उपयोग कर मीडिया डीकोड करने के लिए StageFright (प्लेयर ढांचा) द्वारा इस्तेमाल किया एंड्रॉयड जावा आवेदन अंतर्निहित C/C++ देशी 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

+0

अवधारणाओं और उत्तरों पर आपकी स्पष्टीकरण के लिए धन्यवाद। मैंने केवल इतना सच खोजने के लिए संदर्भों को देखा है कि मुझे ओएस ढांचे में खोदना होगा। यह निश्चित रूप से काम करेगा। –

+0

हालांकि, जैसा कि रॉकप्लेयर पर ऑपरेशन बताता है, जिसमें मैंने सभी .so पुस्तकालयों को हटा दिया है और हार्डवेयर डिकोडिंग अभी भी काम करता है, जबकि सॉफ़्टवेयर डीसी विफल रहता है, एंड्रॉइड 4.0 संस्करण और बेले में इसका कुछ आसान तरीका हो सकता है। मेरे कच्चे बिटस्ट्रीम डिकोडिंग और सभी के रूप में, मुझे पूरी ओएमएक्स चीज़ को वैसे भी समझना पड़ सकता है। क्या आप जेली बीन में जावा एपीआई दे सकते हैं? –

+0

@ होलीगेन मैंने जेली बीन में मीडिया प्लेयर एपीआई के लिंक को जोड़ा है। रॉकप्लेयर के मामले में, क्या यह सीधे हार्डवेयर त्वरित डीकोडर्स का उपयोग करके वीडियो प्रदर्शित करता है या क्या यह आपको आउटपुट बफर प्रदान करता है? बाद में हार्डवेयर त्वरित डीकोडर्स –

0

ExoPlayer (github) पर नए एपीआई के बारे में अधिक जानकारी।

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

इसमें एक अच्छा demo app showing usage शामिल है।

0

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