% title $self->l('DOCUMENTATION'); %= include 'header' %= include 'public_toolbar'

Introduction

VROOM (short for Video ROOM) is a simple to use, web-based and opensource (MIT licence) video conferencing application. It's based on several other softwares, most notably the excellent SimpleWebRTC lib.

VROOM uses the latest WebRTC technologies to allow video conferencing through a web browser without any plugin. There are several more or less similar hosted solutions available (like talky.io, appear.in, vLine.com for example). Most of them are more polished than VROOM, but I've found none entirely opensource, so I started this project.

Features

VROOM implements the following features:

  • Video/audio conversations (no limit on the number of peers)
  • Text chat (and you can save history)
  • Screen sharing
  • Email invitations
  • Email notification when someone joins one of your rooms
  • Persistent/reserved rooms
  • Chairman functionnalities (mute/pause/kick other peers)
  • Grant chairman role to other peers
  • Password protected rooms (different passwords for access and chairman)
  • Music on hold (when you're alone in a room)
  • Can be optionaly integrated with Etherpad-Lite

VROOM is translated in French and English. You're welcome to submit patches or pull requests to enhance localization, or add new ones.

Install your own VROOM instance

The following guide will help you installing VROOM on your own server

Requirements

If you want to run your own server, you'll need the following components

  • Mojolicious 5 or better
  • A MySQL compatible server (MySQL or MariaDB)
  • A webserver supporting HTTPS and reverse proxying, including websocket reverse proxying (Apache can do this with mod_proxy_ws)
  • The following perl modules
    • Mojolicious::Plugin::Mail
    • Mojolicious::Plugin::Database
    • Crypt::SaltedHash
    • MIME::Base64
    • Etherpad::API
    • Session::Token
    • Config::Simple
    • Email::Valid
    • URI
    • Protocol::SocketIO::Handshake
    • Protocol::SocketIO::Message
It's also advised to run VROOM on a systemd powered distribution (simply because that's what I use and I include service units for VROOM). For the same reason, I recommend running Apache as webserver (others like Nginx probably work too, but I provide configuration sample only for Apache)

VROOM can probably with other DB engine (like PostgreSQL) with minor modifications. If you're interrested in adding support for other engines, you're welcome to help

While VROOM should run on any distro, it's only tested on CentOS 7 x86_64, so it's the recommended platform. Also, I provide packages for all dependencies in my repository, so it'll be much easier to install it this way. If you have it running on another system, please send me your notes so I can update this documentation.

Install on CentOS 7 x86_64

This guide assumes that you have installed a minimal CentOS 7 x86_64 system

Configure the required repositories

You need to configure both EPEL and FWS repo

cat <<'_EOF' > /etc/yum.repos.d/fws.repo
[fws]
enabled=1
baseurl=http://repo.firewall-services.com/centos/$releasever/
name=Firewall Services
gpgcheck=1
gpgkey=http://repo.firewall-services.com/RPM-GPG-KEY
enablegroups=0
 
[fws-testing]
enabled=0
baseurl=http://repo.firewall-services.com/centos-testing/$releasever/
name=Firewall Services Testing
gpgcheck=1
gpgkey=http://repo.firewall-services.com/RPM-GPG-KEY
enablegroups=0
_EOF
yum install epel-release

Install dependencies

The follwoing command will install everything required to run VROOM

yum install git tar wget httpd mod_ssl openssl mariadb-server \\
           'perl(Mojolicious)' 'perl(Mojolicious::Plugin::I18N)' 'perl(Mojolicious::Plugin::Mail)' \\
           'perl(Crypt::SaltedHash)' 'perl(Etherpad::API)' 'perl(LWP::Protocol::https)' \\
           'perl(Sesion::Token)' 'perl(Mojolicious::Plugin::Database)' 'perl(Email::Valid)' \\
           'perl(Config::Simple)' 'perl(Session::Token)' 'perl(URI)'

Clone the repository

Lets install VROOM in /opt/vroom

cd /opt
git clone https://github.com/dani/vroom.git

Database

A database will be used to store rooms configuration, you must enable the server.

systemctl enable mariadb.service
systemctl start mariadb.service
Now, create a new database for VROOM
mysql -uroot
CREATE DATABASE `vroom` CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON `vroom`.* TO 'vroom'@'localhost' IDENTIFIED BY 'MySuperPassw0rd';
FLUSH PRIVILEGES;

It's better to generate a long, random password here. Just write it somewhere, you'll need it later

Now that we have our MySQL database, we can create the tables

mysql -uroot vroom < /opt/vroom/docs/database/schema.mysql

Setup Apache

Two sample apache configurations are provided in the conf directory

  • httpd_alias.conf should work out of the box, VROOM will be available at https://yourservername/vroom
  • httpd_vhost.conf is an alternative which you can use if you prefer working with named virtualhost (but will require additional config adjustments, especially in ssl.conf, which is out of scope for this guide)
Copy the config you want in /etc/httpd/conf.d/

In either case, you might want to adjust the apache configuration

The admin interface of VROOM will be available on /vroom/admin (alias) or /admin (vhost) must be protected by your web server. VROOM provides no authentication at all. In the sample configuration, the access is restriucted to localhost, but you can change this to anything you want

You also have to make sure the mod_proxy_ws module is enabled, which is not the case by default on CentOS 7

echo "LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so" \\
 > /etc/httpd/conf.modules.d/00-proxy_ws.conf

Setup systemd units

Here, we'll copy the sample vroom.service unit so that systemd picks it up

cp /opt/vroom/docs/systemd/vroom.service /etc/systemd/system/
systemctl daemon-reload
systemctl enable vroom

Configure VROOM

Now, we just need to configure vroom itself. Just copy the sample conf file

cp /opt/vroom/conf/settings.ini.dist /opt/vroom/conf/settings.ini
And edit it to your need. settings.ini has plenty of comments, but here's an explanation of the different sections and settings

database

This section is where you define access to the database used by VROOM. The following settings are available

  • dsn: The Data Source Name for your database. For example dsn = 'DBI:mysql:database=vroom;host=localhost'. See perl DBI documentation if you want more information
  • user: This is the username for your database
  • password: The password for your database

signaling

This section is where you define your signaling server settings. This is because VROOM was using a modified SignalMaster as signaling server, which could run on a separate server. Now, the signaling server is directly included in VROOM daemon so this section might be removed in the future

  • uri: The uri to reach VROOM (/socket.io will be added to reach the SocketIO server)

turn

This section defines which STUN and TURN servers will be used by the ICE process. If you plan to use VROOM only on a local network, where each peer can connect to each others, you can just omit this part. But if you want VROOM to work from anywhere, you'll need use STUN and most likely TURN too.

  • stun_server: The STUN server to use. For example stun_server = 'stun:stun.l.google.com:19302'. This must be a full STUN URI as defined by rfc7064
  • turn_server: The TURN server to use (for now you can only define one, it should be possible to define several). For example turn_server = 'turns:my-turn-server.net:5349?transport=tcp'. This must be a full STUN URI as defined by rfc7065
  • turn_user and turn_password: To use your TURN server, you'll most likely require credentials. You can either enter them here. If you let this empty, VROOM assumes that you're using rfc5766-turn-server and will generate one user and password for each room. See the Configure rfc5766-turn-server section
  • realm: If you use rfc5766-turn-server with dynamic credentials, you must set here the realm configured in /etc/turnserver/turnserver.conf

video

This section is for video quality settings. the available settings are

  • frame_rate: Number of frames per seconds for webcam streams. A bigger number will provide a better quality stream but will also require more bandwidth and CPU on each peer. The default is 15 fps

email

This section is for emails sent by VROOM (invitations, notifications, feedback form etc...). The available settings are

  • from: The address used in the From field of emails sent by VROOM.
  • contact: The email address which will get feedback form submissions.
  • sendmail: The path to the sendmail compatible binary to use (default is /usr/bin/sendmail and will probably won'd need to be changed)

interface

This section controls the web interface. The available settings are

  • powered_by: will be displayed in the footer. You can put HTML code here.
  • template: The name of the template to use. Must be a directory under template. The default, and only tempalte provided is called default. But you can copy it and customize it to your taste
  • chrome_extension_id: This is the ID of the Chrome extension proposed to clients when trying to share screen for the first time (obviously, only for Chrome users). The reason this is configurable is because the extension requires the allowed websites to be listed. Two extensions are provided, the default (ecicdpoejfllflombfanbhfpgcimjddn) will work everywhere but allow to capture screen on any website, which can be a security risk. The other extension (lfkdfilifapafomlhaaihfdglamkmdme) only works on https://vroom.im. You can create your own extension which will only work for your site, and submit it to Google Chrome Store if you want.
  • demo: If enabled, a few more pages and elements will be displayed, like the documentation you're reading right now.

This section controls the cookie used for VROOM sessions. The available settings are

  • secret: A secret passphrase to sign cookies. Must be changed !!!
  • name: The name of the cookie. Default is vroom

rooms

This section controls rooms behavior. The available settings are

  • inactivity_timeout: The time (in minutes) after which a room without activity will be deleted
  • reserved_inactivity_timeout: The same, but for rooms which have been reserved (owner password set). You can set it to 0 if you do not want reserved room to expire
  • common_names: a comma separated list of names you don't want anyone to be able to reserve. Rooms with those names can be created, but not reserved. This is to prevent cybersquatting
  • max_members: This is the maximum number of peer able to be in a room at the same time. You can define a limit per room if you want. But the limit set here cannot be exceeded.

log

This section controls logging of the VROOM daemon. The following settings are available

  • level: Set the logging level. Can be one of debug, info, warn, error or fatal

etherpad

Controls Etherpad-Lite integration. The following settings are available

  • uri: The URI to reach your Etherpad Lite instance. This instance must share the same base domaine as VROOM because of the way sessions are created (Etherpad Lite sessions are created by VROOM directly and sent as a cookie to the clients)
  • api_key: The API key of your Etherpad-Lite instance. You can find it in the file APIKEY.txt at the root of your Etherpad Lite installation
  • base_domain: This is the common part of your domain between VROOM and Etherpad-Lite. For example, if you have VROOM running on https://vroom.example.net/ and Etherpad-Lite as https://pads.example.net, you'd put base_domain = 'example.net' here

daemon

Controls how VROOM daemon behaves. The following settings are available

  • listen_ip: This is the IP the daemon will listen on. Most of the time, you'll let 127.0.0.1 here as VROOM will be accessed through a reverse proxy
  • listen_port: The port VROOM daemon will bind to. Default is 8090. Just be sure to adjust your reverse proxy configuration if you change this.
  • backend: The backend used to run VROOM. Can be either morbo (recommended for developments) or hypnotoad (recommanded for production).
  • pid_file: Where to store the PID file of VROOM daemon (has no effect when using the morbo backend)

Customize

Music on hold

VROOM includes 5 different songs available as music on hold. If you want to add more, just drop your files in public/snd/moh. When joining a room, VROOM will randomly choose one file from this directory

Appearence

If you want to customize the look and feel of VROOM, you can create your own templates. To do so, just copy the existing ones

cp -a /opt/vroom/templates/default /opt/vroom/templates/my_template
Then edit /opt/vroom/conf/settings.ini and set template = 'my_template' Restart VROOM so the configuration change is applied
systemctl restart vroom.service
And you can start modifying your template.

As VROOM is still in early development, you'll have to closely follow how the default templates evolve and merge the changes in your own template

While working on your new template, it's recommanded to switch to the morbo backend as templates will be reloaded automatically after each modification

%= include 'js_common' %= include 'footer'