masmu / pulseaudio-dlna

A lightweight streaming server which brings DLNA / UPNP and Chromecast support to PulseAudio and Linux
GNU General Public License v3.0
1.25k stars 161 forks source link

'dict' object has no attribute 'split' in get_mime_types #383

Open pascalhaakmat opened 5 years ago

pascalhaakmat commented 5 years ago

Hi,

Thanks a bunch for pulseaudio-dlna. It's super user friendly!

It's been a while since I last used it and unfortunately today I got the following error message:

Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/plugins/dlna/__init__.py", line 55, in launch_discover
    discover.search(ssdp_ttl=ttl)
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/plugins/dlna/ssdp/discover.py", line 68, in search
    self._search(self.host or '', ssdp_ttl, ssdp_mx, ssdp_amount)
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/plugins/dlna/ssdp/discover.py", line 113, in _search
    self.cb_on_device_response(header, address)
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/plugins/__init__.py", line 41, in wrapper
    self.holder.add_device(device)
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/holder.py", line 111, in add_device
    device.activate(config)
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/plugins/dlna/renderer.py", line 72, in activate
    mime_types = self.get_mime_types()
  File "/home/p/Dev/build/pulseaudio-dlna/pulseaudio_dlna/plugins/dlna/renderer.py", line 209, in get_mime_types
    for sink in sinks.split(','):
AttributeError: 'dict' object has no attribute 'split'

The sinks variable contains:

sinks = {u'#text': 'http-get:*:audio/mpeg:*,http-get:*:audio/L16;rate=8000;channels=1:*,http-get:*:audio/L16;rate=8000;channels=2:*,http-get:*:audio/L16;rate=11025;channels=1:*,http-get:*:audio/L16;rate=11025;channels=2:*,http-get:*:audio/L16;rate=12000;channels=1:*,http-get:*:audio/L16;rate=12000;channels=2:*,http-get:*:audio/L16;rate=16000;channels=1:*,http-get:*:audio/L16;rate=16000;channels=2:*,http-get:*:audio/L16;rate=22050;channels=1:*,http-get:*:audio/L16;rate=22050;channels=2:*,http-get:*:audio/L16;rate=24000;channels=1:*,http-get:*:audio/L16;rate=24000;channels=2:*,http-get:*:audio/L16;rate=32000;channels=1:*,http-get:*:audio/L16;rate=32000;channels=2:*,http-get:*:audio/L16;rate=44100;channels=1:*,http-get:*:audio/L16;rate=44100;channels=2:*,http-get:*:audio/L16;rate=48000;channels=1:*,http-get:*:audio/L16;rate=48000;channels=2:*,http-get:*:audio/vnd.dlna.adts:*,http-get:*:audio/vnd.dlna.adts:*,http-get:*:audio/mp4:*,http-get:*:audio/mp4:*,http-get:*:audio/mp4:*,http-get:*:audio/x-ms-wma:*,http-get:*:audio/x-ms-wma:*,http-get:*:audio/x-ms-wma:*,http-get:*:application/ogg:*,http-get:*:audio/x-flac:*', u'@{http://www.w3.org/2001/XMLSchema-instance}type': 'xsd:string'}

I've tried adding the following to plugins/dlna/renderer.py:

            if type(sinks) is dict:
                if "#text" in sinks:
                    sinks = sinks["#text"]

This gets rid of the error, but playback still doesn't seem to work. The Squeezeserver says:

Liveaudio on laptop
Unknown Album
0, audio/L16 (UPnP/DLNA)

I hear (very briefly, <1sec) of garbled sound, then silence.

Hope this helps, let me know if you need more information.

pascalhaakmat commented 5 years ago

Update: playback does work if I install the lame encoder and then run pulseaudio-dlna like this:

$ bin/pulseaudio-dlna --codec mp3