Android 使用“粘住”从媒体服务器获取要播放的媒体的URL
我正在开发android上的GRANG upnp stack的示例upnpBrowser,我浏览merdia服务器的内容,我可以显示每个文件夹中的媒体列表,现在我想提取视频的URL在播放器上播放,但我被阻止了如何提取该URLAndroid 使用“粘住”从媒体服务器获取要播放的媒体的URL,android,upnp,Android,Upnp,我正在开发android上的GRANG upnp stack的示例upnpBrowser,我浏览merdia服务器的内容,我可以显示每个文件夹中的媒体列表,现在我想提取视频的URL在播放器上播放,但我被阻止了如何提取该URL UDN serverUdn = ((UpnpControlApplication)getApplicationContext()).server_udn; //Device server = ((UpnpControlApplication)getApplicationCo
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()提供对象idid
)
确实保存媒体项目。这是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);
}
}