2012-04-28 65 views
3

使用Java库Cling,我可以使用upnp在LAN上发现我的电视。电视通告以下的UPnP服务使用upnp/dlna识别电视

  • RenderingControl
  • 的AVTransport
  • 的ConnectionManager

它还说,它的类型是 “MediaRenderer” 和模型描述为 “三星电视DMR”。

据我所知,所有这些功能也可以由计算机提供。但在“真实”世界中,电视和电脑是两回事(尽管它们可能提供相同的服务)。

通过哪些upnp方法可以唯一地识别出我正在与“电视”通话?

+0

你可能不得不通过某些厂家/型号解析设备XML做到这一点。我很好奇为什么你需要这样做 - 如果电视和计算机提供相同的服务,就UPnP控制点而言,它们基本上是一样的。你为什么需要区分它们? – simonc 2012-04-28 18:32:14

+0

我想使用电视是否开启的信息,以使我家中的东西自动化(如开关灯),但如果仅打开一台电脑(不同的使用情况),则不应该这样做。如果可能的话,我想让它成为一种便携式解决方案,不仅适用于我的特定电视。 – Philipp 2012-04-29 10:26:49

回答

1

我唯一可以提出的“便携性”解决方案是根据设备的唯一ID(UUID)制作设备白名单。如果您打算实施监听某个特定设备外观的控制器,请获取该设备的UUID并使用该UUID进行配置。如果你的控制器会有UI,那么可以找到所有发现的设备并询问用户“这是一台电视机吗?”。我敢说,在UPnP中没有确定性的方式来表示特定的UPnP设备“是电视”。 UPnP根本不指定这样的设备类。您的服务观察是绝对正确的,您不仅可以从计算机获得相同的响应,还可以获得DVD播放器或智能闹钟的响应。

2

最好深入了解服务描述文件(SCPD)。

RenderingControl的状态变量中,电视通常有ContrastBrightness,但PC DLNA设备通常没有。

使用GetProtocolInfoConnectionManager服务,我们可以得到一个有用的媒体格式列表,它可以用来区分电视和其他音频设备。

http://upnp.org/specs/av/av4/

+0

好点。当我回到这个项目时,我会检查这对我手头上的电视来说是否是一个好的解决方案。 – Philipp 2013-08-26 07:30:50