Java exceptions with Openfire 4.5.1 and Openfire Meetings Plugin 0.9.5

Hi!

For some days I’m trying to get videoconferencing working with Openfire 4.5.1 and ofmeet 0.9.5 without success and it looks like I need help.

I tried several fresh basic Openfire installations from the provided RPM, but the results are always the same: Connecting with the browser to https://servername:7443/ofmeet works, users can select a room and log in. Users can allow access to their camera and microphone. Inside the room users see the video stream of their own camera and avatars from other users as soon as they enter the room. Users can use the chat sidebar to chat with each other, users can raise/lower their hand and other users will be notified accordingly. But each user can neither see video nor hear audio from the others. In the avatar pictures of the other room members, their camera is shown as stopped and the microphone is shown as muted.

I used openfire-4.5.1-1.noarch.rpm from the download site and installed the meetings plugin inside the admin UI “available plugins” page.

On the server side I tested on various hardware under CentOS 8 and OpenSUSE 15.1
Java was always OpenJDK 1.8.0_242

I tested with self-signed certificates (as provided by the Openfire installation) as well as certificates signed by our CA and installed using the keytool utility.

On the client side I tested with Firefox 68.6.0esr, FF 68.2.0esr and Chromium 80.0.3987.132 under OpenSUSE LEAP 15.0 and 15.1

I tested with server and clients all inside the same IPv4 Class-C network as well as with clients connected to the server via VPN

Firewall is deactivated on each host.

The few hints I currently have are lots of Java exceptions in the Openfire logs. I got these on each test installation.

The most severe seem to be this one from error.log:

2020.03.21 12:30:07 org.jitsi.videobridge.health.Health - Health check failed in 11ms:
java.lang.NullPointerException: null
        at org.jitsi.videobridge.RtpChannel.initialize(RtpChannel.java:903) ~[jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.Content.createRtpChannel(Content.java:339) ~[jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.Content.createRtpChannel(Content.java:263) ~[jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.health.Health.check(Health.java:152) ~[jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.health.Health.doCheck(Health.java:244) ~[jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.health.Health.doRun(Health.java:495) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.util.concurrent.PeriodicRunnableWithObject.run(PeriodicRunnableWithObject.java:87) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor.run(RecurringRunnableExecutor.java:216) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor.runInThread(RecurringRunnableExecutor.java:292) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor.access$000(RecurringRunnableExecutor.java:36) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor$1.run(RecurringRunnableExecutor.java:328) [libjitsi-1.0-20190128.210332-374.jar!/:?]

or this one from info.log:

2020.03.21 12:31:47 org.jitsi.impl.libjitsi.LibJitsiImpl - Failed to initialize service implementation org.jitsi.impl.neomedia.MediaServiceImpl.
java.lang.NoClassDefFoundError: Could not initialize class org.jitsi.impl.neomedia.device.DeviceConfiguration
        at org.jitsi.impl.neomedia.MediaServiceImpl.<init>(MediaServiceImpl.java:160) ~[libjitsi-1.0-20190128.210332-374.jar!/:?]
        at sun.reflect.GeneratedConstructorAccessor46.newInstance(Unknown Source) ~[?:?]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_242]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_242]
        at java.lang.Class.newInstance(Class.java:442) ~[?:1.8.0_242]
        at org.jitsi.impl.libjitsi.LibJitsiImpl$ServiceLock.initializeService(LibJitsiImpl.java:196) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.impl.libjitsi.LibJitsiImpl$ServiceLock.getService(LibJitsiImpl.java:131) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.impl.libjitsi.LibJitsiImpl.getService(LibJitsiImpl.java:91) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.impl.libjitsi.LibJitsiOSGiImpl.getService(LibJitsiOSGiImpl.java:95) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.service.libjitsi.LibJitsi.invokeGetServiceOnImpl(LibJitsi.java:172) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.service.libjitsi.LibJitsi.getMediaService(LibJitsi.java:124) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.videobridge.Conference.getMediaService(Conference.java:1109) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.Content.getMediaService(Content.java:739) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.RtpChannel.getMediaService(RtpChannel.java:780) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.RtpChannel.initialize(RtpChannel.java:893) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.Content.createRtpChannel(Content.java:339) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.Content.createRtpChannel(Content.java:263) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.health.Health.check(Health.java:152) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.health.Health.doCheck(Health.java:244) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.videobridge.health.Health.doRun(Health.java:495) [jitsi-videobridge-1.1-20190125.162313-103.jar!/:?]
        at org.jitsi.util.concurrent.PeriodicRunnableWithObject.run(PeriodicRunnableWithObject.java:87) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor.run(RecurringRunnableExecutor.java:216) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor.runInThread(RecurringRunnableExecutor.java:292) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor.access$000(RecurringRunnableExecutor.java:36) [libjitsi-1.0-20190128.210332-374.jar!/:?]
        at org.jitsi.util.concurrent.RecurringRunnableExecutor$1.run(RecurringRunnableExecutor.java:328) [libjitsi-1.0-20190128.210332-374.jar!/:?]

I don’t know if these errors are severe enough to trigger the problems I see, though.

As I’m basically stuck at this point my questions currently are:

  • Are there any known problems with the latest versions of openfire and the meetings plugin which could explain the behavior I see?
  • Has anyone got this combination to work together successfully?
  • What might be wrong with my installations, especially if one considers the exceptions shown above?

Any help to get videoconferencing with Openfire and the meetings plugin up and running would be appreciated!

Thanks!

– andreas

Try this customised version of ofmeet and offocus that I use with Pade

It has a more recent version of jitsi and confirmed working with openfire 4.5.1

Hi!
Thank you for your reply.
I downloaded and installed both offocus.jar and ofmeet.jar plugins from the Pàdé project, in the Openfire admin UI they show up as “Pade Focus Component” and “Pade VideoBridge Plugin”, both with version 0.9.7-SNAPSHOT.

When I enter the meeting room I see the new tiled view as well as the new screen sharing feature (I like both of them very much!)

Alas, audio and video are still not transferred to the room members. Users still see their own video stream, only. I still see lots of exceptions in the logfiles.

When I check network connections on the server I see:

ahp71:/opt/openfire/logs # netstat -atnp | grep java
tcp        0      0 0.0.0.0:7070            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:7777            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:9091            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5222            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5223            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5229            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5262            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5263            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:7443            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5269            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5270            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:8888            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 192.168.1.101:4443      0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5275            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 0.0.0.0:5276            0.0.0.0:*               LISTEN      30929/java          
tcp        0      0 192.168.1.101:7443      192.168.1.102:46746     VERBUNDEN   30929/java          
tcp        0      0 192.168.1.101:7443      192.168.1.101:45096     VERBUNDEN   30929/java          
tcp        0      0 192.168.1.101:5222      192.168.1.101:43534     VERBUNDEN   30929/java          
tcp        0      0 192.168.1.101:43534     192.168.1.101:5222      VERBUNDEN   30929/java          

(“VERBUNDEN” is german for “CONNECTED”)

192.168.1.101 is the server with openfire running as well as a firefox instance connected to the meeting room. This is an OpenSUSE LEAP 15.1 system.

192.168.1.102 is the second client running OpenSUE LEAP 15.0 and a firefox instance connected to the meeting room.

The Openfire process is running as follows:

ahp71:/opt/openfire/logs # ps ax | grep java
30929 ?        Sl     0:47 /usr/lib64/jvm/java/bin/java -Dlog4j.configurationFile=/opt/openfire/lib/log4j2.xml -server -Xmx1024m -Djava.net.preferIPv4Stack=true -DopenfireHome=/opt/openfire -Dopenfire.lib.dir=/opt/openfire/lib -classpath /opt/openfire/lib/startup.jar -jar /opt/openfire/lib/startup.jar

In the Openfire admin console session tab I see three sessions: one session for the “focus” user marked “Authenticated” and “Online” and two sessions marked as “Authenticated” but “Offline” for the two users in the meeting room. Is this to be expected?

Also the sheer number of Java exceptions bothers me.
After a restart of Openfire with the ofmeet plugin and running for 30 minutes I get:

ahp71:/opt/openfire/logs # fgrep NullPointerException *.log | uniq -c
     72 all.log:java.lang.NullPointerException: null
    246 error.log:java.lang.NullPointerException: null
      2 warn.log:Caused by: java.lang.NullPointerException
      2 warn.log:java.lang.NullPointerException: null

ahp71:/opt/openfire/logs # fgrep IllegalArgumentException *.log | uniq -c
      1 error.log:2020.03.21 16:30:56 org.jitsi.jicofo.xmpp.FocusComponent - java.lang.IllegalArgumentException: name must not be null
      2 error.log:java.lang.IllegalArgumentException: name must not be null
      1 warn.log:java.lang.IllegalArgumentException: name must not be null

ahp71:/opt/openfire/logs # fgrep ClassNotFoundException *.log | uniq -c
      2 error.log:Caused by: java.lang.ClassNotFoundException: org.osgi.service.log.LogService

ahp71:/opt/openfire/logs # fgrep NoClassDefFoundError *.log | uniq -c
     76 all.log:java.lang.NoClassDefFoundError: Could not initialize class org.jitsi.impl.neomedia.device.DeviceConfiguration
      1 error.log:java.lang.NoClassDefFoundError: org/osgi/service/log/LogService
      1 error.log:Caused by: java.lang.NoClassDefFoundError: org/osgi/service/log/LogService
      1 info.log:java.lang.NoClassDefFoundError: Could not initialize class java.awt.Toolkit
    250 info.log:java.lang.NoClassDefFoundError: Could not initialize class org.jitsi.impl.neomedia.device.DeviceConfiguration
      1 warn.log:java.lang.NoClassDefFoundError: Could not initialize class org.jitsi.impl.neomedia.codec.audio.opus.Opus
      2 warn.log:java.lang.NoClassDefFoundError: Could not initialize class org.jitsi.impl.neomedia.codec.audio.speex.Speex

Is this to be expected?

Any idea where to look next?
Perhaps some missing configuration (I did not configure anything special apart from the initial configuration wizard settings after openfire installation, plugin installation and user setup)?
Could it be some Java runtime incompatibility or missing library?

Many thanks for any enlightening idea!

Could you please confirm you are getting the same results with Chrome or Edge Chromium. With 2 users you should still get peer2peer working even if the bridge has issues.

Hi!

Sorry for the late response, I was very busy in the past couple of days. :frowning:

But now I had a chance to test Openfire Meetings again and I can confirm, that it indeed works fine using current Chrome or Chromium browsers under Linux. So far I tested video chat with two users in the same private network as well as video chat with one user internally and the other on another private IPv4 network (using NAT) somewhere on the internet. This all seems to be working fine. I did not test video conferences with more than 2 users yet, this is on my TODO list.

The Openfire server is running on a host in the internal network, but clients access it from outside using a public FQDN by means of an Apache reverse web proxy (for HTTPS and WSS connections on port 443 externally and port 7443 internally) and an nginx stream proxy (for XMPP proxying on port 5222 and 5223 both externally and internally). This setup was a bit of a challenge but seems to be working fine now.

I tested with the Pade ofmeet and offocus plugins.

I used the public Google STUN as preconfigured in the ofmeet plugin server and did not set up my own STUN and TURN server yet. This is on my TODO list, too.

In my previous tests I was using Firefox (in various versions up to 74.0) and with this browser I still get the connection problems I described in my first posting.

I still see many Java exceptions from various components in the Openfire logfiles, though, even with a working video chat connection. Is this to be expected or should I worry about this?

Thanks!

  • andreas

Yes, there are many exceptions. Some are coming from Jitsi and we don’t have any control over them. Some are from openfire or the plugins. It is nothing that some tender loving care would not fix. Until that day comes, I say ignore them if it working and your CPU and memory utilization is within reason :slight_smile:

Hi!

In the past couple of days I did several OpenFire test installations under Debian 10 and CentOS 7.

In my initial tests I used Java 8, but I found that with Java 8 (OpenJDK 1.8.0_242) I get hundreds of NPE’s within an hour. Now I found that with Java 11 (OpenJDK 11.0.6) those NPE’s are almost gone: Within 3 hours I got only 5 NPE’s with Java 11.

And perhaps more important: with Java 11 I finally get successful Jitsi health checks:

2020.04.09 15:33:21 org.jitsi.videobridge.health.Health - Performed a successful health check in 16ms. Sticky failure: false

With Java 8 the health checks always failed with an NPE.

With Java 11 as JRE everything seems to work now, it looks good and I’m quite happy!
Many thanks for your support!

– andreas