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
|
:stylesheet: style.css
= CAMU - Self-Hosted Media Streamer & Archiver
image::design_diagram.svg[Diagram,820]
Breif on Components
-------------------
Server
~~~~~~
The server is the main hub responsible for all handling user account related functions and state, as well as managing the network of all other individual components.
User Accounts
^^^^^^^^^^^^^
Users accounts contain 4 main concepts: lists, media lists, history, and settings.
* *Lists*: Transient lists of media connected to a user-defined set of sinks. Resources retrived via browse/search instances get added to a list for playback. A list's set of active sinks can be changed on the fly.
* *Collections*: A more organized way to collect related media. They are stored to the user's account and therefore saved to the disk.
* *Packs*: [Working Idea] A more defined collection of media. Possibly being more detailed, for broader consumption, and/or archival. Something that should be easy to share.
* *History*: A detailed history that tracks what a user played and when. Also saved to a user's account.
* *Settings*: Various per-user settings. For example, tag blacklist, start/stop times per resource, skip settings per collection (album tracks).
Node
~~~~
Nodes can be seen as distributed resource managers for the server. They each contain up to 3 main parts: A source manager and/or database, then a resource host. A node can have one or both of a source manager and database but a node without either is useless.
Source Manager
^^^^^^^^^^^^^^
A source manager implements any or all of browsing, searching, and custom resource actions. A big point of a source manager is to be able to work entirely behind a proxy. Some examples of sources may include a social media website, filesystem directory, dvd drive, or radio antenna. An example of browsing could be Apple Music's "New Music". An example of searching, Youtube search. A custom action could be liking a post on Twitter.
Database
^^^^^^^^
Stores resources along with as much metadata as possible. Simply used to retrive resources locally instead of going through the source manager.
Resource Host
^^^^^^^^^^^^^
Hosts node-local resources for the server to use for streaming. Should support anything a source manager can give it.
Client
~~~~~~
Clients are the only way a user interacts with the rest of the network besides the special case of play, pause, skip and seek which can be done from a sink.
libclient
^^^^^^^^^
C library that integrates with the rest of the code-base to abstract communicating with the server as a client.
Sink
~~~~
A sink's only purpose is to be a minimal, yet optimal, way to view the entries in a list.
libsink
^^^^^^^
C library that abstracts communicating with the server as a sink in a platform- and environment-independent way.
// vim: set syntax=asciidoc:
|