ugjka / blast

blast your linux audio to DLNA receivers
Other
33 stars 1 forks source link

Support for AVTransport 2 #14

Closed aubustou closed 6 months ago

aubustou commented 7 months ago

Hello,

is it difficult to add support for AVTransport 2?

Thank you!

ugjka commented 7 months ago

Is there an actual problem?

aubustou commented 7 months ago

yes, I have a Devialet Phantom II and there is only AVTransport 2 available. Blast starts, then stops because AVTransport 1 is not available.

ugjka commented 7 months ago

Seems I need to detect what the devices want and serve that,can you give me the output of blast -debug?

aubustou commented 7 months ago

DLNA receivers
0: Salon
----------
Select the DLNA device:
[0]
(*goupnp.MaybeRootDevice)(0x40000ee460)({
 USN: (string) (len=85) "uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf::urn:schemas-upnp-org:service:AVTransport:1",
 Root: (*goupnp.RootDevice)(0x4000152008)({
  XMLName: (xml.Name) {
   Space: (string) (len=31) "urn:schemas-upnp-org:device-1-0",
   Local: (string) (len=4) "root"
  },
  SpecVersion: (goupnp.SpecVersion) {
   Major: (int32) 1,
   Minor: (int32) 0
  },
  URLBase: (url.URL) http://192.168.2.184:46787/944c70b3-96a7-4629-9196-d4cc988f8ecf.xml,
  URLBaseStr: (string) (len=67) "http://192.168.2.184:46787/944c70b3-96a7-4629-9196-d4cc988f8ecf.xml",
  Device: (goupnp.Device) Device ID uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf : urn:schemas-upnp-org:device:MediaRenderer:2 (Salon)
 }),
 Location: (*url.URL)(0x4000130630)(http://192.168.2.184:46787/944c70b3-96a7-4629-9196-d4cc988f8ecf.xml),
 LocalAddr: (net.IP) (len=16 cap=16) 192.168.2.93,
 Err: (error) <nil>
})
([]*av1.AVTransport1) <nil>
(*errors.errorString)(0x4000096740)(goupnp: service "urn:schemas-upnp-org:service:AVTransport:1" not found within device "Salon" (UDN="uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf"))```
ugjka commented 7 months ago

I've prepared a patch in this branch https://github.com/ugjka/blast/tree/14-support-for-avtransport-2 if you want to build from source

Alternatively here is a build to try: blast.zip

aubustou commented 7 months ago

Same error :(

plexamp@plexamp-dlna:~/blast $ ./blast
----------
DLNA receivers
0: Salon
----------
Select the DLNA device:
[0]
----------
Audio sources
0: alsa_output.platform-bcm2835_audio.analog-stereo.monitor
1: blast.monitor
----------
Select the audio source:
[0]
----------
Your LAN ip addresses
0: 192.168.2.93
1: 2a01:e0a:8b7:9b80:d23c:8e80:b242:f6e1
2: fe80::81c5:ee55:d09f:d5e5
----------
Select the lan IP address for the stream:
[0]
----------
2024/05/04 11:46:27 starting the stream on port 9000 (configure your firewall if necessary)
2024/05/04 11:46:27 stream URI: http://192.168.2.93:9000/stream.mp3
2024/05/04 11:46:27 setting avtransport URI and playing
transport: goupnp: service "urn:schemas-upnp-org:service:AVTransport:1" not found within device "Salon" (UDN="uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf")
plexamp@plexamp-dlna:~/blast $ ./blast -debug
----------
DLNA receivers
0: Salon
----------
Select the DLNA device:
[0]
(*goupnp.MaybeRootDevice)(0x40001b0000)({
 USN: (string) (len=85) "uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf::urn:schemas-upnp-org:service:AVTransport:1",
 Root: (*goupnp.RootDevice)(0x40001b2008)({
  XMLName: (xml.Name) {
   Space: (string) (len=31) "urn:schemas-upnp-org:device-1-0",
   Local: (string) (len=4) "root"
  },
  SpecVersion: (goupnp.SpecVersion) {
   Major: (int32) 1,
   Minor: (int32) 0
  },
  URLBase: (url.URL) http://192.168.2.184:46787/944c70b3-96a7-4629-9196-d4cc988f8ecf.xml,
  URLBaseStr: (string) (len=67) "http://192.168.2.184:46787/944c70b3-96a7-4629-9196-d4cc988f8ecf.xml",
  Device: (goupnp.Device) Device ID uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf : urn:schemas-upnp-org:device:MediaRenderer:2 (Salon)
 }),
 Location: (*url.URL)(0x40001a63f0)(http://192.168.2.184:46787/944c70b3-96a7-4629-9196-d4cc988f8ecf.xml),
 LocalAddr: (net.IP) (len=16 cap=16) 192.168.2.93,
 Err: (error) <nil>
})
panic: runtime error: index out of range [0] with length 0

goroutine 1 [running]:
main.main()
        /home/plexamp/blast/main.go:145 +0x1a9c

Here is the XML from the device:


This XML file does not appear to have any style information associated with it. The document tree is shown below.
<root xmlns="urn:schemas-upnp-org:device-1-0" xmlns:dlna="urn:schemas-dlna-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<device>
<deviceType>urn:schemas-upnp-org:device:MediaRenderer:2</deviceType>
<friendlyName>Salon</friendlyName>
<manufacturer>Devialet</manufacturer>
<manufacturerURL>https://www.devialet.com</manufacturerURL>
<modelDescription>The best sound in the world</modelDescription>
<modelName>Phantom II 98 dB</modelName>
<modelNumber>2.16.1</modelNumber>
<modelURL>https://www.devialet.com/phantom-speaker/phantom</modelURL>
<serialNumber>Q11X00634TQ10</serialNumber>
<UDN>uuid:944c70b3-96a7-4629-9196-d4cc988f8ecf</UDN>
<UPC/>
<iconList>
<icon>
<mimetype>image/jpeg</mimetype>
<width>32</width>
<height>32</height>
<depth>24</depth>
<url>/DvltRygelRendererPlugin-32x32x24.jpg</url>
</icon>
<icon>
<mimetype>image/jpeg</mimetype>
<width>120</width>
<height>120</height>
<depth>24</depth>
<url>/DvltRygelRendererPlugin-120x120x24.jpg</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>32</width>
<height>32</height>
<depth>24</depth>
<url>/DvltRygelRendererPlugin-32x32x24.png</url>
</icon>
<icon>
<mimetype>image/png</mimetype>
<width>120</width>
<height>120</height>
<depth>24</depth>
<url>/DvltRygelRendererPlugin-120x120x24.png</url>
</icon>
</iconList>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:ConnectionManager:2</serviceType>
<serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
<SCPDURL>/xml/ConnectionManager.xml</SCPDURL>
<controlURL>/Control/DvltRygelRendererPlugin/RygelSinkConnectionManager</controlURL>
<eventSubURL>/Event/DvltRygelRendererPlugin/RygelSinkConnectionManager</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:AVTransport:2</serviceType>
<serviceId>urn:upnp-org:serviceId:AVTransport</serviceId>
<SCPDURL>/xml/AVTransport2.xml</SCPDURL>
<controlURL>/Control/DvltRygelRendererPlugin/RygelAVTransport</controlURL>
<eventSubURL>/Event/DvltRygelRendererPlugin/RygelAVTransport</eventSubURL>
</service>
<service>
<serviceType>urn:schemas-upnp-org:service:RenderingControl:2</serviceType>
<serviceId>urn:upnp-org:serviceId:RenderingControl</serviceId>
<SCPDURL>/xml/RenderingControl2.xml</SCPDURL>
<controlURL>/Control/DvltRygelRendererPlugin/RygelRenderingControl</controlURL>
<eventSubURL>/Event/DvltRygelRendererPlugin/RygelRenderingControl</eventSubURL>
</service>
</serviceList>
<presentationURL/>
<dlna:X_DLNADOC>DMR-1.51</dlna:X_DLNADOC>
</device>
</root>```
ugjka commented 7 months ago

I see the problem i think, it advertises itself as av1 but expects av2

try this build: blast.zip

aubustou commented 7 months ago

Now it finds the device. Perfect! Thank you!

ugjka commented 7 months ago

Can you check this build, i reworked the code to be cleaner: blast.zip