hzeller / gmrender-resurrect

Resource efficient UPnP/DLNA renderer, optimal for Raspberry Pi, CuBox or a general MediaServer. Fork of GMediaRenderer to add some features to make it usable.
GNU General Public License v2.0
834 stars 202 forks source link

Cannot find the renderer due to invalid value of GetDeviceCapabilities and GetTransportSettings #49

Open caxton opened 10 years ago

caxton commented 10 years ago

The renderer (gmrenderer) have 2 issues: It don't return correct values for GetDeviceCapabilities and GetTransportSettings.

These 2 functions have output parameters and this renderer doesn't fill these output parameters. It's an issue from this renderer and it can't be acceptable since it doesn't follow UPnP rules. (Output parameters have to be present in the response even if they are empty).

BubbleUPnP should be able to discover this renderer because it don't take care about these output values (And it's also an issue...).

WormsCH commented 10 years ago

Hi, I can't find the render with my samsung stock player. I looked into the file upnp_transport.c and found that:

static int get_device_caps(struct action_event *event) { if (obtain_instanceid(event, NULL) < 0) { return -1; } // TODO: implement ? return 0; }

static int get_transport_settings(struct action_event *event) { if (obtain_instanceid(event, NULL) < 0) { return -1; } // TODO: what variables to add ? return 0; }

so, returning an empty value should solve the issue ?

hzeller commented 10 years ago

@caxton , what was the control point you were using, that required the device capabilities ? This way I can have something to play with.

Usually, these calls are never used in all the control points I have seen, so this is why they are not implemented.

caxton commented 10 years ago

@hzeller I use "AwoX mediaCTRL" on android device, and that was what they feedback to me renderer should return valid GetDeviceCapabilities and GetTransportSettings based on DLNA spec.

mimepp commented 10 years ago

Yes, I confirm this is a issue too. For a video APP: PPTV, after add following, it could play video, otherwise, device could be found, but it will not set uri to DMR.

static int get_device_caps(struct action_event *event) ...... // TODO: implement ?

BTW, I do not add code to GetTransportSettings.

WormsCH commented 10 years ago

I added these lines but the render is still not listed on the galaxy note 3 player :(

mimepp commented 10 years ago

Maybe different APP has different checking of services. Above lines work for APP PPTV, but it does not work for another APP: sohu. Maybe gmediarender needs to run DLNA CTT test (DMR) to check what's still missing.