UPnP是如何工作的?

3
我正在做一个应用程序,可以在 UPnP 启用的电视机上呈现网页。我已经使用 Cling UPnP 实现了 UPnP。现在我不确定如何继续下去。电视机和设备之间的连接是通过套接字连接吗?有人有关于该主题的样例或教程帮助我实现 UPnP 流吗?
我已经在谷歌上搜索过了,但主要都指向谷歌播放商店中现有的应用程序。谢谢。

你用Cling实现了什么?是的,UPnP可以通过套接字连接工作。在谷歌上搜索时,你试过“UPnP规范”和第一个链接吗? - Pavel Zdenek
使用cling,我能够发现网络上可用的UPnP设备。对于我的电视,我可以看到有3个服务可用,并打开相应的服务描述符xml文件。但是我不知道如何使用它们。我该如何将我的数据发送到设备? - Zach
1个回答

5
好的,所以服务描述符xml(SCPD)包含了<action>列表和它们的参数,可以是in(发给电视机)或out(作为电视响应动作)。您需要“调用”该操作,这意味着Cling会将其序列化为SOAP RPC,并将其作为HTTP请求发送到设备。在响应中,您将像使用普通HTTP一样获得调用的总结果,例如200表示OK,500表示坏请求等。每个代码在特定操作调用上下文中都有特定的解释。响应还将保留SCPD中指定的out参数。
但是当使用像Cling这样的抽象库时,所有这些都不太重要。它会为您完成所有工作。免责声明:我不熟悉Cling,只是对其他UPnP库足够了解,知道在哪里查找信息。
作为电视机,您提到的3个服务无疑将是AVTransportConnectionManagerRenderingControl。因此,为了提供一个简单的示例,可以在电视上观察到实际效果,请调用RenderingControl.SetVolume。您需要的方法是org.teleal.cling.support.renderingcontrol.callback.SetVolume。我无法帮助您了解如何获取Service参数,但您应该能够弄清楚。
我不是说您不需要知道UPnP的内部工作原理。在UPnP规范包中查找至少要阅读DeviceArchitecture pdf文档。而且您肯定需要规范来理解更复杂的服务,例如AVTransport。提示:不要关心InstanceID和ConnectionID。除非连接到非常高级的渲染器(现今电视并不是这样),否则所有内容都为0。

谢谢您的回复。它很有启发性,对我帮助很大。我已经编辑了问题并添加了更多内容。您能否请看一下? - Zach
请勿在问题中添加新主题。关闭此问题并创建一个新问题。现在不是“UPnP如何工作”的问题,您正在询问有关如何调用服务操作的特定问题。在新帖子中,请勿发布设备描述,而是要访问的服务描述。 - Pavel Zdenek
创建了一个新的帖子。谢谢。http://stackoverflow.com/questions/12392087/cling-upnp-not-returning-actions - Zach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接