Calla was originally built to be an integration with Jitsi Meet. You'd setup a standard Jitsi Meet server and then write an app that connected to it as a wholly separate interface from Jitsi's standard interface.
Unfortunately, there were some major issues with this approach.
1) I used it for work, but last August changes in WebRTC broke Jitsi for a while and I had to scramble to stand up my own WebRTC TURN server to continue our operations.
2) Jitsi's lib-jitsi-meet was not very well documented (While there were docs on each function call, there wasn't much on flows for putting it all together, especially when it came to sequence of events involving joining rooms, listing users already in the room, etc.), and there were no official TypeScript .d.ts files for the project, so it made it hard to keep up with changes.
3) Performance was never that great. While Jitsi supported data channels, for some reason they were completely unreliable for anything more than 4 messages a second. I wasn't able to figure out why.
I had always intended Calla to be an audio and networking management library. It just got to be too much work to maintain Calla, especially considering most people didn't actually want Calla as a library but instead wanted more of a full app repo they could clone and minimally modify to make their own old-school-RPG-like meeting rooms. I only made the 2D RPG app to be an expedient demo, but I am personally more focused on VR apps (and actually one in particular at work).
As the creator of Calla, I would say that there is not much to be learned from Calla specifically.
The WebRTC portion was all implemented through Jitsi Meet, and I eventually grew to regret that direction. My current work uses just a CoTURN instance with a fully custom backend for managing multiplayer.
The user interface was only ever intended to be a demo, I didn't have any interest in running it as a FOSS project in its own right, and it while I would say it was certainly a competent implementation, it also wasn't anything ground-breaking in any way.
That basically leaves just the core audio graph management as anything that was valuable in the project. That part still lives on in my project at work, but considering I basically gave up on trying to run FOSS projects after some deep introspection on my experiences with running FOSS projects, I don't put much effort into documenting my code anymore. But if you want to see the audio graph management stuff, the latest version is here: https://github.com/capnmidnight/Juniper/tree/master/src/Juni....
Comments
Strange. I wanted to show app formerly called Caala to which I contributed but it disappeared from github. I wonder if this is because it became this.
Also - which JS library do you use to voice chat and video calls? I wanted to implement voice chat myself.
EDIT: it was just archived - https://github.com/capnmidnight/Calla
Hi there, I am capnmidnight on GitHub.
Calla was originally built to be an integration with Jitsi Meet. You'd setup a standard Jitsi Meet server and then write an app that connected to it as a wholly separate interface from Jitsi's standard interface.
Unfortunately, there were some major issues with this approach.
1) I used it for work, but last August changes in WebRTC broke Jitsi for a while and I had to scramble to stand up my own WebRTC TURN server to continue our operations.
2) Jitsi's lib-jitsi-meet was not very well documented (While there were docs on each function call, there wasn't much on flows for putting it all together, especially when it came to sequence of events involving joining rooms, listing users already in the room, etc.), and there were no official TypeScript .d.ts files for the project, so it made it hard to keep up with changes.
3) Performance was never that great. While Jitsi supported data channels, for some reason they were completely unreliable for anything more than 4 messages a second. I wasn't able to figure out why.
I had always intended Calla to be an audio and networking management library. It just got to be too much work to maintain Calla, especially considering most people didn't actually want Calla as a library but instead wanted more of a full app repo they could clone and minimally modify to make their own old-school-RPG-like meeting rooms. I only made the 2D RPG app to be an expedient demo, but I am personally more focused on VR apps (and actually one in particular at work).
Ah yes, flat.social has nothing to do with Calla but thanks for mentioning it, I'll have a look!
As per the JS library for audio/video - I have used Mediasoup.
As the creator of Calla, I would say that there is not much to be learned from Calla specifically.
The WebRTC portion was all implemented through Jitsi Meet, and I eventually grew to regret that direction. My current work uses just a CoTURN instance with a fully custom backend for managing multiplayer.
The user interface was only ever intended to be a demo, I didn't have any interest in running it as a FOSS project in its own right, and it while I would say it was certainly a competent implementation, it also wasn't anything ground-breaking in any way.
That basically leaves just the core audio graph management as anything that was valuable in the project. That part still lives on in my project at work, but considering I basically gave up on trying to run FOSS projects after some deep introspection on my experiences with running FOSS projects, I don't put much effort into documenting my code anymore. But if you want to see the audio graph management stuff, the latest version is here: https://github.com/capnmidnight/Juniper/tree/master/src/Juni....
The WebRTC system that I now use is largely this on the client (https://github.com/capnmidnight/Juniper/blob/master/src/Juni...) plus this on the server (https://github.com/capnmidnight/Juniper/tree/master/src/Juni..., which is a SignalR hub in an ASP.NET Core app, but should make the signaling flow clear). And then this code uses the client (https://github.com/capnmidnight/Juniper/blob/master/src/Juni...)