紧紧抓住UPnP不返回动作

时间:2012-09-12 15:55:07

标签: java android upnp

我在android中使用cling UPnP框架连接到启用UPnP的设备。我成功地创建了一个设备并浏览了网络中的可用设备。但对于网络中的三星电视而言,框架并没有回归任何行动。 这里我要添加RenderingControl的服务细节

<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文件的URL

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

但SCPDURL是相对的,我想知道cling框架是否正在搜索

  

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

而不是

  

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

是不是因为UPnP中的服务没有显示任何操作的原因,还是我做了一些非常愚蠢的事情?

如何使用cling UPnP正确执行此操作?

1 个答案:

答案 0 :(得分:2)

事先澄清一下:网址*SamsungMRDesc.xml设备描述符,而不是你写的服务描述符,对吗?

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

  1. “Cling UPnP中没有显示任何操作”是什么意思?这是一些现有的示例应用程序还是您的代码? Cling本身不提供任何GUI。该代码可能有错误吗?
  2. 您是否完全确定设备描述符 URL(SamsungMRDesc)?是否可以手动访问,即只需将URL复制并粘贴到Web浏览器中即可?
  3. 如果您将SCPDURL复制并粘贴到网络浏览器中,您会看到什么? <action>下是否有<actionList>个节点?
  4. 您是否曾尝试使用Intel Developer Tools的DeviceSpy查询Samsung TV?除了Cling之外,您还可以看到其他UPnP堆栈看到的内容。此外,您可以右键单击“设备”节点和“服务”节点,然后查看DeviceSpy查找说明的位置。
  5. 作为最后一个例子,您可以使用Wireshark来嗅探发送的内容。首先将Wireshark IP过滤器设置为Samsung TV的地址。
  6. 理论4和5显然需要将PC连接到与电视(和您的Android)相同的网络。