1
Fork 0
mirror of https://github.com/jech/galene.git synced 2024-12-27 17:55:47 +01:00
galene/README

181 lines
6.5 KiB
Text
Raw Normal View History

2021-12-01 23:42:10 +01:00
Galene is a videoconferencing server that is easy to deploy and requires
moderate server resources. It is described at <https://galene.org>.
2020-05-29 17:49:23 +02:00
# Installation
2021-08-06 16:59:46 +02:00
See the file INSTALL in this directory for installation instructions.
2020-05-29 17:49:23 +02:00
2021-05-10 23:24:18 +02:00
2021-01-08 15:36:23 +01:00
# Usage
## Locations
2020-05-31 23:16:08 +02:00
There is a landing page at the root of the server. It contains a form
for typing the name of a group, and a clickable list of public groups.
Groups are available under `/group/groupname`. You may share this URL
with others, there is no need to go through the landing page.
Recordings can be accessed under `/recordings/groupname`. This is only
available to the administrator of the group.
Some statistics are available under `/stats.json`, with a human-readable
version at `/stats.html`. This is only available to the server administrator.
2020-05-31 23:16:08 +02:00
2021-05-10 23:24:18 +02:00
2021-01-08 15:36:23 +01:00
## Side menu
There is a menu on the right of the user interface. This allows choosing
the camera and microphone and setting the video throughput. The
*Blackboard mode* checkbox increases resolution and sacrifices framerate
in favour of image quality. The *Play local file* dialog allows streaming
a video from a local file.
2020-05-31 23:16:08 +02:00
2021-05-10 23:24:18 +02:00
2021-01-08 15:36:23 +01:00
## Commands
Typing a line starting with a slash `/` in the chat dialogue causes
a command to be sent to the server. Type `/help` to get the list of
available commands; the output depends on whether you are an operator or
not.
2020-05-29 17:49:23 +02:00
# The global configuration file
The server may be configured in the JSON file `data/config.json`. This
file may look as follows:
{
"canonicalHost": "galene.example.org",
"admin":[{"username":"root","password":"secret"}]
}
The fields are as follows:
- `canonicalHost`: the canonical name of the host running the server;
- `admin` defines the users allowed to look at the `/stats.html` file; it
has the same syntax as user definitions in groups (see below).
2021-08-06 16:59:46 +02:00
# Group definitions
2021-01-08 15:36:23 +01:00
Groups are defined by files in the `./groups` directory (this may be
configured by the `-groups` command-line option, try `./galene -help`).
The definition for the group called *groupname* is in the file
2021-01-26 22:59:19 +01:00
`groups/groupname.json`; it does not contain the group name, which makes
2021-01-08 15:36:23 +01:00
it easy to copy or link group definitions. You may use subdirectories:
a file `groups/teaching/networking.json` defines a group called
2021-05-22 16:58:09 +02:00
*teaching/networking*.
2021-01-08 15:36:23 +01:00
2021-08-06 16:59:46 +02:00
A typical group definition file looks like this:
{
"op":[{"username":"jch","password":"1234"}],
"presenter":[{}]
"allow-recording": true,
"allow-subgroups": true
}
This defines a group with the operator (administrator) username *jch* and
password *1234*, empty username and password for presenters (ordinary
users with the right to enable their camera and microphone). The
`allow-recording` entry says that the operator is allowed to record videos
to disk, and the `allow-subgroups` entry says that subgroups will be
created automatically.
More precisely, every group definition file contains a single JSON
directory (a list of entries between `{' and `}'). All fields are
2021-01-26 22:59:19 +01:00
optional, but unless you specify at least one user definition (`op`,
`presenter`, or `other`), nobody will be able to join the group. The
following fields are allowed:
2020-05-29 17:49:23 +02:00
- `op`, `presenter`, `other`: each of these is an array of user
definitions (see below) and specifies the users allowed to connect
respectively with operator privileges, with presenter privileges, and
as passive listeners;
2020-05-30 01:18:00 +02:00
- `public`: if true, then the group is visible on the landing page;
- `displayName`: a human-friendly version of the group name;
2020-09-24 22:03:41 +02:00
- `description`: a human-readable description of the group; this is
displayed on the landing page for public groups;
- `contact`: a human-readable contact for this group, such as an e-mail
address;
- `comment`: a human-readable string;
2020-05-29 17:49:23 +02:00
- `max-clients`: the maximum number of clients that may join the group at
a time;
2020-10-08 14:38:33 +02:00
- `max-history-age`: the time, in seconds, during which chat history is
kept (default 14400, i.e. 4 hours);
2020-05-30 01:18:00 +02:00
- `allow-recording`: if true, then recording is allowed in this group;
2021-01-08 15:36:23 +01:00
- `allow-anonymous`: if true, then users may connect with an empty username;
2020-11-22 19:54:54 +01:00
- `allow-subgroups`: if true, then subgroups of the form `group/subgroup`
2021-01-08 15:36:23 +01:00
are automatically created when first accessed;
2021-01-14 03:56:37 +01:00
- `autolock`: if true, the group will start locked and become locked
whenever there are no clients with operator privileges;
2021-01-17 21:29:07 +01:00
- `autokick`: if true, all clients will be kicked out whenever there are
2021-01-17 21:52:26 +01:00
no clients with operator privileges; this is not recommended, prefer
the `autolock` option instead;
2020-09-10 13:55:57 +02:00
- `redirect`: if set, then attempts to join the group will be redirected
2021-01-08 15:36:23 +01:00
to the given URL; most other fields are ignored in this case;
- `codecs`: this is a list of codecs allowed in this group. The default
2021-01-08 15:36:23 +01:00
is `["vp8", "opus"]`.
Supported video codecs include:
- `"vp8"` (compatible with all supported browsers);
2021-04-25 00:09:49 +02:00
- `"vp9"` (better video quality, but incompatible with Safari);
- `"av1"` (even better video quality, only supported by some browsers,
2021-07-30 13:55:04 +02:00
recording is not supported, SVC is not supported);
2021-07-30 16:02:36 +02:00
- `"h264"` (incompatible with Debian and with some Android devices, SVC
2021-07-30 13:55:04 +02:00
is not supported).
2021-01-08 15:36:23 +01:00
Supported audio codecs include `"opus"`, `"g722"`, `"pcmu"` and `"pcma"`.
2021-07-30 13:55:04 +02:00
Only Opus can be recorded to disk. There is no good reason to use
anything except Opus.
2020-05-29 17:49:23 +02:00
A user definition is a dictionary with the following fields:
- `username`: the username of the user; if omitted, any username is
allowed;
2020-11-29 14:26:42 +01:00
- `password`: if omitted, then no password is required. Otherwise, this
can either be a string, specifying a plain text password, or
2020-12-06 19:43:17 +01:00
a dictionary generated by the `galene-password-generator` utility.
2020-05-29 17:49:23 +02:00
2020-11-29 14:26:42 +01:00
For example,
2020-05-29 17:49:23 +02:00
2021-01-08 15:36:23 +01:00
{"username": "jch", "password": "1234"}
specifies user *jch* with password *1234*, while
{"password": "1234"}
2020-05-29 17:49:23 +02:00
2021-01-08 15:36:23 +01:00
specifies that any (non-empty) username will do, and
2020-05-29 17:49:23 +02:00
2021-01-08 15:36:23 +01:00
{}
2020-05-29 17:49:23 +02:00
2021-01-08 15:36:23 +01:00
allows any (non-empty) username with any password.
If you don't wish to store cleartext passwords on the server, you may
generate hashed password with the `galene-password-generator` utility. A
user entry with a hashed password looks like this:
2020-05-29 17:49:23 +02:00
2020-11-29 14:26:42 +01:00
{
"username": "jch",
"password": {
"type": "pbkdf2",
"hash": "sha-256",
"key": "f591c35604e6aef572851d9c3543c812566b032b6dc083c81edd15cc24449913",
"salt": "92bff2ace56fe38f",
"iterations": 4096
}
}
2020-05-29 17:49:23 +02:00
2021-05-10 23:24:18 +02:00
2021-01-24 16:57:26 +01:00
# Further information
Galène's web page is at <https://galene.org>.
2021-08-02 02:50:29 +02:00
Answers to common questions and issues are at <https://galene.org/faq.html>.
2021-01-24 16:57:26 +01:00
2021-05-10 23:24:18 +02:00
2021-01-18 20:24:52 +01:00
-- Juliusz Chroboczek <https://www.irif.fr/~jch/>