2012-10-22 103 views
1

我工作在Android设备上的UPnP保鲜栈的upnpBrowser例子玩,我浏览merdia服务器的内容,我可以每个文件夹中显示的媒体列表,现在我想提取视频的网址在播放器上播放,但我被阻止如何提取该网址!获得媒体的URL从媒体服务器用保鲜

UDN serverUdn = ((UpnpControlApplication)getApplicationContext()).server_udn; 
//Device server = ((UpnpControlApplication)getApplicationContext()).server; 
Device server = upnpService.getRegistry().getDevice(serverUdn, true); 
listAdapter.clear(); 
if(server == null) 
{ 
    Toast.makeText(this, "pbm", Toast.LENGTH_LONG).show(); 
} 
else 
{ 
    if(server.findService(new UDAServiceType("ContentDirectory")) == null) 
     Toast.makeText(this, "pbm", Toast.LENGTH_LONG).show(); 
    upnpService.getControlPoint().execute(new Browse(server.findService(new UDAServiceType("ContentDirectory")),id, BrowseFlag.DIRECT_CHILDREN) 
    { 
     @Override 
     public void received(ActionInvocation actionInvocation, DIDLContent didl) { 
      final List<Item> items = didl.getItems(); 
      String st=didl.getItems().get(0).getFirstResource().getValue(); 
+0

我想你'字符串st'是不是给你的网址。什么是你提供的'id'作为'Browse()'动作的参数?该容器ID是否真的有媒体网址?每个容器不需要直接保存媒体! –

+0

是的,它没有给任何东西,但奇怪的是,如果我删除此行:。 线St = didl.getItems()得到(0).getFirstResource()的getValue(); 代码执行并显示文件和媒体服务器,当我放置它时,什么也不显示! – user1735986

+0

当你删除你的行'String st'时,显示代码“执行并显示文件”。确保提供给“Browse()”的对象ID“id”确实保存媒体项目。 –

回答

-1

保鲜的ressource类包含一个URI场,得到它和尝试。
Res CLING Support 1.0.5 API

+0

这是'RES @ importUri'反射 - 非常专业和相关** **上传,不下载服务器从媒体,这是OP是什么要求。 –

1
public void browseServer(final String id) 
{ 

    if(((UpnpControlApplication)getApplicationContext()).server_udn == null) 
    { 
     new AlertDialog.Builder(this) 
     .setTitle("Bad") 
     .setMessage("pas de serveur sélectionné, allez à la section LAN et cliquez sur Parcourir pour sélectionner le serveur!") 
     .setPositiveButton("OK", new OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       // Some stuff to do when ok got clicked 
      } 
     }) 
     .setNegativeButton("Annuler", new OnClickListener() { 
      public void onClick(DialogInterface arg0, int arg1) { 
       // Some stuff to do when cancel got clicked 
      } 
     }) 
     .show(); 
    } 
    else 
    { 
     UDN serverUdn = ((UpnpControlApplication)getApplicationContext()).server_udn; 
     //Device server = ((UpnpControlApplication)getApplicationContext()).server; 
     Device server = upnpService.getRegistry().getDevice(serverUdn, true); 
     listAdapter.clear(); 
     if(server == null) 
     { 
      Toast.makeText(this, "désolé", Toast.LENGTH_LONG).show(); 
     } 
     else 
     { 
      if(server.findService(new UDAServiceType("ContentDirectory")) == null) 
       Toast.makeText(this, "pbm", Toast.LENGTH_LONG).show(); 
      upnpService.getControlPoint().execute(new Browse(server.findService(new UDAServiceType("ContentDirectory")),id, BrowseFlag.DIRECT_CHILDREN) 
      { 

       @Override 
       public void received(ActionInvocation actionInvocation, DIDLContent didl) { 

        final List<Item> items = didl.getItems(); 

        //String st = items.getImportUri(); 
        //String st=didl.getItems().get(0).getFirstResource().getValue(); 
        //Log.d("URL IS",st); 
        //Item item = didl.getItems().get(0); 
        //Item item = didl.getItems().get(0); 
        //String url = item.getFirstResource().getValue(); 

        //System.out.println(" this is the url of item" +item.getTitle()); 
        // System.out.println(" this is the url of the media"); 

        //System.out.println(url); 

        /*final DIDLContent b = didl; 
        String str1 = "bieda"; 
        try 
        { 
         str1 = parser.generate(b); 
        } 
        catch(Exception e) 
        { 
         str1 = "smuta"; 
        } 
        final String str=str1; 
        runOnUiThread(new Runnable() 
        { 
         public void run() 
         { 

          adb.setTitle("XML").setMessage(str).setPositiveButton("OK", new OnClickListener() { 
           public void onClick(DialogInterface arg0, int arg1) { 
            // Some stuff to do when ok got clicked 
           } 
          }).show(); 

         } 
        });*/ 

        runOnUiThread(new Runnable(){ 
         public void run() 
         { 
          listAdapter.insert(new ServerContentContainer(s.peek()), 0); 
         } 
        }); 

        final List<Container> containers = didl.getContainers(); 

        for(final Container c: containers) 
        { 

         runOnUiThread(new Runnable(){ 
          public void run() 
          { 
           int pos = listAdapter.getPosition(new ServerContentContainer(c)); 
           if(pos >= 0) 
           { 
            listAdapter.remove(new ServerContentContainer(c)); 
            listAdapter.insert(new ServerContentContainer(c), pos); 
            System.out.println("eulooooooooo"); 
           } 
           else 
            listAdapter.add(new ServerContentContainer(c)); 
          } 
         }); 
        } 
        for(final Item i: items) 
        { 
         runOnUiThread(new Runnable(){ 
          public void run() 
          { 
           int pos = listAdapter.getPosition(new ServerContentItem(i)); 
           if(pos >= 0) 
           { 
            listAdapter.remove(new ServerContentItem(i)); 
            listAdapter.insert(new ServerContentItem(i), pos); 
           } 
           else 
            listAdapter.add(new ServerContentItem(i)); 
          } 
         }); 

        } 

       } 

       @Override 
       public void updateStatus(Status arg0) { 
        // TODO Auto-generated method stub 

       } 

       @Override 
       public void failure(ActionInvocation arg0, UpnpResponse arg1, 
         String arg2) { 
        // TODO Auto-generated method stub 

       } 

      }); 
     } 
    } 
} 

,这是类ServerContentItem:

protected class ServerContentItem extends ServerContent 
    { 
     private Item i; 

     public Item getItem() 
     { 
      return i; 
     } 

     ServerContentItem(Item i) 
     { 
      this.i = i; 
     } 

     public void select() 
     { 
      if(((UpnpControlApplication)getApplicationContext()).renderer_udn != null) 
      { 
       Device renderer = upnpService.getRegistry().getDevice(((UpnpControlApplication)getApplicationContext()).renderer_udn, false); 
       final Service service = renderer.findService(new UDAServiceType("AVTransport")); 
       upnpService.getControlPoint().execute(new SetAVTransportURI(service, i.getFirstResource().getValue()){ 
        @Override 
        public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg) { 
         adb.setTitle("Bad").setMessage("No!") 
         .setPositiveButton("OK",new OnClickListener() { 
          public void onClick(DialogInterface arg0, int arg1) { 
           // Some stuff to do when ok got clicked 
          } 
         }).show(); 
        } 

        @Override 
        public void success(ActionInvocation invocation) 
        { 
         upnpService.getControlPoint().execute(new Play(service){ 
          @Override 
          public void failure(ActionInvocation invocation, UpnpResponse operation, String defaultMsg) { 
           adb.setTitle("Bad").setMessage("Non réussi!") 
           .setPositiveButton("OK",new OnClickListener() { 
            public void onClick(DialogInterface arg0, int arg1) { 
             // Some stuff to do when ok got clicked 
            } 
           }).show(); 
          } 
         }); 
        } 
       }); 

      } 
      else 
      { 
       adb.setTitle("Bad") 
       .setMessage("selection ! need a media player ") 
       .setPositiveButton("OK",new OnClickListener() { 
        public void onClick(DialogInterface arg0, int arg1) { 
         // Some stuff to do when ok got clicked   
         Log.e("bla","blablaa"); 


         Intent intent = new Intent().setClass(BrowseServerActivity.this, Newactivity.class); 
         startActivity(intent); 

        } 
       }).show(); 
      } 
     } 

     @Override 
     public String toString() 
     { 
      return i.getTitle(); 
     } 

     @Override 
     public boolean equals(Object o) 
     { 
      if(this == o) 
       return true; 
      if(getClass() != o.getClass()) 
       return false; 
      return i.equals(((ServerContentItem)o).i); 
     } 
    } 

我希望是这样的代码是明确的。 THX

+0

显示'ServerContentItem'的代码 –

+0

这是代码! – user1735986

+0

好,所以你真的使用'Item.getFirstResource()。getValue()'。这应该工作。但在原始代码中,您正在迭代**所有**项目。在你的新代码中,你试图只使用** first **项目'didl.getItems()。get(0)'。并非所有项目都需要有资源。它也可能是一个容器。 –