Android 使用“粘住”从媒体服务器获取要播放的媒体的URL

Android 使用“粘住”从媒体服务器获取要播放的媒体的URL,android,upnp,Android,Upnp,我正在开发android上的GRANG upnp stack的示例upnpBrowser,我浏览merdia服务器的内容,我可以显示每个文件夹中的媒体列表,现在我想提取视频的URL在播放器上播放,但我被阻止了如何提取该URL UDN serverUdn = ((UpnpControlApplication)getApplicationContext()).server_udn; //Device server = ((UpnpControlApplication)getApplicationCo

我正在开发android上的GRANG upnp stack的示例upnpBrowser,我浏览merdia服务器的内容,我可以显示每个文件夹中的媒体列表,现在我想提取视频的URL在播放器上播放,但我被阻止了如何提取该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();
UDN serverUdn=((UpnpControlApplication)getApplicationContext()).server\u UDN;
//设备服务器=((UpnpControlApplication)getApplicationContext()).server;
设备服务器=upnpService.getRegistry().getDevice(serverUdn,true);
listAdapter.clear();
如果(服务器==null)
{
Toast.makeText(这是“pbm”,Toast.LENGTH_LONG).show();
}
其他的
{
if(server.findService(新的UDAServiceType(“ContentDirectory”))==null)
Toast.makeText(这是“pbm”,Toast.LENGTH_LONG).show();
upnpService.getControlPoint().execute(新浏览(server.findService(新UDAServiceType(“ContentDirectory”)),id,BrowseFlag.DIRECT_子项)
{
@凌驾
收到公共无效(ActionInvocation ActionInvocation,DIDLContent didl){
最终列表项=didl.getItems();
字符串st=didl.getItems().get(0.getFirstResource().getValue();

Cling Ressource类包含一个URI字段,获取它并重试。


我希望代码是清楚的。thx

我想您的
字符串st
没有给您提供URL。您作为
Browse()的参数提供的
id
是什么
action?该容器id中真的有媒体URL吗?每个容器都不需要直接容纳媒体!是的,它没有提供任何内容,但奇怪的是,如果我删除这一行:String st=didl.getItems().get(0.getFirstResource().getValue());代码执行并显示文件和媒体服务器,当我放置它时,什么也不显示!当您删除行
String st
时,显示“执行并显示文件”的代码。确保为
Browse()提供对象id
id
确实保存媒体项目。这是browseserver类,它显示媒体服务器中反映
res@importUri
-非常专业,与上载相关,而不是从服务器下载媒体,这正是OP所要求的。好吧,那么您真的在使用
Item.getFirstResource().getValue()
。应该可以。但在原始代码中,您正在迭代所有项。在新代码中,您尝试仅使用第一项
didl.getItems().get(0)
。并非所有项目都需要资源。它也可能是一个容器。我刚刚测试了第一个值,但当我尝试从所有项目中获取第一个项目时,这是相同的问题,因此我不知道问题出在哪里。当我尝试按我所说的提取值时,会出现更多问题​​在这些项目中,应用程序停止并没有显示任何视图,我不知道您是否理解我的问题。谢谢,恐怕我不再理解了。问题可能是您正在创建另一个RunnonMainThread,它可能正在做不正确的事情。我不太喜欢Android。我建议在您身上放置大量的
日志
-ingr代码并查看URL丢失的位置。您的代码大致是UPnP正确的,与您声称正常工作的原始
ServerContentItem
做了相同的事情。如果设备中没有可用的AVtransport服务,会发生什么情况?再次澄清,您是否在服务器上正确查找AVtransport?以及何时调用play()方法当前设备开始播放媒体,对吗?
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

                }

            });
        }
    }
}
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);
        }
    }