DLNA渲染器抛出COMException(0x80040501)

时间:2013-10-06 09:08:13

标签: c# winforms upnp mediacontroller dlna

我正在尝试设置DLNA控制器来控制iPush Renderer deviceiPush Renderer device正变得非常受欢迎,因为许多iphone DLNA控制器甚至原生Airplay与它完美配合。它支持几乎所有视频文件格式。我的DLNA控制器适用于我迄今为止测试过的所有设备(WDTV,Intels Media Renderer,XBox360和许多其他iphone渲染器),iPush Renderer device除外。

当我使用UPNPLid.dll [UPnP 1.0类型库(控制点)]时,我得到所有渲染器,包括iPush

UPnPDeviceFinder finder = new UPnPDeviceFinder();
UPnPDevices devs = finder.FindByType(type, 0);

接下来,当我尝试迭代iPush的服务时,我得到“COMException(0x80040501)”

  foreach (var service in device.Services)  {//get the right service}

我尝试使用Intels Device Spy和Intels Media Controller推送到iPush。当调用Play时,iPush会永远显示加载屏幕。请注意,iPush与我测试过的所有iphone控制器完美配合 在检查互联网上是否存在此错误后,我看到similar有关WMP和xBox的问题给出了同样的异常,但没有回答。

1 个答案:

答案 0 :(得分:1)

0x80040501为UPNP_E_EVENT_SUBSCRIPTION_FAILED,表示渲染器无法理解控制器的请求。不幸的是,这个特定的Windows API严重缺乏文档记录。我建议使用Wireshark并从iWhatever捕获初始握手,并与来自您的实现的相同流量进行比较。通过捕获您的实现,您应该从iDevice中看到更多描述性错误。毕竟它是SOAP。我不会惊讶地发现那些iDevices做了一些独家的东西。英特尔的UPnP套件是一个参考实现,所以如果这不起作用,有些东西是可疑的。但是,如果我理解正确,英特尔在订阅和枚举方面没有问题,而是实际操作的后期阶段。但无论如何,Wireshark现在是你的朋友。使DLNA与硬件设备协同工作是无休止地寻求数据包捕获。

此链接也可能有用: http://www.archivum.info/microsoft.public.upnp/2007-08/00009/Device-gt-get_Service-failed.html

免责声明:我不是Windows UPnP API的特别朋友,C#越少。我碰巧习惯用C ++中的UPnP工作。