2013-10-02 10 views
6

कैसे एक कस्टम रिसीवर "रैंप" नाम स्थान का उपयोग कर सकते हैं या कैसे मैं एक कस्टम रैंप प्रोटोकॉल के लिए (आईओएस में Android या GCKMediaProtocolMessageStream में MediaProtocolMessageStream) के बिना फिर से लिखने के समर्थन नाम स्थान का उपयोग करने के नमूना एप्लिकेशन को संशोधित कर सकते हैं?कैसे एक कस्टम रिसीवर "रैंप" नाम स्थान का उपयोग कर सकते या मैं फिर से लिख रैंप के लिए समर्थन के बिना एक कस्टम नाम स्थान का उपयोग करने के नमूना एप्लिकेशन को संशोधित कर सकते हैं?

मैं या तो एंड्रॉइड या आईओएस क्रोमकास्ट नमूना ऐप्स को कस्टम रिसीवर के साथ dash.js के आधार पर संवाद करने में असमर्थ रहा हूं (जावास्क्रिप्ट के माध्यम से एमपीईजी DASH के प्लेबैक के लिए संदर्भ क्लाइंट कार्यान्वयन - https://github.com/Dash-Industry-Forum/dash.js)। यह कारण hardcoded जा रहा है (अंतिम स्थिरांक) Android/iOS Chromecast SDKs पर "रैंप" के नाम स्थान के लिए प्रतीत होता है और dash.js रिसीवर किसी कारण से "रैंप" के नाम स्थान का उपयोग करने में असमर्थ रहा (http://www.digitalprimates.net/author/tapper/2013/08/27/chromecast_dash/ प्रति)

मैं जब नाम स्थान dash.js का उपयोग करके Chrome में एक जावास्क्रिप्ट प्रेषक से ठीक एमपीईजी डैश कास्ट करने के लिए कर रहा हूँ डिफ़ॉल्ट रूप से उपयोग करता है। जब Android या iOS के माध्यम से अपने कस्टम रिसीवर के साथ बातचीत करने का प्रयास, Chromecast डिवाइस रिसीवर पेज ठीक से लोड करता है, लेकिन कभी लोड मीडिया URL वाले आदेश मिल जाता है। यह तब भी होता है जब कस्टम रिसीवर "रैंप" (मीडिया प्लेबैक के लिए डिफ़ॉल्ट) के नामस्थान का उपयोग करने के लिए सेट किया जाता है। इसके अतिरिक्त, मेरा कस्टम रिसीवर क्रोम में काम करना बंद कर देता है जब नामस्थान "रैंप" पर सेट होता है।

+0

आप 'रैंप' नाम स्थान का उपयोग नहीं करने के लिए एमपीईजी डैश कोड को संशोधित करना चाहते हो सकता है। –

उत्तर

4

यह दुर्भाग्यपूर्ण है कि डैश.जेएस रिसीवर आपको रैमपी नेमस्पेस का उपयोग नहीं करने देगा, लेकिन उनका वर्तमान कार्यान्वयन रैमपी बिल्कुल सही नहीं है (आपको रिसीवर के अंत में कुछ चीजें बदलनी होंगी) । रैमपी पर दस्तावेज़ीकरण बहुत दुर्लभ है और यह निराशाजनक है कि Google ने आईओएस और एंड्रॉइड के लिए अपने क्रोमकास्ट पुस्तकालयों के लिए स्रोत जारी नहीं किया है। हालांकि, मैं एंड्रॉयड पुस्तकालय विवरण में से कुछ सीखने के लिए जावा Decompiler (http://jd.benow.ca/) का उपयोग कर decompiled। आप ब्राउज़र में अपने श्वेत सूची में Chromecast डिवाइस को लाने और रैंप किस प्रकार संदेशों यह भेजने और प्राप्त करने को देखने के लिए वेब सॉकेट देख सकते हैं।

हालांकि, सब कुछ आप MediaProtocolMessageStream में संशोधित करना चाहते हैं जिसका अर्थ है अपने इस के लिए एक आदर्श रैंप कार्यान्वयन सिर्फ अपने समझ के बाहर है अंतिम है। आप मार्गदर्शन के रूप में decompiled कोड का उपयोग कर अपनी खुद की MessageStream लिख सकता है, लेकिन मैं MediaProtocolMessageStream में नाम स्थान बदलने के लिए मजबूर करने की हैकिंग प्रतिबिंब का उपयोग करने के लिए चुना है।

public class CustomMediaProtocolMessageStream extends MediaProtocolMessageStream { 

    private static final String NAMESPACE = "org.dashif.dashjs"; 

    public CustomMediaProtocolMessageStream() { 
     super(); 
     // Hack Google's hardcoded namespace which doesn't work with the DASH receiver. 
     try { 
      // This is the field where MessageStream stores the namespace. If you decompile the jar you can see it's named 'b'. 
      Field field = MessageStream.class.getDeclaredField("b"); 
      field.setAccessible(true); 
      field.set(this, NAMESPACE); 
     } catch (Exception e) { 
      Log.e(TAG, "problem changing namespace:" + e.getMessage()); 
     } 
    } 
} 
+0

बहुत बहुत धन्यवाद! आपने अभी मुझे काम के घंटे बचाए हैं ... मुझे विश्वास नहीं है कि Google नामस्थान को हार्डकोड करेगा – Darussian

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

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