2011-02-03 7 views
7

मैं यूपीएनपी उपकरणों के लिए अपने नेटवर्क को स्कैन करने के लिए भयानक Cling लाइब्रेरी का उपयोग कर रहा हूं। मेरा लक्ष्य एक छोटे से डीएलएनए लाइब्रेरी ब्राउज़र को फेंकना है ताकि मैं तकनीक सीख सकूं। मैं अब तक सक्षम हूं 1. नेटवर्क को स्कैन करें और यूपीएनपी डिवाइस कनेक्ट करें, 2. प्रत्येक रिमोट डिवाइस को स्कैन करें और यह निर्धारित करें कि इसमें एक डीएलएनए सेवा चल रही है, और 3. ज्ञात नोड्स के तत्काल बच्चों को ब्राउज़ करें। संक्षेप में, यह मेरा विधि है कि इस सब के चलाने के लिए सक्षम है:क्लिंग में सभी DLNA रूट स्टोरेज निर्देशिकाएं प्राप्त करें?

public void remoteDeviceAdded(Registry registry, RemoteDevice device) { 
     logger.debug("remote device added: {}[{}]", device.getDetails().getFriendlyName(), 
      device.getType().getType()); 

     if (device.getType().getType().equals("MediaServer")) {   
      for (RemoteService service : device.getServices()) { 
       if (service.getServiceType().getType().equals("ContentDirectory")) { 
//    '1' is Music, '2' is Video, '3' is Pictures 
        this.service.getControlPoint().execute(new Browse(service, "3", BrowseFlag.DIRECT_CHILDREN) { 
         @Override public void received(ActionInvocation arg0, 
           DIDLContent didl) { 
          logger.debug("found {} items.", didl.getItems().size()); 
         } 

         @Override public void updateStatus(Status arg0) { }; 

         @Override public void failure(ActionInvocation arg0, UpnpResponse arg1, String arg2) { }; 
        }); 
       } 
      } 
     } 
    } 

मुझे पता है, यह शायद एक भयानक गंदगी की तरह लग रहा है और यह है, लेकिन यह काम करता है :) जब मैं एक डिबगर में छोड़, मैं देख सकता है कि मुझे क्या मिला है। हालांकि, गाइड here से निर्देशों के विपरीत, मुझे कोई भी वास्तविक मीडिया आइटम वापस नहीं मिलता है, केवल ब्राउज़ परिणाम में स्टोरेज निर्देशिकाएं।

Music 
    All Music 
    Artists 
     Fleetwood Mac 
     ... 
    Albums 
    ... 
Video 
    All Video 
    Folders 
... 

मेरा प्रश्न यह है, क्या इन फ़ोल्डरों ब्राउज़ करें और पदानुक्रम के माध्यम से चढ़ाई करने के लिए सबसे आसान तरीका है: के रूप में DLNA तो जैसे एक पदानुक्रम में चीजों का आयोजन करता है इस तरह की समझ में आता है? मैं पहले से ही एक बिंदु पर हूं जहां मैं यूपीएनपी डीएलएनए सर्वर से जुड़ा हूं जिसे मैं ढूंढ रहा था, अब मैं इन रूट स्टोरेज निर्देशिकाओं को कैसे प्राप्त करूं? ऊपर दिए गए ब्राउज़ कमांड में, मुझे वास्तव में "संगीत" या "वीडियो" या पसंद प्राप्त करने के लिए कुछ अनुक्रमणिका का एक स्ट्रिंग प्रस्तुति पास करना होगा। मैं स्टोरेज निर्देशिका के शीर्ष स्तर को कैसे प्राप्त करूं, फिर मैं उन निर्देशिकाओं में से प्रत्येक को कैसे ब्राउज़ कर सकता हूं? मेरा लक्ष्य कम से कम एक साधारण ब्राउज़र बनाना है।

उत्तर

8

ठीक है, यह पता चला है कि मुझे क्लिंग मेलिंग सूची में कुछ मदद के परिणामस्वरूप मेरे अपने प्रश्न का उत्तर देना है।

जाहिर है, डीएलएनए के सभी तत्वों में एक अद्वितीय आईडी संख्या है जिसके द्वारा आप उन्हें क्लिंग में संदर्भित कर सकते हैं। / लाने के लिए, किसी को नोड "0" का अनुरोध करना होगा। /../ (शीर्ष से एक कदम ऊपर !?) तक पहुंचने के लिए, आप नोड "-1" का अनुरोध कर सकते हैं। चूंकि डीएलएनए स्पेक कोई भी नहीं है इस मामले पर बेकार है, यह केवल सम्मेलन से है। तो, नोड "0" के लिए अनुरोध करना वास्तव में आपको सबसे ज्यादा नोड प्राप्त करना चाहिए, लेकिन कौन जानता है? यह आपको एक लाल हेरिंग या एक कठोर मूस या दुनिया के अंत में मिल सकता है। जोखिम क्या हम रहते हैं, है ना?

किसी भी मामले में, DLNA "फाइल सिस्टम" काम करता है के इस तरह तरह:

/[0] 
    Browse Folders/[1] 
    Music/[2] 
     All Music/[5] 
      Heart Is Hard To Find[6] 
      ... 
     ... 
    Pictures/[3] 
    Video/[4] 

इस प्रकार, यदि मैं "सभी संगीत" जो नोड है '5' मेरे रास्ते ब्राउज़ क्रमानुसार करना चाहता था, मैं डी पहले अनुरोध '0', बच्चों के कंटेनरों को प्रदर्शित करें, फिर उपयोगकर्ता इंटरैक्शन पर नोड '2' में ब्राउज़ करें, फिर उपयोगकर्ता इंटरैक्शन पर नोड '5' में ब्राउज़ करें, फिर नोड '6' चुनें जो वास्तविक फ़ाइल है जिसे मैं ढूंढ रहा हूं , और उस पर कुछ कार्रवाई करें।

डीएलएनए काम करने के तरीके को समझना इस सब को सुविधाजनक बनाने में महत्वपूर्ण है। HTTP पर सभी महत्वपूर्ण चीजें प्रदान की जाती हैं, यूपीएनपी पर सहकर्मियों की पहचान की सुविधा मिलती है। तो सबसे पहले, अपने नेटवर्क पर सभी यूपीएनपी क्लाइंट खोजें, फिर सभी क्लाइंट्स के माध्यम से सॉर्ट करें और यह निर्धारित करें कि कौन से लोग डीएलएनए चला रहे हैं, फिर ब्राउज़िंग प्राप्त करें। जो भी आप खोज रहे हैं उसे ढूंढें, फिर इसे चलाने के लिए इसे HTTP पर स्ट्रीम करें। जीत के लिए सिद्धांत।

+1

आइटम प्राप्त करने के बाद आप फ़ाइल सूची कैसे प्राप्त कर पाए? मुझे कंटेनर मिला है, लेकिन getItems() हमेशा खाली है। – Nifhel

+0

didl.getContainers()। (0) .getItems() हमेशा खाली रहता है – Nifhel