Skip navigation
All Places > Ignite Realtime Blog > Authors Dele Olajide
1 2 3 4 Previous Next

Ignite Realtime Blog

50 Posts authored by: Dele Olajide Champion

Chrome version 57 makes a breaking change to webrtc that breaks Openfire Meetings. For details, read this.

You can apply a work-around by using the meetings settings admin web page to force a "negotiate" rtcpMuxPolicy as shown in the screen shot below.

 

ofmeet.jpg

 

Otherwise, upgrade to version 0.3.29 from github here.

 

The 0.4.x branch is now up-to-date with the latest Jitsi code including the mobile Jitsi-Meet applications for iPhone and Android. It can be previewed from here. It is still work in progress. If you test it with the mobile app, enter the full URL of your Jitsi-Meet application (https://<your-server>:7443/ofmeet/jitsi-meet/<room name>) and ensure your Openfire allows anonymous xmpp connections.

I have added Kaiwa XMPP web client to the Chat API plugin. I hope to extend it with the audio/video conferencing stuff from Openfire Meetings later on.

kaiwa2.jpg

First time you use it (https://your_server:7443/apps), you will get a prompt to enter your Openfire username/password. It works best with the websocket plugin.

 

**UPDATE**

This plugin is broken with the latest Openfire 4.1.4 version as the websocket it depends on has a show stopping issue with External SASL authentication. Until we can source a solution, I suggest you use Openfire 4.1.3 and below.

Dele Olajide

Openfire Chat API

Posted by Dele Olajide Champion Feb 18, 2017

I am trying to build a new web based client for Openfire to replace the outdated and abandoned Flash-based Sparkweb. The project is called Pade (A Yoruba word for Meeting) and my first step was to decide on my web client API.

 

Representational state transfer (REST) has now become the standard for abstracting request/response type web services into an API. When it is combined with Server Sent Events (otherwise known as Event Source), the result is a fresh new way of providing two-way real-time communication between web clients and a server using synchronous requests/responses (IQ) with REST and asynchronous evening (Message, Presence) with SSE. The really cool feature of SSE is the automatic re-connection by the web browser.

 

The Rest API plugin by Redor is brilliant . It allows you to administer Openfire via a RESTful API. Most of the common functions we do from the Openfire admin console web application can now be automated and integrated into server-side Java plugins or client-side web applications with ease. After spending hours inside the code and extending it for use at work to manage all the telephony entities we use with our Openlink XEP from the various commercial plugins we develop, it became clear that REST+SSE is the way forward for web-based real time messaging. Don't take my work for it. Read what the folks at erlang-solutions.com have to say.

 

As my first step towards implementing Pade, I have built a Chat API plugin by extending the REST API plugin with SSE and Jetty web authentication taken from the Openfire meetings plugin. The plugin now runs on the HTTP-BIND (7070/7443) port instead of the admin (9090/9091) port. It authenticates you as an Openfire user once and reuses the authentication for REST,  SSE and XMPP bosh/websockets. It supports everything you can do with the REST API plus Bookmarks and SIP Accounts as an admin user. It then enables you as a normal user to handle presence, chat, groupchat, contacts and users with just a handful of REST requests and SSE events.

 

Documentation can be found on GitHub Wiki pages

Lately, I have stared to use Spark client again alongside Skype for Business which I use daily for my professional work. My renewed interest in Spark came initially to have a look at the hard work wroot, guus and the rest of the igniterealtime community had put into Spark 2.8.1 and also to access the chat rooms at igniterealtime, especially the IRF.

 

I use Openfire Meetings myself from time to time and had developed a basic plugin for Spark that allows users to join audio and video conferences hosted by Openfire Meetings. See the documentation for more details. It provides a button from a Multi User Chat (MUC) room or chat window within the Spark client, to open a Chrome window using the same URL as the Jitsi Meet web client. It therefore assumes you have Chrome installed and configured as your default browser. It works, but the user experience is not ideal.

 

I had done some work with Java Chrome Embedded  Framework (java-cef) a while back and decided to use it directly instead of depending on Chrome installed and configured as the default browser. I spent my weekend working on it and this what I have to show for my effort

 

sparkmeet.png

It is a much better user experience than opening a Chrome browser window out of context somewhere else. Like everything in life, there is a price to pay. It does not do screen sharing and does not work on OSX. (don't know how to configure java-cef for OSX). I have tested it at home on my windows win32 desktop and will test it tomorrow at work on my win64 desktop. I would appreciate any feedback from Linux users.

 

The source code is on the Ignite Realtime GitHub repo and PRs are welcome especially to make it work on Macs (OSX)

 

Update

I have given up on java-cef. The lack of current pre-built binaries and missing features like screen share makes it difficult to work with. Our UI expert at work suggested I tried Electron Atom instead. It proved to be very good advice. Whole screen sharing is now available. Desktop sharing and remote control to come later. You will need Openfire Meetings 0.3.28 and above to use it and the pre-built Electron run-time files are available for Windows, Linux and OSX unlike java-cef.. Spark will take a take a minute or two to start after the plugin is deployed. Any feedback on OSX and Linux will be appreciated.

 

I am going to miss the potential of I could do with the tight Java integration, but with Chromedriver, a new world of JavaScript API development with Spark beckons.

 

Dele, Guus and myself will be in London for a brainstorming and development sprint on Openfire Meetings.

 

This is in the context of Openfire Meetings within WikiSuite, and we will make improvements, useful to all the community (even if you don't use the Openfire Meetings plugin nor WikiSuite)

 

Here are some examples of things we could be working on: WikiSuite | Openfire Meeting and Jitsi Meet development

 

If interested in participating, please contact me.

 

Best regards,

 

M ;-)

Thanks  to the sponsorship of Marc Laporte  and the effort of Guus der Kinderen, we have improved the documentation of Openfire Meetings. There is still a lot more work to be done, but we are making good progress. You can find it here. Please have a read if you use this Openfire plugin. The latest version of the plugin can be found here.

Dele Olajide

Q&A for Openfire Meetings

Posted by Dele Olajide Champion Dec 12, 2015

Over the last few weeks, I have answered a few questions about Openfire Meetings and would like to post them here for others who might find them useful.

 

How do create a co-browsing between participants in a meeting

 

Co-browsing, in the context of web browsing, is the joint navigation through the World Wide Web by two or more people accessing the same web pages at the same time.

Co-browsing URLs are configured with the client control plugin. You can share URLs with all, specific users or user groups. The URL description appears in the pull-down list of the collaboration applications menu on the web client. It should also appear in Spark, but I have never tested it. The basic user experience is the syncing of DOM events via the chrome extension and the visual shared cursors of each participant labelled with their names. See this blog for more details.

How do I setup the SIP integration for Openfire Meetings? How can I achieve call-in and call-out to meetings?

 

SIP integration is a bit detailed. It only works with persistent chat rooms. It requires changing the default values in the openfire meetings settings admin web page.  You have to enable VOIP, audio mixer and configure either or both server and client roles. In server role, Openfire meetings will act as A SIP registrar and accept SIP registrations for any standard SIP phone or device or mobile softphone app.  In client mode, openfire meetings will register with Asterisk, FreeSwitch or any SIP proxy, IP PBX. To associate a SIP phone call with an openfire meeting, you decide on any dial-able telephone number from the SIP device or SIP Proxy/PBX and link it with a chat room. You can put the number in the description or create a room using the telephone number as the name.

 

For outgoing calls from the web client, you must also make sure that one of the room moderators is a participant in the meeting otherwise the telephone icon will not appear. You can optionally use the client control plugin to define SIP/TEL URIs that will appear in a pull down list when the telephone icon is clicked. I have added support for a multicast URI, but you need to look at the source code for more information. For incoming, you can only join an active meeting. When the SIP invite is received, the SIP URI telephone number is matched against all active meetings and SIP endpoint audio is added to conference audio mixer.

When the openfire meetings audio mixer is enabled, audio quality is reduced to G711 ulaw in order to manage the CPU load on the server while mixing the audio streams. This will affect the webrtc user experience in the browser. If you do not use an audio mixer, then your SIP endpoint (phone, softphone) will only work if it supports multiple audio streams and has a client side audio mixer like the Jitsi desktop app.

How do I record a meeting?

 

Enable meeting recording (audio/video/screen share) and specify location of media files/folders from openfire meetings settings. Video is recorded only in linux 64 servers. On everything else (windows, 32 bit servers), only audio is recorded.

 

The PDF viewer does not work or is very slow. How can I fix this?

 

The PDF rendering engine is implemented in JavaScript. Not sure it can go any faster. The key would be to use simpler PDFs. I save my powerpoint presentations as PDFs and get a good performance from them. Also, the use of JavaScript creates a cross-domain issue and therefore the PDF file is fetched by the server and not the web browser. You need to make sure the Openfire server has network access to the PDF web server. If the PDF is being fetched from the Internet, then your OF server needs access to the internet as well.

 

I can see Openfire Meetings has an API. can I use it from my web applications?

 

To do this, take a look at the demo video conference application (index.html) using the api in the “api” folder of the ofmeet plugin. You need to do the following things:

 

  • Include “ofmeet.css” to get the correct styling and positioning of the video divs. The current  behaviour is to use the full screen and auto-repostion/resize as participants leave or go. Please note that the api does not include the toolbar and all its features. Your application must implement those via api calls. Only the UI for the main video window and film strip for participants are implemented in the api.

  • Include “/ofmeet/config”, the generated script file which contains all the settings and server config data packaged as a global object called “config”

  • Include “ofmeet-api.js” which contains all the javascript for openfire meetings  (including all dependencies like jquery) encapsulated in a global object called ofmeet. This ensures there is no name clashes with your own application if you add ofmeet-api.js directly to your application without using an iframe.

  • Write your application using the config and ofmeet objects as follows:
    • Create event handlers for all ofmeet events. See index.html for the most common. All others can be found by looking at the ofmeet-api.js code for document.trigger calls.
    • Trace the application flow in index.html starting from jquery document.ready event. First thing to do is call ofmeet.ready(username, password). Handle ofmeet.ready event and call ofmeet.connect.
    • Handle ofmeet..connected and join the conference room with ofmeet.joinRoom(roomName, audioVideoFlag).
    • You can exit the conference with ofmeet.leaveRoom(). Make the whole UI visible/invisible with ofmeet.visible(flag).Toggle audio/video mute with ofmeet.toggleVideo() and ofmeet.toggleAudio()

Openfire Meetings version 0.1.5 has a new meeting planner feature that enables you to schedule meetings in advance using a calendar.When you add a meeting to the calendar, a request to join the meeting is automatically generated and sent to each participant using Openfire's email service 15 mins before the meeting starts. Included in the email is a link to join the meeting from a Chrome web browser.

Image2.jpgImage5.jpg

In order to use this feature, you will need:

  • Registered Openfire users with valid email address,
  • A persistent MUC room to host each planned meeting
  • The Openfire ClientControl plugin installed to create a room bookmark that links the room to users or user groups. Bookmarks with all users selected are ignored.
    Image6.jpg
  • The Openfire Email Service configured to deliver emails
    Image4.jpg

The calendar is implemented using the excellent open source fullcalendar jquery plugin by Adam Shaw.

One of the reasons I got involved with building real-time web based communication applications with messaging, audio and video audio was because it was a stepping stone on my journey to find the holy grail of cooperative real-time web applications. These are web applications can be used in an N:N model (each user can simultaneously interact with all the other users). These type of applications are closer to real-life and are not restricted by the limitations of technology. As humans, we achieve a lot more when we work in teams and as a community . Now, thanks to the excellent work of the active Jitsi and retired Mozilla Labs teams, I have enabled the Openfire Meetings Collaboration API, a platform to explore real-time collaboration.

 

Image1.jpgImage3.jpg

 

Openfire Meetings is an Openfire plugin that combines JItsi Meet, Jitsi Videobridge and TogetherJS to create a web-based platform with unified mutli-user communications (presence, messaging, audio and video) from which real-time collaborative web applications can be developed.

 

Image4.jpgImage5.jpg

 

As each meeting participant can see and hear each other and share digital content in real time, we now have a working environment very close to real-life interaction. As a starting point, I have added the following demo/sample applications. The real power is when proper business applications are used, enabling tasks to be completed cooperatively by a team working together in real-time and not in a queue or by tag-teaming as we currently do today with email, social software and most web based business applications.

 

Co-Browsing

This is the simplest type of application that can be developed. It is a web site that enables joint navigation by all participants in the meeting. It is using the TogetherJS engine to track and show the multiple cursors and administer remote mouse clicks on each page. In the screen-shot above, I am co-browsing the ignite real-time web site which is not completely co-browse friendly as JIve SBS (for security reasons) does not permit it's pages to be loaded in an iframe. Consequently, the community link click does not work.

 

Cooperative Editing

This is a modified version of "woot", a rich-text collaborative editor by kroky. There are tons of stuff on this subject matter. Just look up "google wave". Etherpad is the most popular and mature implementation so far. I found this presentation very informative especially explaining operational transformation and why woot (without operational transformation) is simpler.

 

Cooperative Drawing

This is the TogetherJS drawing sample application. Openfire Meetings automatically saves the contents of each application for each meeting on the server as XMPP private data against each user that creates the content. Next time you have the meeting, the drawing or rich text pad opens at where you left it from the last meeting.

 

Scrum-Board for Post-It Notes

This an adaptation of Ali Asaria's scrumblr application. It is a very visually appealing application with real-time animation and reminds me of my previous life as a multi-user virtual reality applications developer with VRML.

 

I have promised to explain in detail how to use Openfire Meetings and over the coming months I plan to post a few more blogs on this and how to use the collaboration api for those who may be interested in taking this journey with me.

Dele Olajide

Openfire JMX Web Console

Posted by Dele Olajide Champion Jan 10, 2015

Don't cha wish your openfire console was hawt like me? Don't cha?

Image2.jpg

Introducing the openfire jmxweb plugin

 

I have been using java-monitor.com's openfire probe for a while now to mange all my openfire servers for a while now and it pretty much works. The plugin and extra JMX mbeans developed by Guus der Kinderen have been very useful for checking the health on the servers. For various reasons which include the work done by Tom Evans to enable JMX for Openfire (Jetty. Mina, Hazelcast) I decided to monitor my openfire servers directly with an open JMX management console instead. I tried both jconsole and jvisualvm, but found them difficult to use with remote servers. I needed a web based console.

 

After a bit of investigation, I first found jolokia and then hawt.io and together, they are hot and spicey...If you want to know more about both jolokia and hwatio, follow the links. As far as openfire is concerned, hawt.io with jolokia are a perfect fit. The plugin design sits well with openfire's plugin architecture enabling hawt.io monitor plugins to be developed independently for openfire plugins, components. Anything server-side that can expose mbeans can be monitored and managed by a hawt.io plugin in html and javascript.

 

I have packaged hawt.io, jolokia and the openfire mbeans from the java-monitor.com probe into a new plugin called jmxweb. It uses the http-bind web service for hawt.io web console and jolokia's REST API. To access openfire's JMX mbeans, enable it with global property "xmp.jmx.enabled". By default, access is secure and only to admin users. Use "xmpp.jmx.secure" to disable.

Image3.jpg

How to use

To access hawt.io, point your browser at http://your-server:7070/hawt.io

To access jolokia rest api from your javascript applications use URL http://your-server:7070/jolokia. Make sure you provide headers for basic authentication.

 

The plugin only works with latest openfire server 3.10 because of changes to mina in 3.10. I might do a backward build for openfire 3.9/3.8 if there is any interest.

 

What next

I plan to release jmxweb on igniterealtime as a new openfire plugin and develop some mbeans for openfire meetings and a hawt.io plugin to manage them later on. It currently lacks the ability to accumulate jmx data on a central server like java-monitor.com over a period of time to analyse and I will look at implementing a push and store feature much later on.

 

Update

I have attached the jar file for jmxweb plugin that will work with openfire server 3.9.3 and possibly below. Use at your own risk.

 

Update 2

JmxWeb plugin now available as an Openfire plugin for version 3.10 and above

A discussion space at igniterealtime has also been created.

Dele Olajide

Openfire Meetings

Posted by Dele Olajide Champion Nov 30, 2014

Ignite Realtime is pleased to announce "Openfire Meeting", a new plugin for Openfire that continues the development of the ofmeet web application which was part of the deprecated Jitsi-videobridge plugin.

 

PLEASE NOTE - You will need latest Openfire 3.10.0 to use this plugin. Use a nightly build or wait for the imminent official release.

ofmeet1.png

 

Openfire Meetings is a complete standalone plugin powered by Jitsi Videobridge. It does not depend on any other plugins

 

ofmeet3.png

 

The front-end we application is a combination of Candy and Jitsi Meet and enables the following features

  • Openfire user authentication directly from web browser for both Candy and Jitsi Meet
  • Audio, Video and Telephone (SIP) conferencing directly with Jitsi Meet and from Candy
  • Desktop sharing (screen and applications) using the Openfire Meeting Chrome extension
  • Fastpath user agent with audio and video using the Candy and Jitsi Meet web applications. It also requires Fastpath plugin to be installed.
  • Configuration directly from Openfire admin web pages.

 

ofmeet2.png

How to use

Jitsi Meet - https://your-server.com:7443/ofmeet

Candy - https://your-server.com:7443/ofmeet/candy.html

 

ofmeet5.png

Discussion place is in the community plugins, here

The Jitsi project is to introduce a new plugin for openfire called JitsiMeet which is an easy to deploy and configure version of their JItsi Meet OpenSource (MIT) WebRTC JavaScript application that uses Jitsi Videobridge to provide high quality, scalable video conferences. The new JitsiMeet plugin for Openfire will be supported here at igniterealtime by the Jitsi project directly. This is good news for all of us here at igniterealtime.

 

So, what happens to the old jitsivideobridge plugin?

 

The old jitsivideobridge plugin has been deprecated and removed from igniterealtime. The embedded ofmeet and candy webrtc conferencing applications will re-appear in some future plugin later on. Watch this space.....

The Igniterealtime community and Jitsi.org is proud to release the Jitsi Videobridge plugin for Openfire version 1.3.0 with Openfire 3.9.2. The new version has the latest code from the Jitsi project, fixes a number of issues and implements some requests made from the community

Image5.jpgImage6.jpg

New Features

  • New layout and improvements to user experience of ofmeet and jitmeet.
  • Username and password protection for the web conferencing applications (ofmeet, jitmeet and candy)
  • Support for audio only participants (no webcam).
  • Conferencing recording for audio and video separately. Each conference has a single audio recording and a video recording for each participant. Video recording is only available for Windows. Support for video recording on other platforms will be available on a later release.
  • Telephone users can join or be invited to the conference as audio only participants
  • PDF Presentations can be shared and driven by the presenter.

Fixes, Improvements

  • Ofmeet and jitmeet are now auto-configured. Install plugin, restart openfire and go to app home page. You can even use an IP address. Removed config.js. It auto-detects the websockets plugin and uses it when available.
  • Screenshare has been improved. Publish.js is no more needed for ofmeet and jitmeet
  • Improved the plugin admin web page.

Image2.jpg

Known issues

  • The candy web application has not been touched. It should still work, but could have issues.
  • There is an experimental fastpath with video application which uses candy for the agent and some javascript you can add to your web site. Not tested and could have issues.
  • There are no user or admin guides. There are also no tutorials or "how to use" videos or blogs. There is a good document by bakko to get most users started, but needs an update.

How to use

Make sure:

  • you are using Google Chrome as your web browser
  • you have a webcam or at least a sound device installed and ready for use for each user
  • you have opened ports 50000 - 60000 (or whatever you configured) on your openfire server
OfMeet

To run the ofmeet video conference application, point your browser at https://your_server:7443/jitsi/apps/ofmeet

Candy

To run the Candy web application with multi-user video, point your browser at https://your_server:7443/jitsi/apps/candy

Spark

To download the Spark plugin, point your browser at https://your_server:7443/jitsi/apps/spark/jitsivideobridge-plugin.jar

JitMeet

To run the jitmeet video conference application, point your browser at https://your_server:7443/jitsi/apps/jitmeet

You will need Google Chrome as your default browser to use the Spark plugin

 

Finally,

Although jitmeet (Jitsi Meet) and ofmeet (Openfire Meetings) look similar, they are different underneath and are heading in different directions.

Jitsi Meet is for generic XMPP servers and aimed at public internet facing conferencing using services like prezi.org and etherpad.org while Openfire Meetings is for private in-house conferencing where all collaboration applications are integrated into Openfire. For example, Ofmeet uses a PDF viewer which supports in-house corporate powerpoint presentations, while Jitmeet uses prezi.org.

 

All the source code is now out there on GitHub. Go to Jitsi.org and Igniterealtime.org and start to making improvements

The Jitsi project have just announced that Jitsi Videobridge is now compatible with WebRTC and can be used as a central relaying point for web video conferences (or web+Jitsi). You can check out shot of a first prototype here. A big thank you to Emil Ivov,  Philipp Hancke (estos.de) and Lyubomir Marinov (jitsi.org) for making this happen and sharing it with the rest of us

 

I was keen to see this in action with Openfire as Jitsi Videobridge works fine as an Openfire plugin and it will add the much needed and anticipated video streams forwarding/relaying feature to WebRTC applications as Red5 does to Flash Player. I copied all the required files to my Openfire server, made some minor adjustments for Openfire and as you can see below, it works!!

 

Image2.jpg

However it is early days. This is all leading edge code still in development. Jitsi Videobridge as an internal component from an Openfire plugin does not yet work because the bouncycastle library in Openfire needs an upgrade to the latest version that supports DTLS-SRTP. It only worked as an external component. I will try to get this fixed for Openfire 3.9.0 which is currently in alpha.

 

** UPDATE **

 

Jitsi Videobridge plugin for Openfire is now available here at igniterealtime.org with the webrtc-based video conferencing application embedded as a web service. A complete web muti-person video conference solution in one box. You will need Openfire 3.9.0 to try it out.

 

In the meantime, Claude Stabile has generously made a live version available for us to try at https://webrtc.free-solutions.org:8443/videobridge.html

 

** FURTHER UPDATE **

 

The first draft of the COnferences with LIght BRIdging (Colibri) XEP that is used to manage video conferences with Jitsi Videobridge is now out. You can find it here. All we need now is a volunteer to setp forward and add it to Smack/aSmack and Spark using the Java bells library

 

** YET MORE UPDATE***

 

The first version of the Jitsi jitmeet web conferencing application is now out and has replaced the demo web application in the Jitsi Videobridge plugin. It has MUC chat with some other needed features like mute audio/video. Expect some more before Openfire 3.9.0 is released. As usual, you can checkout the latest code in the ignite realtime VCS, build and try it out yourself.

 

To help those cannot build openfire 3.9.0 from source. Do the following

 

Grab Openfire 3.9.0 nightly build from here

Download jitsivideobridge.jar file from here

Image2.jpg

 

** LAST UPDATE **

 

There is now a dedicated ignite space for jitsi-videobridge plugin. Please post any issues, questions and contributions here. I have also posted a blog about the changes I have made to the plugin to support a server-side focus agent.

Dele Olajide

XEP-0327: Rayo

Posted by Dele Olajide Champion Sep 24, 2013

This project is an implementation of the XMPP protocol extension for the third-party control of telephone calls and other similar media sessions. The protocol includes support for session management/signaling, as well as advanced media resources such as speech recognizers, speech synthesizers and audio/video recorders. The protocol serves a different purpose from that of first-party protocols such as Jingle or SIP, and is compatible with those protocols.

 

For more details, see http://xmpp.org/extensions/xep-0327.html

 

It consists of a server-side plugin for Openfire and a client-side plugin for Strophe.js

Filter Blog

By date: By tag: