• Stars
    star
    604
  • Rank 73,666 (Top 2 %)
  • Language
    Kotlin
  • License
    Apache License 2.0
  • Created over 8 years ago
  • Updated 4 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Jitsi BRoadcasting Infrastructure

Jibri

JItsi BRoadcasting Infrastructure

What is Jibri

Jibri provides services for recording or streaming a Jitsi Meet conference.

It works by launching a Chrome instance rendered in a virtual framebuffer and capturing and encoding the output with ffmpeg. It is intended to be run on a separate machine (or a VM), with no other applications using the display or audio devices. Only one recording at a time is supported on a single jibri.

Installing Jibri

Installation notes

  • Jibri was built on Ubuntu 18.04 (Bionic), and has been tested with the pre-built kernel and extra kernel modules (linux-image-extra-virtual package). Any other distribution or kernel configuration MAY work but has not been tested.

Pre-requisites

ALSA and Loopback Device

  • First make sure the ALSA loopback module is available. The extra modules (including ALSA loopback) can be installed on Ubuntu 16.04 using package name linux-image-extra-virtual
  • Perform the following tasks as the root user
    • Set up the module to be loaded on boot: echo "snd_aloop" >> /etc/modules
    • Load the module into the running kernel: modprobe snd_aloop
    • Check to see that the module is already loaded: lsmod | grep snd_aloop
  • If the output shows the snd-aloop module loaded, then the ALSA loopback configuration step is complete.

Ffmpeg with X11 capture support

  • Jibri requires a relatively modern ffmpeg install with x11 capture compiled in. This comes by default in Ubuntu 16.04, by installing the ffmpeg package.
  • If building Jibri for Ubuntu 14.04 (trusty), the mc3man repo provides packages. They can be used by the following in Ubuntu 14.04:
sudo add-apt-repository ppa:mc3man/trusty-media
sudo apt-get update
sudo apt-get install ffmpeg

Google Chrome stable & Chromedriver

The latest Google Chrome stable build should be used. It may be able to be installed direclty via apt, but the manual instructions for installing it are as follows:

curl https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/google-chrome-keyring.gpg'
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/google-chrome-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
apt-get -y update
apt-get -y install google-chrome-stable

Add chrome managed policies file and set CommandLineFlagSecurityWarningsEnabled to false. It will hide warnings in Chrome. You can set it like so:

mkdir -p /etc/opt/chrome/policies/managed
echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >>/etc/opt/chrome/policies/managed/managed_policies.json

Chromedriver is also required and can be installed like so:

CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
unzip ~/chromedriver_linux64.zip -d ~/
rm ~/chromedriver_linux64.zip
sudo mv -f ~/chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod 0755 /usr/local/bin/chromedriver

Miscellaneous required tools

See the debian control file for the dependencies that are required. These can be installed using the following: sudo apt-get install default-jre-headless ffmpeg curl alsa-utils icewm xdotool xserver-xorg-video-dummy ruby-hocon

Jitsi Debian Repository

The Jibri packages can be found in the stable repository on downloads.jitsi.org. First install the Jitsi repository key onto your system:

curl https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'

Create a sources.list.d file with the repository:

echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list > /dev/null

Update your package list:

sudo apt-get update

Install the latest jibri

sudo apt-get install jibri

User, group

  • Jibri is currently meant to be run as a regular system user. This example creatively uses username 'jibri' and group name 'jibri', but any user will do. This has not been tested with the root user.
  • Ensure that the jibri user is in the correct groups to make full access of the audio and video devices. The example jibri account in Ubuntu 16.04 are: "adm","audio","video","plugdev".
sudo usermod -aG adm,audio,video,plugdev jibri

Config files

  • Edit the jibri.conf file (installed to /etc/jitsi/jibri/jibri.conf by default) appropriately. You can look at reference.conf for the default values and an example of how to set up jibri.conf. Only override the values you want to change from their defaults in jibri.conf.
jibri {
    .....
    api {
        xmpp {
            environments = [
                {
                    name = "yourdomain.com"
                    xmpp-server-hosts = ["1.2.3.4"],
                    xmpp-domain = "yourdomain.com"
                    control-login {
                        domain = "auth.yourdomain.com"
                        username = "jibri"
                        password = "jibriauthpass"
                        port = 5222
                    }
                    control-muc {
                        domain = "internal.auth.yourdomain.com"
                        room-name = "JibriBrewery"
                        nickname = "myjibri-1-2-3-4"
                    }
                    call-login {
                        domain = "recorder.yourdomain.com"
                        username = "recorder"
                        password = "jibrirecorderpass"
                    }
                    strip-from-room-domain = "conference."
                    trust-all-xmpp-certs = true
                    usage-timeout = 0
                }
            ]
        }
    }
    .....
}

Logging

By default, Jibri logs to /var/log/jitsi/jibri. If you don't install via the debian package, you'll need to make sure this directory exists (or change the location to which Jibri logs by editing the log config

Configuring a Jitsi Meet environment for Jibri

Jibri requires some settings to be enabled within a Jitsi Meet configuration. These changes include virtualhosts and accounts in Prosody, settings for the jitsi meet web (within config.js) as well as jicofo.conf.

Prosody

Create the internal MUC component entry. This is required so that the jibri clients can be discovered by Jicofo in a MUC that's not externally accessible by jitsi meet users. Add the following in /etc/prosody/prosody.cfg.lua:

-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.yourdomain.com" "muc"
    modules_enabled = {
      "ping";
    }
    -- storage should be "none" for prosody 0.10 and "memory" for prosody 0.11
    storage = "memory"
    muc_room_cache_size = 1000

Create the recorder virtual host entry, to hold the user account for the jibri chrome session. This is used to restrict only authenticated jibri chrome sessions to be hidden participants in the conference being recordered. Add the following in /etc/prosody/prosody.cfg.lua:

VirtualHost "recorder.yourdomain.com"
  modules_enabled = {
    "ping";
  }
  authentication = "internal_plain"

Setup the two accounts jibri will use.

prosodyctl register jibri auth.yourdomain.com jibriauthpass
prosodyctl register recorder recorder.yourdomain.com jibrirecorderpass

The first account is the one Jibri will use to log into the control MUC (where Jibri will send its status and await commands). The second account is the one Jibri will use as a client in selenium when it joins the call so that it can be treated in a special way by the Jitsi Meet web UI.

Jicofo

Edit /etc/jitsi/jicofo/jicofo.conf, set the appropriate MUC to look for the Jibri Controllers. This should be the same MUC as is referenced in jibri's config.json file. Restart Jicofo after setting this property. It's also suggested to set the pending-timeout to 90 seconds, to allow the Jibri some time to start up before being marked as failed.

jicofo {
  ...
  jibri {
    brewery-jid = "[email protected]"
    pending-timeout = 90 seconds
  }
  ...
}

Jitsi Meet

Edit the /etc/jitsi/meet/yourdomain-config.js file, add/set the following properties:

fileRecordingsEnabled: true, // If you want to enable file recording
liveStreamingEnabled: true, // If you want to enable live streaming
hiddenDomain: 'recorder.yourdomain.com',

Also make sure that in your interface config (/usr/share/jitsi-meet/interface_config.js by default), the TOOLBAR_BUTTONS array contains the recording value if you want to show the file recording button and the livestreaming value if you want to show the live streaming button.

Once recording is enabled in yourdomain-config.js, the recording button will become available in the user interface. However, until a valid jibri is seen by Jicofo, the mesage "Recording currently unavailable" will be displayed when it is pressed. Once a jibri connects successfully, the user will instead be prompted to enter a stream key.

Note: Make sure to update Jibri's config.json appropriately to match any config done above.

Start Jibri

Once you have configured config.json, start the jibri service:

sudo systemctl restart jibri

More Repositories

1

jitsi-meet

Jitsi Meet - Secure, Simple and Scalable Video Conferences that you use as a standalone app or embed in your web application.
TypeScript
20,307
star
2

jitsi

Jitsi is an audio/video and chat communicator that supports protocols such as SIP, XMPP/Jabber, IRC and many other useful features.
Java
3,946
star
3

docker-jitsi-meet

Jitsi Meet on Docker
Lua
3,038
star
4

jitsi-videobridge

Jitsi Videobridge is a WebRTC compatible video router or SFU that lets build highly scalable video conferencing infrastructure (i.e., up to hundreds of conferences per server).
Kotlin
2,761
star
5

jitsi-meet-electron

Jitsi Meet desktop application powered by :electron:
JavaScript
1,495
star
6

lib-jitsi-meet

A low-level JS video API that allows adding a completely custom video experience to web apps.
JavaScript
1,329
star
7

libjitsi

Advanced Java media library for secure real-time audio/video communication.
Java
616
star
8

jiwer

Evaluate your speech-to-text system with similarity measures such as word error rate (WER)
Python
594
star
9

jigasi

Jigasi: a server-side application acting as a gateway to Jitsi Meet conferences. Currently allows regular SIP clients to join meetings and provides transcription capabilities.
Java
485
star
10

ice4j

A Java implementation of the ICE protocol
Java
436
star
11

jitsi-android

Jitsi for Android is an Android port of the Jitsi project: The most feature-rich communicator with support for encrypted audio/video, chat and presence over SIP and XMPP
Java
413
star
12

jicofo

JItsi COnference FOcus is a server side focus component used in Jitsi Meet conferences.
Kotlin
316
star
13

jitsi-meet-sdk-samples

Jitsi Meet mobile SDK examples (Android, iOS and React Native)
Swift
276
star
14

handbook

The Jitsi Handbook
JavaScript
186
star
15

jitsi-meet-torture

Java
161
star
16

turnserver

Open-source TURN server implementation.
Java
154
star
17

jidesha

A Chrome extension for Calendar integrations for Jitsi Meet
JavaScript
134
star
18

rnnoise-wasm

rnnoise noise suppression library as a WASM module
Shell
121
star
19

webrtc

WebRTC mirror for building react-native-webrtc
Python
94
star
20

jitsi-meet-ios-sdk-releases

Jitsi Meet iOS SDK binaries
Objective-C
81
star
21

jitsi-meet-electron-sdk

Jitsi Meet SDK for Electron
JavaScript
79
star
22

jitsi-meet-release-notes

Release notes for Jitsi Meet: the web frontend, mobile apps and mobile SDKs
78
star
23

jitsi-meet-spot

Physical meetings rooms, reimagined.
JavaScript
71
star
24

sdp-interop

An npm module that converts a Unified Plan SDP to Plan B and vice versa.
JavaScript
66
star
25

jitsi-meet-react-sdk

React SDK for Jitsi Meet
TypeScript
65
star
26

jitsi-maven-repository

64
star
27

jitsi-hammer

A traffic generator for Jitsi Videobridge
Java
61
star
28

gsoc-ideas

Google Summer of Code ideas
59
star
29

jitsi-webrtc-vad-wrapper

A java wrapper around the WebRTC Voice Activity Detection library
Java
55
star
30

jirecon

A Standalone recording container for Jitsi Videobridge conferences that would allow us to run a video recorder as a separat MUC participant.
Java
47
star
31

jitsi-meet-flutter-sdk

Jitsi Meet plugin for Flutter
Dart
41
star
32

android-webrtc

Java
38
star
33

jitsi-media-transform

37
star
34

js-utils

Utilities for Jitsi JS projects
JavaScript
32
star
35

sdp-simulcast

An npm module that enables the native WebRTC simulcast support in Chrome
JavaScript
31
star
36

jitsi-meet-react

We merged this repository into https://github.com/jitsi/jitsi-meet in an ongoing effort to consolidate our Web and mobile efforts. We henceforth consider this repository "read-only". Please navigate to https://github.com/jitsi/jitsi-meet.
JavaScript
31
star
37

jitsi-autoscaler

Jitsi Autoscaler microservice
TypeScript
30
star
38

otr4j

Off-The-Record messaging encryption written in pure Java
Java
29
star
39

jitsi-slack

Go
26
star
40

jitsi-srtp

SRTP implementation for Jitsi
Java
25
star
41

jitsi-rtp

RTP parsing
24
star
42

skynet

AI core services for Jitsi
Python
23
star
43

moderated-meetings

Jitsi Moderated Meetings microservice
Java
22
star
44

jitsi-meet-vue-sdk

Vue SDK for Jitsi Meet (built during GSoC 2022)
TypeScript
21
star
45

jitsi-upload-integrations

Tools for integration of JItsi Meet and associated backend tools to 3rd party APIs such as Dropbox
Shell
19
star
46

jitsi-utils

A set of basic Java/Kotlin utilities used in Jitsi projects.
Java
19
star
47

excalidraw-backend

Excalidraw collaboration backend for Jitsi
TypeScript
18
star
48

jicoco

Jitsi Common Components
Kotlin
18
star
49

luajwtjitsi

JWT tokens for Lua
Lua
18
star
50

fmj

Freedom for Media in Java - Git Mirror
Java
18
star
51

jitsi-meet-debian-meta

Jitsi Meet meta debian package
Shell
18
star
52

calendar-addon

Calendar G Suite add-on
JavaScript
17
star
53

jitsi-auth-portal

Authentication backend for Jitsi Meet
Go
17
star
54

Sphinx4-HTTP-server

HTTP speech-to-text server using Sphinx4
Java
16
star
55

jitsi-videobridge-openfire-plugin

Java
15
star
56

jitsi-xmpp-extensions

Common library holding all jitsi specific smack xmpp extensions.
Java
15
star
57

bccontrib

Skein/Threefish/Fortuna implementations for ZRTP4J used by Jitsi
Java
14
star
58

jitsi-meet-logger

JavaScript
12
star
59

security-advisories

Security Advisories for the Jitsi projects
12
star
60

jitsi-videobridge-permo

Jitsi-Videobridge Performance Monitoring
Shell
10
star
61

infra-configuration

Scripts for configuration jitsi services
Shell
10
star
62

infra-provisioning

Scripts for provisioning cloud resources for jitsi services
Shell
9
star
63

jitsi-android-osgi

Java
8
star
64

portaudio

PortAudio fork with hotplug capabilities as used in libjitsi; to contribute please do so at https://github.com/portaudio/portaudio.
C
8
star
65

jibri-queue

Implements user queues for Jibri.
TypeScript
8
star
66

jigmi

JItsi Generic Monitoring Infrastructure
JavaScript
8
star
67

libsrc

Source code snapshots for all external dependencies and libraries used by Jitsi.
7
star
68

jitsi-sctp

Java
6
star
69

jitsi-lgpl-dependencies

Submodule of libjitsi that encapsulates references to external LGPL licensed libraries.
C
6
star
70

eslint-config-jitsi

jitsi eslint config
JavaScript
6
star
71

jxs

JavaScript
6
star
72

jipopro

Java
5
star
73

jsocks

Java SOCKS Proxy
Java
5
star
74

jitsi-videobridge-groovysh

A Groovy Shell for the Jitsi Videobridge
Java
4
star
75

growl4j

the OpenSource Java Solution for using Growl
Objective-C
4
star
76

tpl

Simple templating from environment variables
Go
4
star
77

node-ibeacons

iBeacons emitter for Node
Objective-C++
4
star
78

react-native-olm

C++
4
star
79

jitsi-autoscaler-sidecar

Sidecar service for jitsi-autoscaler
TypeScript
4
star
80

ljm-jaas-example

lib-jitsi-meet example app for JaaS customers
JavaScript
4
star
81

snap-jitsi-meet

Jitsi Meet snap support
3
star
82

token-generator

Token Generator for all occasions
TypeScript
3
star
83

jitsi-stats

Jitsi stats - wrapper around callstats.java library
Java
3
star
84

jitsi-desktop-site

HTML
3
star
85

jitsi-meet-load-test

JavaScript
3
star
86

megolm.js

Megolm cryptographic ratchet, in JavaScript
TypeScript
3
star
87

signal-sidecar

report aggregated health information from a jitsi signal node
TypeScript
3
star
88

libjitsi-protocol

3
star
89

derfc4571ify

A little utility to transform pcap files to facilitate debugging.
JavaScript
3
star
90

jitsi-psnr

Jitsi Video Quality Analyzer
Python
3
star
91

jiloin

Jitsi Logging Interface
JavaScript
3
star
92

smack_3_2_2

Java
3
star
93

jitsi-metaconfig

Kotlin
3
star
94

jitsi-meet-redux

A combination of utilities for Redux used in most Redux-based jitsi apps
JavaScript
3
star
95

jiconop

Jitsi Connection Optimization
JavaScript
3
star
96

ljm-getting-started

Getting started with lib-jitsi-meet and JaaS
JavaScript
3
star
97

elgato-webhid-jaas-demo

Custom meeting controls with the JaaS iframe API + Elgato Stream Deck!
JavaScript
3
star
98

spot-electron-sdk

TypeScript
2
star
99

jvb-dashboard

Kotlin
2
star
100

rtc-visualizer

A server & client used to visualize data from RTCStats server
JavaScript
2
star