Add DLNA Receiver plugin provider#3611
Add DLNA Receiver plugin provider#3611trudenboy wants to merge 2 commits intomusic-assistant:devfrom
Conversation
🔒 Dependency Security Report✅ No dependency changes detected in this PR. |
|
Isn’t this the same as #2501 which we just decided not to progress due to security concerns? |
I think this one is the other way around. It turns MA into a DLNA target to send audio to (as source) |
|
Ok then I’m a little confused as to why this is needed as why wouldn’t MA just get the media items directly from where ever the DLNA app is getting them from? |
|
Thanks for the question @OzGav - it's a fair one! Let me clarify both the difference from #2501 and the "why" behind this. How this differs from #2501
Why not "just get the media directly in MA"?This is the key question. There are real scenarios where the audio source cannot or should not be accessed directly by MA:
In shortThe existing Happy to discuss any architectural or security concerns! |
|
I think it's fine to add it - as long as you take care of maintenance @trudenboy as I am not a fan of DLNA :-) |
Summary
New plugin provider that exposes Music Assistant as a UPnP/DLNA MediaRenderer on the local network. External apps (BubbleUPnP, Qobuz, foobar2000, mconnect, etc.) can discover MA via SSDP and cast audio streams to any configured player.
Key features
239.255.255.250:1900)StreamMetadataPluginSource/get_audio_stream()into the MA pipelineAVTransport,RenderingControl,ConnectionManagerArchitecture
Changed files
__init__.pyprovider.pyDLNAReceiverProvider(PluginProvider)— lifecycle, DIDL parsing, metadata loop, audio proxyrenderer.pyUPnPRenderer— aiohttp server handling SOAP actions (SetAVTransportURI, Play, Pause, Stop, etc.)ssdp.pySSDPAdvertiser— multicast SSDP alive/byebye/search responseseventing.pyconstants.pyscpd/*.xmlmanifest.jsonplugin_provider, domaindlna_receiver)tests/Notes
network_mode: hostin Docker for SSDP multicast to workdlnaplayer provider (MA as DLNA client) is complementary — this adds the server side