Virtual Meetups through Jitsi
A wrapper library for Jitsi Meet that adds audio spatialization, to be able to create virtual meeting rooms.
Even when it works, teleconferencing still kind of sucks. Only one person can realistically talk at any one time. This is fine for people giving presentations, but in real meetings, people speak over and around each other, or pair off into smaller subgroups, still being able to overhear the larger group.
Calla adds a small, RPG-style map to the Jitsi meeting view. It gives you an avatar to walk around the room. Users choose where to sit in relation to other users. Users very close to you are set to full volume. Users a little far away have their volume scaled down accordingly. Users too far away to care about are rendered with zero volume.
NOTE: This project is currently going through an overhaul in how it is setup. In the future, Calla will be just the library for interfacing with Jitsi Meet and spatializing its audio. The application currently visible on calla.chat will become a separate project.
index.html
scripts to point to your Jitsi Meet serverindex.html
to change/remove the link(s) to this repository and/or my Twitter profileMake sure you keep the distinction between your Jitsi installation and your Calla installation clear. You can conceivably run them on the same server, but I won't be digging into customizing a Jitsi installation enough to figure that out, so my setup has them on separate servers.
Set up Jitsi Meet using docker-compose: Jitsi Self-Hosting Guide - Docker.
Allow CORS access by adding the following two lines to the top of ${CONFIG}/prosody/config/conf.d/jitsi-meet.cfg.lua
(you may need to start jitsi once to generate the file):
consider_bosh_secure = true
cross_domain_bosh = true
git clone
this repository into the Calla folder under the same ${CONFIG}
directory as jitsi.
Edit the jitsi docker-compose.yml
to add the following service section:
services:
# Calla
calla:
image: nginx:alpine
volumes:
- ${CONFIG}/Calla/js:/usr/share/nginx/html
command: sh /usr/share/nginx/html/entrypoint.sh
Add additional environment variables as necessary:
environment:
- JITSI_HOST=jitsi.example.com
- JVB_HOST=jitsi.meet
- JVB_MUC=muc.jitsi.meet
jitsi.<domain>
, where calla is served at <domain>
jitsi.meet
; this should be the name of the internal docker network you used in your docker-compose.yml
muc.${JVB_HOST}
Add any additional reverse proxy configurations.
Start Jitsi and Calla: $ docker-compose up -d
First, please read the Conduct Policy.
If you think you can be a polite person in accordance with the Conduct Policy, I'd be more than happy to add anyone who asks as a contributor. Just email me your profile info and a brief description of what you'd like to work on.
Oh man, let's go nuts! I would love to see a wide variety of tilesets for rooms and avatars. Maybe customizable clothing and character features.
.tmx
file to <Calla-proj>\data\tilemaps\<room-name>.tmx
..tsx
file to <Calla-proj>\data\tilesets\<tileset-name>\<tileset-name>.tsx
.The QA team is the software development team's best friend. Testing releases and filing issues is a huge amount of important work.
IDK, I planned on just hacking this together as I went, but I will probaby write some notes on whatever I've done along they way. Let me know if anything is particularly unclear and I'll write something about it.
I'm pretty happy with how the client is working right now, but anyone is free to self-service add features. But check the Issues nonetheless.
I'm currently running a VM on Azure with 2 virtual CPUs and 4 GiB of RAM. Operating System is Ubuntu 18.04. This will cost me about $100/mo.
I set the server up using the Jitsi quick-start instructions (Actually, I followed This video on YouTube, but the directions are largely the same, I just found the video nice to see what to expect for results from each command).
There's no backend for Calla. All communication goes through Jitsi, even the data specific to the "game" is serialized through Jitsi. Eventually, I'd like to setup a backend, but for the basics of spatializing Jitsi, it's not necessary.