Solved MS Teams with camera?

I have been having exactly the same problems with (Web) Teams as zirias@ .
Firefox: all perfect except that I do not see any incoming video and nobody can see my video.
Chromium: everything is perfect except that whatever I am saying nobody can hear. At the same time, everything is fine on various microphone testing sites.

I tried various fake user-agents like Chrome/Windows, Chrome/Linux and that didn't help.
But I never occurred to me to try Firefox user-agent.

BTW, zirias@ , what addon do you use for taking user-agent?
Thank you!
 
Unfortunately, I cannot reproduce the success.
BTW, do you use chromium with sndio or pulseaudio ?
Mine is built without pulseaudio support.
 
Unfortunately, I cannot reproduce the success.
BTW, do you use chromium with sndio or pulseaudio ?
Mine uses sndio, I even have pulse globally disabled in my make.conf ... although I don't think this can be relevant when the mic works on other websites.

Unfortunately, there's no guarantee you have the same version of Teams as me, MS is doing partial rollouts all the time :-( So, this worries me a bit now that it might be broken here again pretty soon as well.
 
zirias@ , looks like I got it to work! And made a somewhat surprising observation / discovery along the way.

The gist is that I expected sndiod to be smarter and to auto-configure itself.
Only when I started running it in foreground with -ddd options I realized that it didn't actually work.
sndioctl confirmed that. I should have tried checking with it earlier!

Anyways, I had to set some flags for sndiod to make it work:
Code:
sndiod_flags="-a on -f rsnd/4"
"rsnd/4" corresponds to /dev/dsp4 and I had to set this despite having hw.snd.default_unit=4.
I also had to use "-a on" :
-a flag
Control whether sndiod opens the audio device or the MIDI port
only when needed or keeps it open all the time. If the flag is
on then the audio device or MIDI port is kept open all the time,
ensuring no other program can steal it. If the flag is off, then
it's automatically closed, allowing other programs to have direct
access to the audio device, or the device to be disconnected.
The default is off.
The wording about "stealing" is, of course, not applicable to FreeBSD where a dsp device can be shared by multiple programs (thanks to cloning).
But it seems that if sndiod does not open the specified device on startup, then it wouldn't open it on demand.

Now to the surprising discovery.
It seems that all microphone test sites that I tried could work perfectly well even when sndiod did not work.
In fact, they work just fine even when sndiod is not started at all.

Only Teams are special. Without properly working sndiod they can reproduce audio, but they cannot record it.
 
The only explanation for the "surprise" that I can think of is that libsndio must have some fallback code in case it cannot talk to sndiod.
And that code seems to use "rsnd" (/dev/dsp) directly.

Maybe Teams/Chromium interact with libsndio in some special way that really requires working sndiod.
Or maybe there is some bug in the fallback code that gets triggered by that interaction.

It would be interesting to hear from people who know sndio internals.
 
Andriy that's a very interesting discovery! I already have audio devices explicitly configured in my sndio:
sndiod_flags="-c 0:7 -j on -s default -f rsnd/2 -m mon -s monitor"

... but I have to admit I have difficulties fully understanding sndiod(8).

I will check whether adding -a will make the newer version of Teams (without faking firefox) work for me as well.
 
I took a shallow dive into sndio source code and I have a couple more discoveries.

sndiod is very close to doing the right things by default, but not quite there, at least, not on my system with my configuration.

First, it looks that -a option is ignored when there is no explicit device specification (-f option).
sndiod has a concept of a default device, rsnd/default, and with OSS that gets resolved to /dev/dsp.
On FreeBSD it's aware, of course, of hw.snd.default_unit, so everything should just work.
Except, as I said, sndiod would operate in the on-demand mode and that does not work for me.

Second issue is specific to my setup.
The on-demand mode does not work because sndiod switches to _sndio:_sndio soon after starting up.
But on my system I have:
Code:
crw-rw----  1 root  operator  0x1df 14 Mar 08:03 /dev/dsp
So, quite obviously sndiod just could not use the device.

So, I think that if I fix the second issue, then things should just start working for me without any special configuration.

P.S.
I think that sndiod should accept -f rsnd/default if the default device needs to be explicitly specified for any reason.
 
Andriy does Teams work for you now in Chromium without faking a user agent?

Because then I'm puzzled again. My /dev/dsp is world-accessible, so this can't be the reason for needing -a :-/
 
zirias@ I still have to impersonate Firefox/Linux just as you discovered.
No impersonation or Chrome/Linux do not work.

So, in my case there were (are) two problems:
  1. my misconfiguration
  2. Teams own weirdness
 
I've just seen for the first time some warning that the "classic" Teams will be disabled soon -> Upgrade your browser.

So, Microphone in Teams on FreeBSD will soon be dead again.

I now sent some feedback. Maybe someone wants to "push" it a bit:
 
Back
Top