2013-02-01 13 views
13

मेरा ऐप सर्वर से वीडियो स्ट्रीम करने के लिए एचएलएस का उपयोग करता है, लेकिन जब मैं सर्वर से एचएलएस स्ट्रीम का अनुरोध करता हूं तो मुझे डिवाइस को अधिकतम वीडियो बिटरेट पास करने की आवश्यकता होती है। Android API guides में यह कहता है कि "डिवाइस की उपलब्ध वीडियो रिकॉर्डिंग प्रोफाइल का उपयोग मीडिया प्लेबैक क्षमताओं के लिए प्रॉक्सी के रूप में किया जा सकता है," लेकिन जब मैं डिवाइस बैक-फेस कैमरे के लिए वीडियो बिट्रेट को पुनर्प्राप्त करने का प्रयास करता हूं तो यह हमेशा 12 एमबी/एस के रूप में वापस आता है डिवाइस (गैलेक्सी नेक्सस, गैलेक्सी टैब प्लस 7 ", गैलेक्सी टैब 8.9), इस तथ्य के बावजूद कि उनके पास 3 अलग-अलग जीपीयू हैं (पावरवीआर एसजीएक्स 540, माली -400 एमपी, टेग्रा 250 टी 20)। मेरा कोड है, क्या मैं कुछ गलत कर रहा हूं?एंड्रॉइड डिवाइस के लिए CamcorderProfile.videoBitRate कैसे प्राप्त करें?

CamcorderProfile camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
targetVideoBitRate = camcorderProfile.videoBitRate; 

अगर मैं Galaxy Tab Plus पर यह प्रयास करें:

boolean hasProfile = CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH); 

यह सच है देता है, इस तथ्य के बावजूद है कि QUALITY_HIGH 1080p रिकॉर्डिंग के लिए है और चश्मे का कहना है कि यह केवल 720p पर रिकॉर्ड कर सकता है।

+6

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

उत्तर

7

ऐसा लगता है कि मुझे अपने प्रश्न का उत्तर मिल गया है।

मैंने documentation को काफी करीब नहीं पढ़ा, QUALITY_HIGH 1080p के बराबर नहीं है, यह डिवाइस का समर्थन करने वाली उच्चतम गुणवत्ता वाली प्रोफ़ाइल को निर्दिष्ट करने का एक तरीका है। इसलिए, परिभाषा के अनुसार, CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH) हमेशा सत्य है। मैं कुछ इस तरह लिखा जाना चाहिए था:

public enum mVideoQuality { 
    FullHD, HD, SD 
} 
mVideoQuality mMaxVideoQuality; 
int mTargetVideoBitRate; 

private void initVideoQuality { 
    if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_1080P)) { 
     mMaxVideoQuality = mVideoQuality.FullHD; 
    } else if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_720P)) { 
     mMaxVideoQuality = mVideoQuality.HD; 
    } else { 
     mMaxVideoQuality = mVideoQuality.SD; 
    } 
    CamcorderProfile cProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
    mTargetVideoBitRate = cProfile.videoBitRate; 
} 

मेरी उपकरणों में से अधिकांश अभी भी 1080p एन्कोडिंग, जो मैं संदेह की दृष्टि से कर रहा हूँ के लिए समर्थन रिपोर्ट कर रहे हैं, हालांकि मैं एक सोनी Experia टिपो (मेरे कम अंत परीक्षण डिवाइस पर यह कोड भाग गया) और 720pb/s के वीडियोबिट्रेट के साथ 480p की अधिकतम एन्कोड गुणवत्ता की सूचना दी।

जैसा कि मैंने कहा, मुझे यकीन नहीं है कि प्रत्येक डिवाइस पर भरोसा किया जा सकता है, लेकिन मैंने 720 केबी/एस से 17 एमबी/एस तक वीडियो बिटरेट्स और 480p - 1080p से प्रोफाइल गुणों को देखा है। उम्मीद है कि अन्य लोगों को यह जानकारी उपयोगी होगी।

+0

पर ध्यान नहीं देना चाहते हैं अगर आपके पास जवाब देने में सुझाव हैं तो कृपया एक टिप्पणी छोड़ दें। –

+0

पूर्ण प्रकटीकरण: adogden और मैं एक ही टीम पर काम करते हैं। मैंने इस कष्टप्रद समस्या को दूर करने में हमारी सहायता के लिए इस प्रश्न पर एक बक्षीस डाला। इसने शायद एक और नज़र डालने और इस सहायक उत्तर को लिखने के लिए प्रेरित किया। उन्होंने बक्षीस अर्जित किया, और मैं इसे प्रतिनिधि को स्थानांतरित करने के इरादे के बिना उसे दे रहा हूं। –

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