Q&A for Openfire Meetings

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()