2013-04-21 6 views
6

क्या libstagefright.soH.264 स्ट्रीम को JNI से एंड्रॉइड 2.3 या उससे ऊपर की परत से सीधे डीकोड करने का कोई तरीका है?एंड्रॉइड में जेएनआईलेयर से H.264 स्ट्रीम को डीकोड करने के लिए सीधे स्टेजफ़ाइट.एसओ एक्सेस करें

उत्तर

11

अपने उद्देश्य एक प्राथमिक H.264 धारा डिकोड करने के लिए है, तो अपने कोड सुनिश्चित करना है कि धारा निकाला जाता है, codec-specific-data कोडेक जो मुख्य रूप से SPS और PPS डेटा और फ्रेम डेटा समय-टिकटों के साथ है करने के लिए प्रदान की जाती है होगा कोडेक को प्रदान किया जाता है। सभी Android संस्करणों में, सबसे आम इंटरफ़ेस OMXCodec होगा जो अंतर्निहित OMX घटक पर एक अमूर्त है।

जिंजरब्रेड (Android 2.3) और आईसीएस (एंड्रॉयड 4.0.0) में, यदि आप एक विकोडक बनाना चाहेंगे, सबसे अच्छा तरीका एक MediaSource इंटरफ़ेस यानी अपने आवरण कोड के माध्यम से एक OMXCodec घटक और अपने कोड सार बनाने के लिए किया जाएगा MediaSource और OMXCodecके रूप में मॉडलिंग किया गया है इस स्रोत से पढ़ता है और डिकोडिंग करता है।

Android 2.3 वीडियो डिकोडर निर्माण के लिए लिंक: http://androidxref.com/2.3.6/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1094

एंड्रॉयड के लिए लिंक 4.0.0 वीडियो डिकोडर निर्माण: http://androidxref.com/4.0.4/xref/frameworks/base/media/libstagefright/AwesomePlayer.cpp#1474

मुख्य चुनौतियों होगा निम्नलिखित:

  1. मॉडल इनपुट MediaSource के रूप में।

  2. कोडेक से बफर पढ़ने और इसे संभालने के लिए एक रैपर कोड पढ़ें और उसे कोडेक पर वापस छोड़ दें।

सरलीकरण के लिए, आप http://androidxref.com/4.0.4/xref/frameworks/base/cmds/stagefright/stagefright.cpp#233

हालांकि के रूप stagefright कमांड लाइन निष्पादन योग्य कोड दिखाई दे सकता है, यदि आपके प्रोग्राम JellyBean पर (एंड्रॉयड 4.1.x, 4.2.x) के बाद आधारित है, तो इन थोड़ा हैं अधिक सरल अपने जेएनआई कोड से, आप MediaCodec घटक बना सकते हैं और डीकोडिंग के लिए इसे नियोजित कर सकते हैं। अपने प्रोग्राम में इसे एकीकृत करने के लिए, SimplePlayer कार्यान्वयन http://androidxref.com/4.2.2_r1/xref/frameworks/av/cmds/stagefright/SimplePlayer.cpp#316

+0

मैंने एंड्रॉइड पर libstagefright हार्डवेयर डिकोड वीडियो का उपयोग किया, मुख्य अनुकरण AwesomePlayer.cpp, OMXCodec का आह्वान करें, यह एंड्रॉइड 4.0 पर ठीक है, लेकिन एंड्रॉइड 4.1 पर, यह काली स्क्रीन है, क्या आप कुछ शुभकामनाएं हैं? – crossle

+0

@ एंड्रॉइड 4.1 में क्रॉसलॉन्ग i.e. 'जेलीबीन' डिस्प्ले पाइपलाइन में कुछ महत्वपूर्ण सुधार हुए। क्या आप आगे के विश्लेषण के लिए कुछ लॉग साझा कर सकते हैं? मैं 'भूतलटेक्चर', 'एचडब्ल्यू कॉम्पोज़र' और 'लेयर' मॉड्यूल से लॉगिंग की अनुशंसा करता हूं। एक तरफ नोट: क्या आपकी 'परत' किसी कारण से सुरक्षित के रूप में चिह्नित है? – Ganesh

+0

धन्यवाद आपका उत्तर। मैंने इस समस्या का समाधान किया है, क्योंकि एनीटिवविंडो समस्या। net_window_set_scaling_mode की कमी (mNativeWindow.get(), mVideoScalingMode); – crossle

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