DLNA renderer throwing COMException (0x80040501)

2019-07-29 15:54发布

I am trying to set up a DLNA Controller to Control an iPush Renderer device. The iPush Renderer device is becoming very popular as many iphone DLNA controllers and even the native Airplay works perfectly well with it. It supports almost all video file formats. My DLNA controller Works with all the devices I have tested it on so far(WDTV, Intels Media Renderer, XBox360, and many other iphone Renderers) except this The iPush Renderer device.

When I use UPNPLid.dll [UPnP 1.0 Type Library (Control Point)], I get all Renderers including the iPush

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

Next when I try to iterate through the services of the iPush I get "COMException (0x80040501)"

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

I tried using Intels Device Spy and Intels Media Controller to Push to the iPush. When Play is invoked, The iPush just shows a loading screen forever. Note that the iPush works perfectly fine with all the iphone Controllers I have tested on it.
After checking the Internet for this error, I saw similar question regarding WMP and xBox giving this same exception but there was no answer.

1条回答
ら.Afraid
2楼-- · 2019-07-29 16:21

0x80040501 is UPNP_E_EVENT_SUBSCRIPTION_FAILED which suggests that the renderer doesn't understand your controller's request. Unfortunately this particular Windows API is severely under-documented. I would suggest taking Wireshark and capturing the initial handshake from iWhatever and compare with the same traffic from your implementation. By capturing your implementation, you should see more descriptive error from the iDevice too. It's SOAP after all. I won't be surprised to find out that those iDevices do some exclusive stuff. Intel's UPnP suite is a reference implementation, so if THAT doesn't work, something's fishy. Though, if i understand right, Intel doesn't have a problem with subscription and enumeration, but later stages of actual operation. But in any case, Wireshark is your friend now. Making DLNA work with hardware devices is endless quest of packet capturing.

This link may be helpful too: http://www.archivum.info/microsoft.public.upnp/2007-08/00009/Device-gt-get_Service-failed.html

Disclaimer: i am no particular friend with Windows UPnP API, the less C#. I just happen to used to work a lot with UPnP in C++.

查看更多
登录 后发表回答