2011-01-02 9 views
9

मुझे यह निर्धारित करने की ज़रूरत है कि कोई मेडियाप्लेयर ओपनकोर मीडिया ढांचे का उपयोग कर रहा है, ताकि मैं अपनी स्ट्रीम के लिए खोज अक्षम कर सकूं। ओपनकोर ढांचा तलाशने के साथ चुपचाप विफल रहता प्रतीत होता है, जिसे मुझे लगता है कि उन्हें उत्पादन में अनुमति देने में कठिनाई हो रही है, लेकिन फिर भी ऐसा लगता है।Mediaplayer के लिए ओपनकोर या स्टेजफाइट फ्रेमवर्क निर्धारित करें?

मेरी इच्छा है कि यह उनके एसडीके संस्करण को निर्धारित करने के समान सरल हो, लेकिन डीपीआई फोन जिनके पास एपीआई 8 है, अभी भी ओपनकोर का उपयोग करने लगते हैं, इसलिए यह एक अच्छा विकल्प प्रतीत नहीं होता है। कोई विचार?

संपादित करें:

यीशु से प्रतिक्रिया के बाद, मैं इस कोड के साथ आया था। ऐसा लगता है कि अब तक मेरे परीक्षणों में अच्छा काम है। अगर किसी को भी नहीं लगता है कि यह धाराओं की मांग के लिए एक ध्वनि विधि है, मुझे पता है

if (Build.VERSION.SDK_INT < 8) //2.1 or earlier, opencore only, no stream seeking 
     mStreamSeekable = false; 
    else { // 2.2, check to see if stagefright enabled 
     mStreamSeekable = false; 
     try { 
       FileInputStream buildIs = new FileInputStream(new File("/system/build.prop")); 
       if (CloudUtils.inputStreamToString(buildIs).contains("media.stagefright.enable-player=true")) 
        mStreamSeekable = true; 
      } catch (IOException e) { //problem finding build file 
       e.printStackTrace(); 
      } 
     } 
    } 
+0

हैलो, क्लाउडयूल्ट क्लास कैसे है? –

+0

@AlexTran यह मदद करना चाहिए http://stackoverflow.com/questions/309424/read-convert-an-inputstream-to-a-string –

+0

वास्तव में क्षमा करें, मेरा मतलब यह नहीं है कि लिंक से मुझे क्या मिलेगा । –

उत्तर

6

यह विधि सैमसंग गैलेक्सी एस पर काम नहीं करती है, जो कहता है कि स्टेजफ़ाइट सक्षम है लेकिन कम से कम स्ट्रीमिंग के लिए इसका उपयोग नहीं करता है। एक और सुरक्षित जांच स्थानीय सॉकेट खोलना और मीडियाप्लेयर से कनेक्ट करना है और देखें कि यह उपयोगकर्ता-एजेंट के रूप में क्या रिपोर्ट करता है।

उदाहरण के लिए, मैं अपने सैमसंग गैलेक्सी एस और 2.2 एमुलेटर पर यही देखता हूं;

गैलक्सी एस: उपयोगकर्ता-एजेंट: कोर/6.506.4.1 OpenCORE/2.02 (लिनक्स, एंड्रॉयड 2,2)

एम्यूलेटर: उपयोगकर्ता-एजेंट: stagefright/1.0 (लिनक्स; एंड्रॉइड 2.2)

एक थ्रेड में, ऐसा कुछ करें;

volatile int socketPort; 

    ServerSocket serverSocket = new ServerSocket(0); 
    socketPort = serverSocket.getLocalPort(); 

    Socket socket = serverSocket.accept(); 

    InputStream is = socket.getInputStream(); 

    byte [] temp = new byte [2048];  
    int bsize = -1; 
    while(bsize <= 0) { 
     bsize = is.read(temp); 
    } 
    String res = new String(temp, 0, bsize); 

    if(res.indexOf("User-Agent: stagefright") >= 0) { 
     // Found stagefright 
    } 

    socket.close(); 
    serverSocket.close(); 

और इस तरह के किसी अन्य धागे में (ब्लॉकिंग स्वीकार() वापसी के ऊपर कॉल करता है);

MediaPlayer mp = new MediaPlayer(); 
    mp.setDataSource(String.format("http://127.0.0.1:%d/", socketPort)); 
    mp.prepare(); 
    mp.start(); 
+1

क्या आप इसके लिए कोड दिखा सकते हैं? –

+1

यह सभी फोन के लिए काम नहीं करता है उदाहरण के लिए एचटीसी फोन ** उपयोगकर्ता-एजेंट: एचटीसी स्ट्रीमिंग प्लेयर [ऑपरेटर-कोड]/1.0/एचटीसी_पीरामिड/2.3.3 ** जिसमें ** stagefright ** का उल्लेख नहीं है। – Samuel

1

कि जानकारी आप अपने डिवाइस की फ़ाइल /system/build.prop पढ़ सकते हैं प्राप्त करने के लिए करते हैं। इस फ़ाइल में media.stagefright.enable-player नामक एक पैरामीटर है। यदि वह पैरामीटर सत्य पर सेट किया गया है, तो stagefright सक्रिय है, अन्यथा आपका डिवाइस opencore का उपयोग कर रहा है।

+0

आशाजनक लग रहा है, लेकिन Log.i (TAG, "Stagefright सक्षम:" + System.getProperty ("media.stagefright.enable-player")); // किसी भी डिवाइस पर शून्य रिटर्न मैं परीक्षण करता हूं –

+0

यह सच है, क्षमा करें। फिर आपको build.prop फ़ाइल खोलनी होगी और पैरामीटर को पढ़ना होगा। –

1

आप पता लगाने के लिए सक्षम हो सकता है अगर stagefright के लिए

media.stagefright.enable-http=true 
बजाय

media.stagefright.enable-player=true 
2

खोज एंड्रॉयड 2.3.5, अब media.stagefright के साथ द्वारा स्ट्रीमिंग के लिए सक्षम है। सक्षम-प्लेयर प्रॉपर्टी /system/build.prop

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