Pràctica: Videoconferència amb Jitsi Meet i Docker
Objectius
En aquesta pràctica aprendràs a:
- Configurar un servidor de videoconferència amb Jitsi Meet
- Entendre el funcionament de WebRTC per comunicacions P2P
- Configurar autenticació i moderació de sales
- Personalitzar la interfície i les opcions de Jitsi
- Treballar amb múltiples components (Prosody, Jicofo, JVB, Web)
Durada estimada
4-5 hores
Requisits previs
- Docker i Docker Compose instal·lats
- Coneixements bàsics de xarxes i protocols
- Webcam i micròfon funcionals
- Mínim 2 dispositius per provar les videoconferències
Introducció
Jitsi Meet és una solució de videoconferència de codi obert que permet:
- Videoconferències il·limitades sense límit de participants
- Compartició de pantalla i presentacions
- Xat integrat durant les conferències
- Gravació de sessions
- Qualitat adaptativa segons l'ample de banda
Components de Jitsi:
- Jitsi Meet (web): Interfície web d'usuari
- Jitsi Videobridge (JVB): Enrutador de vídeo/àudio WebRTC
- Jicofo: Component de control de conferències
- Prosody: Servidor XMPP per senyalització
WebRTC (Web Real-Time Communication) és l'estàndard que permet comunicacions d'àudio/vídeo P2P directament entre navegadors.
Part 1: Configuració del Servidor Jitsi Meet
Pas 1: Crear l'estructura de directoris
mkdir -p jitsi-NOMCOGNOM/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,.jigasi,.jibri}
cd jitsi-NOMCOGNOM
IMPORTANT: Substitueix NOMCOGNOM pel teu nom i cognom en minúscules sense espais (exemple: jitsi-fbarragan).
Pas 2: Crear el fitxer .env
Crea el fitxer .env amb les variables d'entorn:
# Configuració bàsica
COMPOSE_PROJECT_NAME=jitsi-NOMCOGNOM
# Configuració de xarxa
PUBLIC_URL=https://meet.NOMCOGNOM.local:8443
ENABLE_HTTP_REDIRECT=1
# Configuració d'autenticació (opcional, deixa-ho comentat inicialment)
#ENABLE_AUTH=1
#ENABLE_GUESTS=1
#AUTH_TYPE=internal
# Configuració de la sala
ENABLE_LOBBY=1
ENABLE_RECORDING=0
# Zona horària
TZ=Europe/Madrid
# Seguretat (IMPORTANT: canvia aquestes contrasenyes)
JICOFO_COMPONENT_SECRET=jicofosecret_NOMCOGNOM_2024
JICOFO_AUTH_PASSWORD=jicofopass_NOMCOGNOM_2024
JVB_AUTH_PASSWORD=jvbpass_NOMCOGNOM_2024
JIGASI_XMPP_PASSWORD=jigasipass_NOMCOGNOM_2024
JIBRI_RECORDER_PASSWORD=jibrirecorderpass_NOMCOGNOM_2024
JIBRI_XMPP_PASSWORD=jibripass_NOMCOGNOM_2024
# Configuració de resolució i qualitat
ENABLE_SIMULCAST=1
RESOLUTION=720
ENABLE_PREJOIN_PAGE=1
# Configuració de moderació
ENABLE_BREAKOUT_ROOMS=1
ENABLE_AV_MODERATION=1
Pas 3: Crear el docker-compose.yml
services:
# Frontend
web-NOMCOGNOM:
image: jitsi/web:stable-9258
container_name: jitsi-web-NOMCOGNOM
restart: unless-stopped
ports:
- '8000:80'
- '8443:443'
volumes:
- ./web:/config:Z
- ./web/crontabs:/var/spool/cron/crontabs:Z
- ./transcripts:/usr/share/jitsi-meet/transcripts:Z
environment:
- ENABLE_AUTH
- ENABLE_GUESTS
- ENABLE_LOBBY
- ENABLE_HTTP_REDIRECT
- ENABLE_TRANSCRIPTIONS
- DISABLE_HTTPS
- JICOFO_AUTH_USER
- LETSENCRYPT_DOMAIN
- LETSENCRYPT_EMAIL
- PUBLIC_URL
- XMPP_DOMAIN=meet-NOMCOGNOM.local
- XMPP_AUTH_DOMAIN=auth.meet-NOMCOGNOM.local
- XMPP_BOSH_URL_BASE=http://prosody-NOMCOGNOM.meet.NOMCOGNOM.local:5280
- XMPP_MUC_DOMAIN=muc.meet-NOMCOGNOM.local
- TZ
- ENABLE_PREJOIN_PAGE
- ENABLE_BREAKOUT_ROOMS
networks:
jitsi-net-NOMCOGNOM:
aliases:
- meet-NOMCOGNOM.local
# XMPP server
prosody-NOMCOGNOM:
image: jitsi/prosody:stable-9258
container_name: jitsi-prosody-NOMCOGNOM
restart: unless-stopped
expose:
- '5222'
- '5347'
- '5280'
volumes:
- ./prosody/config:/config:Z
- ./prosody/prosody-plugins-custom:/prosody-plugins-custom:Z
environment:
- AUTH_TYPE
- ENABLE_AUTH
- ENABLE_GUESTS
- ENABLE_LOBBY
- ENABLE_XMPP_WEBSOCKET
- GLOBAL_MODULES
- GLOBAL_CONFIG
- LDAP_URL
- LDAP_BASE
- XMPP_DOMAIN=meet-NOMCOGNOM.local
- XMPP_AUTH_DOMAIN=auth.meet.NOMCOGNOM.local
- XMPP_GUEST_DOMAIN=guest.meet.NOMCOGNOM.local
- XMPP_MUC_DOMAIN=muc.meet.NOMCOGNOM.local
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.NOMCOGNOM.local
- XMPP_MODULES
- XMPP_MUC_MODULES
- XMPP_INTERNAL_MUC_MODULES
- XMPP_RECORDER_DOMAIN=recorder.meet.NOMCOGNOM.local
- JICOFO_COMPONENT_SECRET
- JICOFO_AUTH_USER=focus
- JICOFO_AUTH_PASSWORD
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD
- JIGASI_XMPP_USER=jigasi
- JIGASI_XMPP_PASSWORD
- JIBRI_XMPP_USER=jibri
- JIBRI_XMPP_PASSWORD
- JIBRI_RECORDER_USER=recorder
- JIBRI_RECORDER_PASSWORD
- TZ
networks:
jitsi-net-NOMCOGNOM:
aliases:
- xmpp.meet.NOMCOGNOM.local
# Focus component
jicofo-NOMCOGNOM:
image: jitsi/jicofo:stable-9258
container_name: jitsi-jicofo-NOMCOGNOM
restart: unless-stopped
volumes:
- ./jicofo:/config:Z
environment:
- AUTH_TYPE
- ENABLE_AUTH
- XMPP_DOMAIN=meet.NOMCOGNOM.local
- XMPP_AUTH_DOMAIN=auth.meet.NOMCOGNOM.local
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.NOMCOGNOM.local
- XMPP_SERVER=prosody-NOMCOGNOM.meet.NOMCOGNOM.local
- JICOFO_COMPONENT_SECRET
- JICOFO_AUTH_USER=focus
- JICOFO_AUTH_PASSWORD
- JVB_BREWERY_MUC=jvbbrewery
- JIGASI_BREWERY_MUC=jigasibrewery
- JIBRI_BREWERY_MUC=jibribrewery
- JIBRI_PENDING_TIMEOUT
- TZ
- ENABLE_BREAKOUT_ROOMS
depends_on:
- prosody-NOMCOGNOM
networks:
- jitsi-net-NOMCOGNOM
# Video bridge
jvb-NOMCOGNOM:
image: jitsi/jvb:stable-9258
container_name: jitsi-jvb-NOMCOGNOM
restart: unless-stopped
ports:
- '10000:10000/udp'
volumes:
- ./jvb:/config:Z
environment:
- XMPP_AUTH_DOMAIN=auth.meet.NOMCOGNOM.local
- XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.NOMCOGNOM.local
- XMPP_SERVER=prosody-NOMCOGNOM.meet.NOMCOGNOM.local
- JVB_AUTH_USER=jvb
- JVB_AUTH_PASSWORD
- JVB_BREWERY_MUC=jvbbrewery
- JVB_PORT=10000
- JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443
- JVB_ENABLE_APIS=rest
- TZ
depends_on:
- prosody-NOMCOGNOM
networks:
- jitsi-net-NOMCOGNOM
networks:
jitsi-net-NOMCOGNOM:
driver: bridge
Pas 4: Iniciar el servidor
Verifica que tots els contenidors estan funcionant:
Hauries de veure 4 contenidors en execució:
- jitsi-web-NOMCOGNOM
- jitsi-prosody-NOMCOGNOM
- jitsi-jicofo-NOMCOGNOM
- jitsi-jvb-NOMCOGNOM
Pas 5: Accedir a la interfície web
Obre el navegador a: https://localhost:8443

NOTA: Accepta el certificat SSL autosignat (afegeix una excepció de seguretat).
Part 2: Crear i Personalitzar Sales
Pas 1: Crear la teva primera sala
- A la pàgina principal, introdueix el nom de la sala:
sala-NOMCOGNOM - Fes clic a GO o prem Enter
- Permet l'accés a la càmera i micròfon quan el navegador ho demani
- Configura el teu nom visible: VOSTRENOM VOSTRECOGNOM
Pas 2: Explorar les opcions de configuració
Durant la conferència, explora aquestes funcionalitats:
A. Configuració d'àudio/vídeo
- Botó de micròfon (activar/desactivar)
- Botó de càmera (activar/desactivar)
- Configuració → Dispositius → Selecciona micròfon/càmera
- Configuració → Qualitat de vídeo (alta, mitjana, baixa)
B. Compartició de contingut
- Botó Comparteix pantalla
- Selecciona: Pantalla completa, Finestra específica o Pestanya del navegador
- Prova compartir una presentació o document
C. Funcions de sala
- Xat: Envia missatges de text
- Aixecar la mà: Senyalització de participació
- Vista en graella: Canvia entre vista de parlant i graella
D. Opcions de moderador
- Silenciar tothom: Silencia tots els participants
- Expulsar participant: Treu algú de la sala
- Contrasenya de sala: Protegeix la sala amb contrasenya
Pas 3: Proves amb múltiples dispositius
- Uneix-te a la mateixa sala des d'un altre dispositiu (mòbil, tauleta, altre PC)
- Verifica que pots veure i escoltar tots els participants
- Prova compartir pantalla des d'un dispositiu i visualitzar des de l'altre
- Envia missatges pel xat i verifica que arriben a tots els participants
Part 3: Activar Autenticació (Opcional Avançat)
Pas 1: Modificar el fitxer .env
Descomenta aquestes línies al fitxer .env:
Pas 2: Reiniciar els contenidors
Pas 3: Crear un usuari moderador
docker exec -it jitsi-prosody-NOMCOGNOM prosodyctl --config /config/prosody.cfg.lua register VOSTRENOM meet.NOMCOGNOM.local CONTRASENYASEGURA
Exemple:
docker exec -it jitsi-prosody-fbarragan prosodyctl --config /config/prosody.cfg.lua register joan meet.fbarragan.local Joan2024!
Pas 4: Provar l'autenticació
- Obre una sala:
https://localhost:8443/sala-NOMCOGNOM - Hauries de veure una pantalla demanant autenticació
- Introdueix:
- Usuari: VOSTRENOM
- Contrasenya: CONTRASENYASEGURA
- Ara ets el moderador de la sala
- Els convidats poden unir-se sense autenticar-se però amb permisos limitats
Part 4: Personalització de la Interfície
Pas 1: Modificar el títol i descripció
Crea el fitxer web/interface_config.js dins del directori jitsi-NOMCOGNOM/web:
var interfaceConfig = {
APP_NAME: 'Videoconferència NOMCOGNOM',
DEFAULT_BACKGROUND: '#474747',
DEFAULT_LOGO_URL: 'images/watermark.svg',
DEFAULT_WELCOME_PAGE_LOGO_URL: 'images/watermark.svg',
DISPLAY_WELCOME_FOOTER: true,
GENERATE_ROOMNAMES_ON_WELCOME_PAGE: true,
HIDE_INVITE_MORE_HEADER: false,
JITSI_WATERMARK_LINK: 'https://jitsi.org',
PROVIDER_NAME: 'Institut Sa Palomera - VOSTRENOM VOSTRECOGNOM',
SHOW_JITSI_WATERMARK: false,
SHOW_WATERMARK_FOR_GUESTS: false,
TOOLBAR_BUTTONS: [
'microphone', 'camera', 'closedcaptions', 'desktop',
'fullscreen', 'fodeviceselection', 'hangup', 'chat',
'recording', 'livestreaming', 'etherpad', 'sharedvideo',
'settings', 'raisehand', 'videoquality', 'filmstrip',
'feedback', 'stats', 'shortcuts', 'tileview', 'download',
'help', 'mute-everyone'
],
};
Pas 2: Reiniciar el contenidor web
Part 5: Proves i Verificació
1. Verifica l'estat dels components
Consulta l'estat del Jitsi Videobridge:
Hauries de veure estadístiques JSON amb informació de:
- Nombre de conferències actives
- Nombre de participants
- Bitrate total
- Paquets enviats/rebuts
2. Prova de latència i qualitat
Durant una videoconferència, obre Configuració → Més → Estadístiques
Verifica:
- Frame rate: Ha de ser propera a 30 fps
- Resolution: Depèn de la teva configuració (720p per defecte)
- Packet loss: Ha de ser < 1%
- Bitrate: Varia segons el nombre de participants
3. Prova amb diferents navegadors
Verifica la compatibilitat amb:
- Chrome/Chromium (recomanat)
- Firefox
- Edge
- Safari (macOS/iOS)
4. Consulta els logs
docker logs jitsi-web-NOMCOGNOM
docker logs jitsi-prosody-NOMCOGNOM
docker logs jitsi-jicofo-NOMCOGNOM
docker logs jitsi-jvb-NOMCOGNOM
Qüestions
Qüestió 1: Protocols i Tecnologies
Completa la següent taula comparativa:
| Característica | Jitsi Meet | Zoom | Google Meet | Microsoft Teams |
|---|---|---|---|---|
| Tecnologia base (WebRTC, propietari) | ||||
| Codi obert | ||||
| Límit de participants (gratuït) | ||||
| Autohospedable | ||||
| Encriptació E2E |
Qüestió 2: Arquitectura de Components
Explica la funció de cada component de Jitsi Meet:
a) Jitsi Meet (web):
b) Jitsi Videobridge (JVB):
c) Jicofo:
d) Prosody:
e) Per què és necessari un servidor XMPP per a videoconferències basades en WebRTC?
Qüestió 3: Càlculs d'Amplada de Banda
Calcula l'amplada de banda necessària per:
a) Una videoconferència de 5 participants a 720p@30fps amb bitrate mitjà de 1,5 Mbps per participant. Quina amplada de banda total necessita el servidor?
b) Si tens 10 conferències simultànies amb una mitjana de 4 participants cadascuna, quina amplada de banda total necessita el servidor?
c) Quin seria l'ample de banda per participant en una conferència de 20 persones si el servidor té un enllaç de 100 Mbps?
Qüestió 4: WebRTC
Explica:
a) Què és WebRTC i quins són els seus 3 components principals (API)?
b) Diferència entre connexió P2P (peer-to-peer) i SFU (Selective Forwarding Unit). Quin model utilitza Jitsi?
c) Per què WebRTC necessita servidors STUN i TURN? Quan s'utilitza cadascun?
Lliurament
Captures de pantalla obligatòries
- docker ps mostrant els 4 contenidors Jitsi en execució amb el teu nom
- Pàgina d'inici de Jitsi (
https://localhost:8443) amb el títol personalitzat - Sala de conferència activa amb el teu nom visible i mínim 2 dispositius connectats
- Compartició de pantalla en funcionament
- Configuració → Més → Estadístiques mostrant frame rate, resolution, bitrate
- Xat de la sala amb missatges enviats des de diferents dispositius
- Logs del JVB (
docker logs jitsi-jvb-NOMCOGNOM) mostrant tràfic actiu - Estadístiques del Videobridge (output de
/colibri/stats)
Si has activat autenticació: 9. Pantalla de login demanant credencials 10. Creació d'usuari amb prosodyctl mostrant el teu nom
Fitxers a incloure
docker-compose.ymlpersonalitzat.envpersonalitzat (IMPORTANT: oculta les contrasenyes abans de lliurar)web/interface_config.jspersonalitzat (si l'has creat)
Document PDF
Crea un document que inclogui:
- Portada amb el teu nom complet i data
- Captures de pantalla amb el teu nom visible
- Fitxers de configuració (YAML, .env amb contrasenyes amagades)
- Respostes a les qüestions amb taules i càlculs detallats
- Reflexió final (200-300 paraules):
- Diferències entre Jitsi i altres plataformes (Zoom, Meet, Teams)
- Avantatges i desavantatges d'autohospedar videoconferències
- Problemes de latència o qualitat trobats
- Casos d'ús adequats per Jitsi Meet
- Millores o optimitzacions possibles
Criteris d'Avaluació
| Criteri | Puntuació |
|---|---|
| Servidor Jitsi Meet funcional amb 4 components | 2,5 punts |
| Sala de videoconferència operativa amb múltiples dispositius | 2,0 punts |
| Compartició de pantalla i xat funcionant | 1,0 punt |
| Personalització de la interfície (títol, nom) | 1,0 punt |
| Autenticació configurada correctament (opcional) | +0,5 punts (bonus) |
| Captures de pantalla completes i amb personalització | 1,5 punts |
| Respostes a qüestions correctes | 1,5 punts |
| Reflexió final ben argumentada | 0,5 punts |
| TOTAL | 10,0 punts |
Penalitzacions: - -2,0 punts si no hi ha personalització amb el nom de l'estudiant - -1,5 punts si només funciona amb 1 dispositiu (no proves amb múltiples participants) - -1,0 punt si no funciona la compartició de pantalla - -0,5 punts si falten captures d'estadístiques
Bonificacions: - +0,5 punts per autenticació funcional amb usuaris creats - +0,5 punts per personalització avançada (interface_config.js)
Recursos Addicionals
- Jitsi Meet Documentation
- Jitsi Docker Setup
- WebRTC Specification
- Prosody XMPP Server
- WebRTC for the Curious
Data de creació: Gener 2025 Autor: Curs M0375 - Serveis de Xarxa i Internet