1
Fork 0
The Galène videoconference server
Go to file
Juliusz Chroboczek 0a2c4eb381 Implement recording. 2020-05-30 03:26:05 +02:00
estimator Implement rate estimation. 2020-05-03 11:06:08 +02:00
jitter Include jitter and delay in receiver reports. 2020-05-03 11:06:08 +02:00
mono Move monotonic time to separate package, use microseconds. 2020-05-03 11:06:08 +02:00
packetcache Implement packagecache.GetAt. 2020-05-20 23:41:29 +02:00
static Implement recording. 2020-05-30 03:26:05 +02:00
.gitignore Add .gitignore. 2020-04-30 19:13:32 +02:00
README Complete documentation. 2020-05-29 17:49:23 +02:00
conn.go Rename client to webClient. 2020-05-30 03:26:05 +02:00
disk.go Implement recording. 2020-05-30 03:26:05 +02:00
go.mod Implement disk tracks. 2020-05-30 03:26:05 +02:00
go.sum Implement disk tracks. 2020-05-30 03:26:05 +02:00
group.go Implement recording. 2020-05-30 03:26:05 +02:00
sfu.go Implement disk tracks. 2020-05-30 03:26:05 +02:00
webclient.go Implement recording. 2020-05-30 03:26:05 +02:00

README

# Installation

Build the server binary:

    CGO_ENABLED=0 go build -ldflags='-s -w'

Create a server certificate:

    mkdir data
    openssl req -newkey rsa:2048 -nodes -keyout data/key.pem -x509 -days 365 -out data/cert.pem

Set the server administrator's username and password (optional):

    echo 'god:topsecret' > data/passwd

Configure the list of STUN and TURN servers (optional):

    vi static/ice-servers.json

Set up a group

    mkdir groups
    vi groups/public.json

    {
      "public":true,
      "op":[{"username":"jch","password":"1234"}],
      "presenter":[{}],
      "max-users":100
    }

Copy the necessary files to your server:

    rsync -a sfu static data groups server.example.org:/home/sfu/

Run the server binary:

    ssh server.example.org
    cd /home/sfu/
    nohup ./sfu &


# Group definitions

Groups are defined by files in the directory defined by the `-groups`
command-line option, one per group.  The group definition file does not
contain the name of the group -- that makes it possible to set up a new
group just by copying a template file.

The group definition file contains a JSON directory with the following
fields, all of which are optional.

 - `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;
 - `public`: if set to true, then the group is visible on the landing page;
 - `max-clients`: the maximum number of clients that may join the group at
   a time;
 - `allow-anonymous`: if set to true, then users may connect with an empty
   username; this is not recommended, since anonymous users are not
   allowed to participate in the chat.
   
A user definition is a dictionary with the following fields:

 - `username`: the username of the user; if omitted, any username is
   allowed;
 - `password`: the password of the user; if omitted, then any password
   (including the empty paassword) is allowed.
   
For example

    {"username":"jch","password":"topsecret"}
    
specifies user *jch* with password *topsecret*, while

    {"password":"topsecret"}
    
specifies that any username will do.  The empty dictionary

    {}
    
specifies that any username can connect, and that password are not
verified.


# Commands

Typing a line starting with a slash `/` in the chat dialogue causes
a command to be sent to the server.  The following commands are available
to all users:

 - `/me text`: sends a chat message starting with the sender's username;
 - `/leave`: equivalent to clicking the *Disconnect* button.
 
The following commands are only available to users with operator
privileges:

 - `/clear`: clears the chat history for all users;
 - `/lock`: prevents any new users from connecting to the group unless
   they have operator privileges;
 - `/unlock`: reverts the effect of `/lock`;
 - `/op user`: gives operator privileges to a user;
 - `/unop user`: takes away operator privileges;
 - `/present user`: gives presenter privileges to a user;
 - `/unpresent user`: takes away presenter privileges from a user and
   forcibly closes any presentations from that user that may be taking place;
 - `/kick user`: forcibly disconnects a user from the group.

--- Juliusz Chroboczek <https://www.irif.fr/~jch/>