2

我在 android 中使用紧贴 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是相对的,我想知道紧贴框架是否正在搜索

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

代替

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

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

我怎样才能正确地使用UPnP做到这一点?

4

1 回答 1

2

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

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

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

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

于 2012-09-12T19:24:46.600 回答