Child: [1570a8] (diff)

Download this file

upmpdcli-cloud.txt    88 lines (61 with data), 3.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
= Upmpdcli and the Cloud
== Introduction
upmpdcli is initially a UPnP Media Renderer device: it receives music
descriptors, and downloads and plays what it is requested to play (or more
precisely, tells MPD to play it).
As standard with UPnP, this is done in conjunction with a Control Point,
with which the user interacts, and a Media Server, which stores the music
and exports catalog and audio data. The Control Point browses the music
catalog offered by the Media Server, and tells upmpdcli/mpd what to play.
The Renderer then talks directly to the Media Server to download the audio
data.
This approach presents a difficulty for integrating a streaming service
such as Tidal, Qobuz, or Google Play Music: they require authentication,
and only provide temporary URLs for downloading (these URLs can't sit in a
playlist in the Renderer, they would expire). Using a "natural" approach
where the Control Point would browse the service, and the Renderer access
its data, there would be two devices which would need to know about the
details of the streaming service authentication and security: the Control
Point and the Renderer, probably needing, in addition, more communication
between the two than was standardized by UPnP.
There is a relatively simple solution to this problem, which is to design a
Media Server to act as a gateway to the services. The Media Server deals
with authentication, presents the service assets inside a browsable and
possibly searchable tree, and exports stable URLs to the local network
Renderers. When the data is actually requested, the Media Server manages to
provide it, which can be handled by an HTTP redirection to the freshly
translated service URL, or by actually proxying the data stream.
There are some potential reasons to closely associate such a Media Server
to a Control Point (a solution adopted by a very well known Android Control
Point), or to the Renderer itself, which is the approach chosen for
upmpdcli. In practise though, it was found that a standalone Media Server
works. The upmpdcli Media Server can provide access to any local Media
Renderer (upmpdcli-based or not), not only to its upmpdcli instance.
The current implementation supports Google Music, Qobuz and Tidal, and
would be easy to extend for other cloud services.
This only works for users who have a valid subscription for the service
they want to access.
The Media Server uses the services' WEB APIs which are in general not
officially supported, so that any service could stop working at any moment
if the supplier decides that they want to close access.
== Implementation
The Media Server was initially implemented as an embedded UPnP device
inside the Renderer device. This was found to confuse many Control Points,
so that the default approach is now to have the Media Server as a separate
root device (running inside a separate process because of libupnp
limitations).
The Media Server device will be created if the configuration file has set
parameters for any of the supported services. See the
link:upmpdcli.html#upmpdcli.configfile[configuration documentation] for
details (look for your service name).
== Installation and service-specific notes
The code for accessing most services is self-contained. There is an
exception for Google Music, which needs the separate installation of a
Python library.
=== Google Music
You need to install the
link:http://unofficial-google-music-api.readthedocs.io/en/latest/usage.html#usage[gmusicapi Python Package]
=== Tidal
Nothing for now.
=== Qobuz
Nothing for now.