GioF71 / tidal-connect

Simple script for configuring Tidal Connect with Docker (also on Volumio, MoodeAudio, OSMC)
MIT License
64 stars 6 forks source link

How can I be sure that sound path is "bitperfect"? #176

Open mimmus opened 1 month ago

mimmus commented 1 month ago

Hi, I installed tidal-connect by your script on a Raspberry Pi 4 with Moode, connected to an integrated amplifier (Mission 778X) by USB . Using Tidal app from my iphone, I read "MQA" under title of song (and effectively it sound very good!). How can I ensure that sound path from Tidal to my ampli is "bitperfect", without re-encoding/resampling?

Thanks

GioF71 commented 1 month ago

Hello, the tidal-connect app contained in the docker image is a closed source application, so we cannot be 100% sure of what it actually does. That said, I believe that the app does not perform any hidden conversions and/or resampling. If your audio device supports the sample rate of the track, which is up to 24/96, excluding the possibility of 2nd unfolding on the dac itself, no resampling or re-encoding should happen. One can force alsa to resample to a given sample rate using custom configurations (including rate and format) in /etc/asound.conf and/or ~/.asoundrc, but unless you do something like that, nothing unexpected should happen.

You can verify the format of what is currently playing though. For example, if you want to monitor the device at index 0, you might want to open a terminal and run

watch cat /proc/asound/card0/pcm0p/sub0/hw_params

or, by name, if your dac is named DAC, this would become:

watch cat /proc/asound/DAC/pcm0p/sub0/hw_params

This will display the current sampling rate and bit depth that is sent to the dac.

GioF71 commented 1 month ago

is this one of your posts maybe?

mimmus commented 1 month ago

Here is the output:

$ cat /proc/asound/M20/pcm0p/sub0/hw_params                                                                                                                                                                     moode: Fri May 24 16:11:43 2024

access: MMAP_INTERLEAVED
format: S32_LE
subformat: STD
channels: 2
rate: 96000 (96000/1)
period_size: 4800
buffer_size: 24000

Another question: what is the difference between software volume and hardware volume?

GioF71 commented 1 month ago

So it's playing @96kHz, and the format is S32_LE. So 24 bit have been padded to 32bit, but is not a conversion we should worry about. DACs generally support S16 and S32, not S24 afaik. Padding is just adding the missing 8 bits with zeroes. The significant bits should be unchanged.

About software vs hardware volume... If you generally keep volume at 100%, I believe you won't notice any particular difference. At least, I don't. If you just want to have the option to quickly attenuate or mute the sound from the app for convenience (say: you need to answer a call), only to go back to full volume immediately after, I would not worry at all about software volume quality-wise. As far as I know there is no way that this Tidal App can act on the hardware volume of the device. Of course if you open alsamixer on the terminal, you can act on the hardware volume, but the change won't be reflected in the Tidal Application slider.

Software volume works in the scope of the application. Say you have Tidal Connect and Spotify Connect, both with software volume, ready on the same device. If you lower softvol on one, the other is not affected. If instead you use hardware volume, you modify the volume for every app. And in case of mixed configurations (say: Spotify Connect on hw volume and Tidal Connect, of course, on software volume), if you lower hardware volume on one, lowering softvol on the other would result in further volume reduction, and that is not ideal, it would also be a confusing scenario for me. I generally use software volume and keep it 100%, but I like the convenience to be able to turn down the player (any player) volume via software. Sometimes it's quicker than finding the amp remote, or going to the amp itself and act on the knob.

A note about MQA: 100% volume might be needed for unfolding to happen downstream on the dac. I am not sure because I don't have a MQA dac, but some devices like the WiiM say that max volume is needed. But again, I don't care a lot about MQA.

mimmus commented 1 month ago

Thanks, Giovanni! My amplifier doesn’t support MQA directly, only DSD, I hope to have no much MQAs around, if not on Tidal ☺️

Another question: as far as you know, to listen on Qobuz, do I need a hardware streamer? Problem with these is that they have always a DAC and I don’t need a DAC!

GioF71 commented 1 month ago

Thanks, Giovanni! My amplifier doesn’t support MQA directly, only DSD, I hope to have no much MQAs around, if not on Tidal ☺️

Good! Also because MQA as a format is probably on its way out.

Another question: as far as you know, to listen on Qobuz, do I need a hardware streamer? Problem with these is that they have always a DAC and I don’t need a DAC!

Have a look here You will find two compose files for Qobuz and Tidal Hires. Your moode device can act as a streamer of course. It's best to set the upmpdcli renderer in OpenHome mode. I don't know if you can set it as "BOTH" with the new version 9, but if you need that, you can disable moode's built-in upmpdcli and use this stack, maybe without mpd, you can use Moode's instance.

Then you will be able to use both Qobuz and upmpdcli on your player. If you have BubbleUPnP, you can already do that without having to create the media servers, but then if you want your player to not stop if your phone goes standby/offline/whatever, you might need to also instance BubbleUPnP server somewhere onì your network and let if manage your DLNA players. With these configurations, you won't need BubbleUPnP server, because the media server is not on the phone, and because the player, being openhome compliant, owns the playlist.

mimmus commented 1 month ago

I don't know OpenHome and upmpdcli. I will indagate... In any case, I'd like to have a unified GUI, not recurring to BubbleUPnP/mConnect but it seems that it's not actually possible, if not paying Volumio subscription :-)

GioF71 commented 1 month ago

This page might give you an idea of how upmpdcli works. If you are looking for other options, especially for Qobuz, you might want to consider Logitech Media Server (now Lyrion Music Server), it has Qobuz and Tidal Plugins. Tidal plugin is limited to 24/48 and will probably not be updated soon for hires, see here. I believe he is right, but I reckon people will want to have access to the best possible available formats anyway. With LMS you can access local music, qobuz, spotify and Tidal (albeit as said up to 24/48) from one interface. Players can be almost anything using squeezelite. I have a docker container for that if you want to explore the solution. I hope this helps you choose what is best for your use cases. Please star the repo if you like the work!

mimmus commented 1 month ago

Thus, Daphile could be the "definitive" all-in-one solution but I need a mini-PC. Thanks for your responses.

GioF71 commented 1 month ago

Well daphile is x86 only for some reasons. And you would be tied to the release cycle of the guy who maintains it. LMS itself can run on any platform. And why bothering with a hard requirement for a x86 mini-pc? You might be able to repurpose something you might already have or even use the same pi you are using now, especially if the library is not too big. You can also run it using docker with the community image, which works very well.

mimmus commented 1 month ago

I am grateful to you for all these tips. You need to know that Linux, containers, networking, servers, ... are part of my every day job since +25 years and thus I'm not so happy to struggle to make them working during my free time also :-)

In any case, what is not so clear to me is where I need to put LMS in a global architecture: do I need to install on a generic Linux (Raspbian) distro? Or can I install on the actual Moode?

GioF71 commented 1 month ago

I am grateful to you for all these tips. You need to know that Linux, containers, networking, servers, ... are part of my every day job since +25 years and thus I'm not so happy to struggle to make them working during my free time also :-)

In any case, what is not so clear to me is where I need to put LMS in a global architecture: do I need to install on a generic Linux (Raspbian) distro? Or can I install on the actual Moode?

If you ask me what you need, I can tell you that you can install it on almost any linux device.

However if you choose something like Daphile, you need a dedicated device, because of the way it is packaged. If you use piCorePlayer, again you need a dedicated device. These two are turnkey solutions but from what you tell me, you can happily do without them. I'm not saying anything bad about these solutions: they are excellent and well documented, but if you are keen to do some DIY, you simply can do more with the same hardware or even less. Moode IMO is on another level in terms of flexibility. Try installing docker on piCorePlayer or Daphile... I'm sure it is possible but it might be harder, especially for piCorePlayer.

You can definitely install LMS on Moode. Moode already provides the squeezelite renderer. You can install the server using docker. Be careful of your available storage, and that probably your microsd card (if you are using one) might wear fast if you execute library scan too frequenly. If you have a spare ssd to connect to that pi, you can relocate the /config folder of the lms container to that ssd and the microsd will have a lot less work to do. If you plan to just use online services like Qobuz, Tidal and Spotify, then this concern doesn't apply at all.

The LMS media server does not need to be where the player is, of course. If you already have some server in your house, with storage for your music library, you can install lms there.

mimmus commented 1 month ago

Giovanni, I need a fully functional music server for "liquid" content (FLAC files archived on an external NAS and online, possibly HiRes, services). Ideally, it should have a unified GUI (switching to/from mConnect actually works but it's sub-optimal for me).

I'm a beginner with these products, I don't even know that LMS architecture has so many roles (client, server, renderer). My experience untl now is only with Volumio and Moode (and your Tidal-connect that works, even if sometime it suddenly dies).

I just ran LMS Docker image but now I don't know what other piece is missing

GioF71 commented 1 month ago

Giovanni, I need a fully functional music server for "liquid" content (FLAC files archived on an external NAS and online, possibly HiRes, services). Ideally, it should have a unified GUI (switching to/from mConnect actually works but it's sub-optimal for me).

Given what you have written in this thread, I'd suggest LMS. Maybe you nas can run it. Is it a commercial nas?

I'm a beginner with these products, I don't even know that LMS architecture has so many roles (client, server, renderer). My experience untl now is only with Volumio and Moode (and your Tidal-connect that works, even if sometime it suddenly dies).

Volumio, and even Moode, mostly for user-friendlyness, suggest an approach that requires the player to also index your library. In both cases, what you generally do is add a remote samba/nfs share to your configuration. Then the indexing process starts. But what if you have multiple players? Every time, same story: you've got to configure your share and index your files. Again. New files in the library? A new re-index for every player. So, considering that you don't seem to like upnp too much, I'd suggest LMS. With the "Material skin" plugin the web interface is very nice, and should tick all the boxes. Local files in hires is not a problem with LMS. You want a new pi for a new dac, or a new amp? Just add a new linux box with a Squeezelite installation. Or, a Moode instance, with SqueezeLite enabled. No need (or better, no strict need) to rescan you library again.

I just ran LMS Docker image but now I don't know what other piece is missing (probably Squeezelite?)

Yes! Squeezelite on the player side. And on android there are nice apps, like Squeezer (free) and Orange Squeeze (quite cheap). There are also good apps on iOS, iPeng IIRC, not free. All of them are much easier for the end user compared to upnp/dlna apps, I must say.

mimmus commented 1 month ago

Given what you have written in this thread, I'd suggest LMS. Maybe you nas can run it. Is it a commercial nas?

No, it's only the telco router working as a NAS with an attached USB disk.

I just ran LMS Docker image but now I don't know what other piece is missing (probably Squeezelite?)

Yes! Squeezelite on the player side.

Always as Docker container?

And on android there are nice apps, like Squeezer (free) and Orange Squeeze (quite cheap). There are also good apps on iOS, iPeng IIRC, not free. All of them are much easier for the end user compared to upnp/dlna apps,

Bad news, I have an iPhone... but I will try...

GioF71 commented 1 month ago

iPeng also works on the iPhone

GioF71 commented 1 month ago

Given what you have written in this thread, I'd suggest LMS. Maybe you nas can run it. Is it a commercial nas?

No, it's only the telco router working as a NAS with an attached USB disk.

Uhm probably you won't be able to install LMS (and nothing similar) on that, can you consider using a Pi and connecting the disk to the pi instead?

I just ran LMS Docker image but now I don't know what other piece is missing (probably Squeezelite?)

Yes! Squeezelite on the player side.

Always as Docker container?

Yes, if this is convenient for you. If Moode is your player, then squeezelite is built-in, in the renderers page. You only need to enable it.

mimmus commented 1 month ago

can you consider using a Pi and connecting the disk to the pi instead?

yes, of course, as disk is powered by a separate power supply.

Yes, if this is convenient for you. If Moode is your player, then squeezelite is built-in, in the renderers page. You only need to enable it.

OK, I enabled but how to configure LMS to "see" it?

GioF71 commented 1 month ago

Yes, if this is convenient for you. If Moode is your player, then squeezelite is built-in, in the renderers page. You only need to enable it.

OK, I enabled but how to configure LMS to "see" it?

Using default settings, LMS will discover the available players.

However, you can configure squeezelite to connect to a specific server using the '-s' switch. This can be useful if you want to run more than one squeezelite on the same host, maybe for more than one connected dac, or if you want multiple configurations (e.g. with and without upsampling). This option is also useful in case you run more than one LMS instance. Or, in case you run Roon and enable LMS compatibility/emulation, and you still want to use your LMS instance.

In these case it's better (or mandatory) to not rely on discovery and specify the server on the squeezelite endpoints. For a simple, initial configuration, just leave it as it is in moode and you should be good to go.

mimmus commented 1 month ago

OK, my fault: amplifier (DAC) was Off :-) After powering it On and restarting Squeezelite, I was able to see Moode as player. Now I need only the mobile app.

I will evaluate this setup next days. Thanks for all

GioF71 commented 1 month ago

My experience untl now is only with Volumio and Moode (and your Tidal-connect that works, even if sometime it suddenly dies).

Can you describe in more detail what happens? I don't know if I can do something to solve the issue, the binary is closed source... and now quite old unfortunately.

mimmus commented 1 month ago

Rest assured that I will post logs when it happens again.

mimmus commented 1 month ago

I will evaluate this setup next days. Thanks for all

From my first tests, it seems a really impressive setup!

I installed Windows Squeezelite-X on a laptop: it's very responsive and it configured also an additional player, so I can experiment with multiplayer setup.

Then, I tried the "material skin" on an iPhone and it's amazing! Fast fast fast and Tidal/Qobuz are really integrated in searches and playlists! Perhaps, I don't even need the iPeng app.

At this point, I'm wondering what I need Moode for... Could I install piCorePlayer?

GioF71 commented 1 month ago

I will evaluate this setup next days. Thanks for all

From my first tests, it seems a really impressive setup!

I installed Windows Squeezelite-X on a laptop: it's very responsive and it configured also an additional player, so I can experiment with multiplayer setup.

Then, I tried the "material skin" on an iPhone and it's amazing! Fast fast fast and Tidal/Qobuz are really integrated in searches and playlists! Perhaps, I don't even need the iPeng app.

At this point, I'm wondering what I need Moode for... Could I install piCorePlayer?

Hello, yes you can if you choose to completely embrace the LMS solution... but while on Moode it's easy to install other things, on piCorePlayer you would be quite limited. There are scripts around, but it's not the same. On Moode player, it's so easy to just add squeezelite. Let me know what I usually do on a linux device used as a pure player, or on a Moode installation:

1) Add a last.fm scrobbler, usually with yams, docker image here 2) Install mpd with this image. Not needed with Moode of course 3) Add upmpdcli with this image. On Moode, I just enable it. 4) Enable Squeezelite with this image. On Moode, I just enable it 5) Enable Librespot for spotify connect with this image. On Moode, I just enable it. 6) Enable Shairport-sync with this image. On Moode, I just enable it. 7) Add mympd using the official image, not needed with Moode 8) Install tidal-connect with this repository

But when I want to connect more than one audio device, or have multiple configurations running at the same time, the standard solutions of course come short, piCorePlayer for example. Moode with the possibility of running docker is a very good starting point.

mimmus commented 1 month ago

Ah, ok, I understand: piCorePlayer is not a standard distro under the hood. But it's not really userful keeping Moode just to see "Locked by Squeezelite" on the homepage :-)

just a last question (we're using this issue like a chat :-)) I normally power off my amplifier/DAC when not in use., This disconnects USB from Raspberry (same if I select another source from the knob) and often there are issues when I power it on again. OS doesn't see USB device and I need to reboot or even powercycle the Rasp. Any idea?

GioF71 commented 1 month ago

Any idea?

Well picoreplayer might be ok for your use case. It's safe to simply power it off by removing power, if you don't install lms also. However looking here it seems it's better to do a proper shutdown. I have powered off my picoreplayers a while ago by cutting power countless times without any issue. However if you look at this post on the moode forum, it's quite difficult that something bad happens during a hard poweroff.

I'd say well something can happen, but the worst would be that you have to reinstall your o.s.. If you have kept track of your configurations, this is generally an easy task albeit boring and undesirable!

And you can also create a backup of your configured sd card. But, do as I say, not as I do, because I never did that despite thinking that it would have been a wise move.

mimmus commented 1 month ago

Rest assured that I will post logs when it happens again.

Tidal Connect - https://github.com/GioF71/tidal-connect.git - common.sh version 0.1.5
FRIENDLY_NAME=MISSION USB Audio 2.0
MODEL_NAME=Moode
MQA_CODEC=false
MQA_PASSTHROUGH=false
CARD_NAME=M20
CARD_INDEX=
CARD_DEVICE=
CARD_FORMAT=
CREATED_ASOUND_CARD_NAME=
ENABLE_SOFTVOLUME=yes
ENABLE_GENERATED_TONE=yes
ASOUND_FILE_PREFIX=
FORCE_PLAYBACK_DEVICE=
SLEEP_TIME_SEC=3
RESTART_ON_FAIL=1
RESTART_WAIT_SEC=10
CLIENT_ID=
LOG_LEVEL=3
File [asound.conf] has not been provided
File /etc/asound.conf exists.
File /etc/asound.conf is writable
Current /etc/asound.conf:
pcm.tidal-audio-device {
  type plug
  slave.pcm {
    type hw
    card 0
  }
}
pcm.tidal-softvol {
  type softvol
  slave {
    pcm "tidal-audio-device"
  }
  control {
    name "Master"
    card 0
  }
}
Entering write_asound_if_needed ...
Specified CARD_NAME=[M20]
Found audio device [M20] as index [0]
Entering write_audio_config with card_index=[0] ...
Creating sound configuration file (card_index=[0], softvol=[yes]) ...
Ok to enable softvolume, as no 'Master' control exists for the device at index [0]
Building asound.conf with softvolume ...
Setting PLAYBACK_DEVICE=[tidal-softvol]
Sound configuration file created
Completed write_audio_config
Completed write_asound_if_needed.
pcm.tidal-audio-device {
  type plug
  slave.pcm {
    type hw
    card 0
  }
}
pcm.tidal-softvol {
  type softvol
  slave {
    pcm "tidal-audio-device"
  }
  control {
    name "Master"
    card 0
  }
}
PLAYBACK_DEVICE=[tidal-softvol]
Starting Speaker Application in Background (TMUX)
Sleeping for a while (3 seconds)...
ENABLE_GENERATED_TONE=[yes]
Generated tone is enabled
certificate_path=[/app/ifi-tidal-release/id_certificate/IfiAudio_ZenStream.dat]
COMMAND_LINE=/app/ifi-tidal-release/bin/tidal_connect_application          --tc-certificate-path /app/ifi-tidal-release/id_certificate/IfiAudio_ZenStream.dat          --playback-device tidal-softvol          -f "MISSION USB Audio 2.0"          --model-name "Moode"          --codec-mpegh true          --codec-mqa false          --disable-app-security false          --disable-web-security false          --enable-mqa-passthrough false          --log-level 3          --enable-websocket-log "0"
Trying a short tone ...
Playing WAVE '/assets/audio/short-low-tone.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
tone_played=[1]
Starting TIDAL Connect ...
STARTING TidalConnect services, version: 1.1.3
ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) unable to open slave
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline
ALSA lib pcm_dsnoop.c:618:(snd_pcm_dsnoop_open) unable to open slave
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
STARTED TidalConnect services.
[2024-05-30 14:49:09.632] [tisoc] [warning] [PlaybackControllerImpl.cpp:472] Illegal state:1
[2024-05-30 14:50:08] [info] asio async_shutdown error: asio.misc:2 (End of file)
[2024-05-30 14:52:45] [info] asio async_shutdown error: asio.misc:2 (End of file)
[2024-05-30 14:52:45.969] [tisoc] [warning] [PlaybackControllerImpl.cpp:472] Illegal state:1
[2024-05-30 14:52:55.178] [tisoc] [warning] [logger.cpp:22] [audio_worker.cpp:321] Attempting to initialize a decoder without initial data!
Expression 'alsa_snd_pcm_prepare( stream->playback.pcm )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 2920
Expression 'AlsaStart( stream, 0 )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 4233
Expression 'alsa_snd_pcm_drop( stream->playback.pcm )' failed in 'src/hostapi/alsa/pa_linux_alsa.c', line: 3042
[2024-05-30 14:54:20] [info] asio async_shutdown error: asio.misc:2 (End of file)
GioF71 commented 1 month ago

So what happened? Playback stopped?

mimmus commented 1 month ago

yes. and it was impossible to reconnect from Tidal app. I was forced to restart the container, nothing of impossible

GioF71 commented 1 month ago

What were you streaming? In terms of bitdepth and samplerate

GioF71 commented 1 month ago

yes. and it was impossible to reconnect from Tidal app. I was forced to restart the container, nothing of impossible

probably restarting moode would have solved the issue as well, still it's only a workaround.

mimmus commented 1 month ago

Pink Floyd - The Wall - Hey You (Remastered 2011) :-) Best quality (MQA).

Listening now, excellent!

GioF71 commented 1 month ago

I will try tomorrow... but anyway it might not happen. An user pointed me to an updated version in this issue, most of the interesting content has been redated. Anyway I could build an image with that version, also using a much more updated base image. But I cannot share it, and also, there was no clear benefit. Anyway I'll try if this version works if the current doesn't, especially if the issue is somehow replicable.

GioF71 commented 1 month ago

Pink Floyd - The Wall - Hey You (Remastered 2011) :-) Best quality (MQA).

Listening now, excellent!

So don't you want to get rid of this old and now buggy app and try upmpdcli with the Tidal plugin? Give it a shot!

Edit: typo! up instead of app? What was I thinking?

mimmus commented 1 month ago

At this point, I will try everything and change diy-hifi to my second job :-)

mimmus commented 1 month ago

I read a little about UPnP/OpenHome, it seems that the main limitation of UPnP protocol is that the control app has also the playlist and thus it doesn't play the next track if it goes to sleep. Thus OpenHome is "better", as you said. I tried to enable one/other/both in /etc/upmpdcli.conf but it seems that mConnect Player Lite doesn't see it if set to OpenHome. Unfortunately, I have no Android devices to try BubbleUPnP.

Good news is that if I set tidalaudioquality = HI_RES_LOSSLESS, it plays a FLAC | 24 bit | 192 kHz.

In any case, I don't like to much move to another app back and forth, LMS "material skin" is really good and I like its multi-player features. Let's say that UPnP is another tool that can be useful.

GioF71 commented 1 month ago

How did you use the plugin? Did you use the upmpdcli installation available in Moode?

mimmus commented 1 month ago

yes, I simply used upmpdcli already installed in Moode, after disabling Squeezelite renderer.

GioF71 commented 1 month ago

Hello, you can avoid the need to disable Squeezelite if you use the "-C" options using the "Other Options" box. The option -C means:

-C [timeout] Close the output device after [timeout] seconds of the player being idle. The default is to always keep the device open as long as the player is "on"

so if you use -C 2 the audio device is released after it is not used for 2 seconds.

About upmpdcli, did you edit the upmpdcli.conf manually, or does moode already support the plugin? I am still using Moode 8.3.9 so I don't know yet. But I know they are working/have worked on this. See here.

And last thing, about iOS: you might want to try Linn Kazoo. Although, it might require that you enable OPENHOME and OPENAV in upmpdcli.conf, so in upmpdcli.conf:

upnpav = 1
openhome = 1
GioF71 commented 1 month ago

Actually it's not true that you need both upnpav and openhome active. I'd stick with openhome though.