2012-09-12 43 views
2

我在android中使用cling UPnP框架来连接到启用UPnP的设备。我成功地创建了设备并浏览了网络中的可用设备。但是对于网络中的三星电视来说,这个框架不会返回任何行动。 这里我加入了服务细节为RenderingControlCling UPnP不返回操作

<service> 
<serviceType>urn:schemas-upnp-org:service:RenderingControl:1</serviceType> 
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId> 
<controlURL>/upnp/control/RenderingControl1</controlURL> 
<eventSubURL>/upnp/event/RenderingControl1</eventSubURL> 
<SCPDURL>RenderingControl1.xml</SCPDURL> 
</service> 

这是获取服务描述符XML文件

> http://<ip address>:52235/dmr/SamsungMRDesc.xml 

的URL但SCPDURL是相对的,我想知道的保鲜框架是否是搜索

http://<ip address>:52235/RenderingControl1.xml

代替

http://<ip address>:52235/dmr/RenderingControl1.xml

是它之所以被显示在保鲜的UPnP服务没有动作还是我做一些非常愚蠢的?

我该如何正确地做到这一点cling UPnP

回答

2

只是事先澄清:该URL *SamsungMRDesc.xml设备描述符,不是服务描述符为你写的吧?

每个UPnP规范的<SCPDURL>是“相对于设备描述所在的URL”。所以是的,正确的绝对SCPDURL是第二个。但是如果在Cling中真的有这么严重的错误,我会非常惊讶。所以提供一些理论:

  1. 你是什么意思的“没有行动显示在Cling UPnP”?这是一些现有的示例应用程序或您的代码?保持本身不提供任何GUI。该代码中可能存在错误?
  2. 您是否完全确定设备描述符 URL(SamsungMRDesc)?它是否可以手动访问,即通过复制&将URL粘贴到Web浏览器中?
  3. 如果您复制&将SCPDURL粘贴到网络浏览器中,您会看到什么? <actionList>下有一些<action>节点吗?
  4. 您是否试图用Intel Developer Tools从DeviceSpy查询您的Samsung电视?除了Cling之外,您还可以看到其他UPnP堆栈看到的是什么。此外,您可以右键单击设备节点以及服务节点,然后查看DeviceSpy在何处查找描述。
  5. 作为最后一个实例,您可以嗅探Wireshark来回发送的内容。首先将Wireshark IP筛选器设置为三星电视的地址。

理论4和理论5显然需要一台PC连接到与电视(和您的Android)相同的网络。

+0

感谢您的回复。为了您的观点1:我正在使用通过粘贴提供的示例代码来发现网络中的所有UPnP服务。当我调试时,如果我在调试器控制台中移动到已识别的Device对象内,则不会显示任何操作。它显示一个空的列表。 – Zach

+0

第2点:是的,我可以在浏览器中看到设备描述符URL。对于SCPDURL,这不起作用http:// :52235/RenderingControl1.xml,但它可以在浏览器http:// :52235/dmr/RenderingControl1.xml中工作,我可以看到actionList和其中的操作。 – Zach

+0

我刚发现Cling有一个名为[Workbench]的独立应用程序(http://4thline.org/projects/cling/workbench/),它与DeviceSpy类似。所以用这个Workbench查询你的三星电视,并看看服务和行动是否存在。如果是这样,你的代码有问题,因为Cling显然是正确的。 –