July 7, 2021

— Contributed by Ka Ho Ng

This project marks the introduction to my internship in FreeBSD Foundation.

Conferencing and online video meeting software has become an increasingly popular choice for remote working and video calling, especially since the pandemic at the beginning of 2020. There are a number of popular platforms floating around, such as Google Hangouts and Skype. However, there are not many online resources available showing how well the different platforms work on FreeBSD desktop environments.

For FreeBSD desktop users, it is also important that we have a variety of choices on hand when it comes to online meetings. This ensures productivity even when developers are remote from the working site.

I decided to spend a few days testing how well the web-based online conferencing applications are working. I did not investigate non web-based online conferencing as browsers are supposed to be widely available to different users.


Support matrix

The tests were done by trying different platforms on Firefox and Chromium.

Under Firefox (89.0+):

SoftwareChatAudioCameraScreencasting
Google MeetWorksWorksWorksWorks
Google HangoutsWorksWorksWorksWorks
Microsoft TeamsWorksWorks [1]NoNo
ZoomWorksWorksWorksWorks
JitsiWorksWorksWorksWorks
SlackWorksWorks [1]Receiving does not workN/A
SkypeWorks [1]Works [1]NoNo
Cisco WebexWorksWorks [2]NoNo

Under Chromium:

SoftwareChatAudioCameraScreencasting
Google MeetWorksWorksWorksWorks
Google HangoutsWorksWorksWorksWorks
Microsoft TeamsWorksWorksWorksWorks
ZoomWorksWorksWorksWorks
JitsiWorksWorksWorksWorks
SlackWorksWorks [3]Works [3]N/A
SkypeWorksWorksWorksWorks
Cisco WebexWorksWorksWorksWorks

Remarks

Most of the web-based online conferencing software are actually working out-of-box. For products which do not work out-of-box, I will try to follow up with simple solutions. For browser detection, I always try user-agent spoofing to see if it is just artificial limit or fundamental limits due to how WebRTC and related APIs work on different browsers. In most cases, the enforcement of browser detection is mainly due to the WebRTC support difference between different browsers rather than artificial limits.

Microsoft Teams on Firefox (89.0):

When using Microsoft Teams on Firefox, the following dialog was shown:

Use the app or a supported browser
To start a meeting in a channel, download the desktop app or use a supported browser like Google Chrome or Microsoft Edge. Learn more

Then I tried to set my user-agent to the following string: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 or Mozilla/5.0 (X11; FreeBSD amd64; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36, to spoof the browser as if it was Chrome.

Audio was working fine after spoofing, however camera streaming and screen-casting did not work. Despite the UI of Teams changes when camera or screen-casting were enabled, no content appeared on the UI.

Skype on Firefox (89.0):

The situation is the same as trying out Microsoft Teams on Firefox.

Slack on Firefox (79.0+):

Without user-agent string spoofing, a notification like the following will be shown:

Unfortunately, Slack calls aren't available in this browser. We recommend downloading the Slack desktop app, or you can switch to Chrome.

After setting user-agent string of the browser to Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 or Mozilla/5.0 (X11; FreeBSD amd64; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36, I could initiate and join a call. However, only audio recording is running so far. Also, when the prompt asking for recording permission popped out, you had to tick “Remember this decision”. Otherwise, when the prompt popped out again asking for a recording permission, it would be likely that your playback would be muted.

Camera streaming is fine. However receiving camera video stream fails with a static image showing “Your client does not support hardware acceleration.”

Webex on Firefox (79.0+):

Without user-agent string spoofing, a notification like the following will be shown:

Your browser, browser version, or operating system is currently unsupported.
 
For details, check the system requirements.

After setting user-agent string of the browser to Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0 or Mozilla/5.0 (X11; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0, which corresponded to Windows and Linux’s Firefox user-agent string, audio calls worked. However, nothing was shown on the other side when camera streaming or screen-casting was enabled.

Slack on Chromium (87.0+):

Webcam has to be presented in order to run Chromium. Webcamd was used to drive USB webcams on my side when testing Slack on Chromium. Without multimedia/webcamd, the client interface gets stuck at connection attempts.


Conclusion

Many of the most common products are working out-of-box without any workarounds. This is a good sign that FreeBSD users do not need to rely on user space ABI emulations or virtualizations to connect to the remote working sites. For those that did not work out-of-box, the main issue so far is mostly related to the compatibility of implementations of WebRTC on different browsers. Some of the issues found when running video meeting software on Chromium are due to bugs introduced recently on Chromium, which fails to detect the connection availability on FreeBSD. By figuring out the issues we have so far, we hope to provide some diagnostic reports on these issues to the development community of different browsers.


Notes

[1] Setting user-agent to Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 or Mozilla/5.0 (X11; FreeBSD amd64; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36 works.
[2] Setting user-agent’s OS string to Windows/Linux works.
[3] Requires the presence of V4L2 webcam. Use multimedia/webcamd for V4L2 webcam.