powered by Jive Software

OfMeet Video conferencing application based on jitmeet

After working with the JitMeet application developed by Philipp Hancke and the Jitsi Team for a few weeks now, I have elected to make some changes to make it more tightly integrated with Openfire and solve some issues I have with it. The result of these changes is OfMeet (Openfire Meeting). It looks exactly the same as Jitmeet and uses Jitsi-Videobridge, but has some fundamental changes.


First change was moving the colibri focus agent role from client-side Javascript to Server-side Java code in the Jitsi-videobridge plugin for Openfire. For more details about the focus agent, please read the colibri XEP specification. Making this change now removes the issue of the whole conferencing collapsing when the focus agent peer client application fails or leaves the conference.

Second change was to replace the jingle peer-to-peer signalling with rayo third-party signalling. I use jingle in my applications for simple one-to-one video/audio chats and I was experiencing conflicts with the jingle namespace being used in a different context. As I had moved the focus agent to the Openfire server, it made sense to change the protocol from first party call control to third party call control. I appreciate it will break compatibility with the Jitsi desktop client, but in practice when I tested Jitsi client with JitMeet, I found the user exprience very confusing. I could not tell the difference between a normal jingle call and an invitation to join a videobridge.

Third change was a few cosmetic modifications, adding very basic support for Spark (requires Chrome as default browser) and Openfire websockets (Jetty websockets) which is faster and more reliable that http-bind.

Most people will invariably put Jitsi-Videobridge on a separate or same server as an external component to their Openfire server and the Jitsi JitMeet application on a web server. This will work as designed and intended by the Jitsi Team and Philipp Hancke.

If you however want the whole solution from a single Openfire server, just using Spark and Google Chrome as clients, then the Jitsi-videobridge plugin with OfMeet and the Jitsi videobridge plugin for Spark is for you.


You however have to wait for Openfire 3.9.0 to be released

1 Like

Hey Dele,

As you point out, moving the focus at the server is indeed in line with the Jitsi Videobridge model and it makes a lot of sense. Great work!

I didn’t quite understand the reasons for dropping Jingle though and I find this a bit of a pity. While Jitsi interop hasn’t been polished yet, this is something that we will improve later this year and general Jingle interop could come in quite useful in a number of situations. Chrome dropping support for desktop sharing for regular web pages is one reason that comes to mind.

Are there any advantages that a non-standard protocol would have here?

Rayo is a new XEP just like Colibri for third-party call control. It is also extensible and allows me to add new namespaces like “urn:xmpp:rayo:colibri:1”

The advantages for me using rayo instead of jingle include :

  1. The use of a different namespace for Colibri signalling when it comes from the third-party focus agent instead of extending every jingle JavaScript library to handle out of context jingle calls. I use Strophe, PhonoSDK, JsJac and Spank (Sparkweb).
  2. The use of MUC for colibri session management. Once you join an MUC room with Colibri, you are committed to exchanging your video, audio and screen. There is no need for any further session management. Just exchange colibri messages with videobridge via focus agent.
  3. Rayo and Jingle can co-exist with no conflict. If I used jingle instead of rayo in the third-party focus agent, then Jitmeet would become incompatible with the openfire plugin. I would have had to introduce a form of service discovery for the third party focus agent as there is no new namespace to inform about it.

I am quite happy to add jingle support to jitsi-videobridge plugin later on when the interop with Jitsi client is polished and the addssrc/removessrc extensions to jingle are all approved and stable. For now, I need Rayo instead of Jingle to get me going with projects that have all queued up waiting for jitsi-videobridge to support webrtc

Hey Dele,

Yes, I am familiar with Rayo but I was commenting on the protocol you’d now be using for negotiating transport and media. If I understand correctly, Rayo is only used for call control so I assumed the elimination of Jingle implied that the app would now use a custom combination of JSON and SDP for the actual offer/answer negotitation.

Maybe I missed something though. Isn’t this the case?


No. It uses Colibri messages directly for negotiating transport and media. Instead of converting SDP to jingle, I now convert to colibri and wrap in rayo. There are rayo messages for “offer”, “answer”, “addssrc” and “removessrc” requests with a colibri “conference” message payload.

The plugin can support jingle easily with minimuim code changes. I would prefer to do that when addssrc, removessrc become standard and appear in a jingle XEP and we get more user experience and a few more use cases around the role of jingle in multi-user collaboration.

How to setup iptables for videobridge?
I build openfire with videobridge in net with firewall.but something been block so no video and audio. only text chat.

Maybe use some ports in rayo? except 5222 7070 7443

ofmeet now supports screenshare with screen=true parameter to publish



Screen/desktop sharing with Candy


hey Dele,

is there any link to download ofMeet with jitsivideobridge plugin…?

Hi Dele,

I can see when i test Openfire 3.9.1 with ofMeet plugin that the connection made with anonyme user and random jid.

It’s possible to oblige to use a authentified jid to check the users rights for room?


for exemple, for my persistent room “test”, i’ve a lot of members’s rights defined and i would like use them.

jitmeet is now back in the jitsivideobridge plugin. The only change to make it work with openfire is in the config.js

var config = {

hosts: {

domain: ‘YOUR-DOMAIN.COM’,

muc: ‘conference.YOUR-DOMAIN.COM’, // FIXME: use XEP-0030

bridge: ‘jitsi-videobridge.YOUR-DOMAIN.COM’ // FIXME: use XEP-0030


// useStunTurn: true, // use XEP-0215 to fetch STUN and TURN server

// useIPv6: true, // ipv6 support. use at your own risk

useNicks: false,

bosh: 'https://YOUR-DOMAIN.COM:7443/http-bind/', // FIXME: use xep-0156 for that

getroomnode: function (path)


console.log(‘getroomnode’, path);

var name = “r”;

var roomnode = null;

var results = new RegExp(’[\?&]’ + name + ‘=([^&#]*)’).exec(window.location.href);

if (!results)

roomnode = null;

else roomnode = results[1] || undefined;

if (!roomnode) {

roomnode = Math.random().toString(36).substr(2, 20);

window.history.pushState(‘VideoChat’, 'Room: ’ + roomnode, path + “?r=” + roomnode);


return roomnode;



Hello Dele,

I’m trying to share my desktop in ofMeet as you say but not works.

I’m using Openfire 3.9.1 + JitsiVideoBridgePlugin 1.2 on server.

First one in the chrome I’m tryed to share my desktop from button that already are included in the interface but not works. I click on share Desktop a nothing happen.

After a time, I find this post talking about to do ofmeet/?r=muc_room&screen=true

But unfortunatly that not works too, but In this case chrome url bar show …ofmeet/webrtcrequired.html with message in browser that I need to use chrome. But I’m using.


This service only works with Chrome.

Download Chrome



I wish there is some step by step guide installation and configuration of ofmeet. I have deploy openfire, and jitsi video bridge (plugin and script). But when I open the ofmeet page, here is the display:


I do not have any idea what wrong is with my instalation or configuration. Wish I will get the solution soon. Thanks.

Read this


For support go here


Hi Dele,

Could you describe or provide a link to detailed explanations of message flows/formats used by ofmeet, i.e. concrete Rayo messages and embedded Colibri?

I’m trying to develop a web client which is a bit different than yours. For certain reasons, I’d like to send SDP from my web client to my server “as is” and let the server use Rayo/Colibri to setup a video conf and exchange SDP offers and answers. Later on my server would return the resulting SDP to my web client and let it establish media streams.

To be able to implement this, I need to understand the flows and the exact expected format of messages. I need to understand what each new participant of a conference is supposed to do to join/leave it, how conferences/conference rooms are created, etc.

Would be nice if you could help me a bit and provide me with required information.

Thanks in advance,


Hi, I’ve been working with this setup for about 3 days now. I’ve installed Openfire and all the correct plugins for WebRTC into the server and was stumped by the Google Chrome error when using Chrome. If you download Chrome Canary it works out of the box with absolutely no plugins needed.