Open Bug 1899771 Opened 5 months ago Updated 4 months ago

Not all Speakers are displaying for MS Teams

Categories

(Core :: WebRTC: Audio/Video, defect)

x86_64
Windows
defect

Tracking

()

People

(Reporter: mkaply, Unassigned)

References

Details

Attachments

(2 files)

I joined a call via Google Meet, and the only two options offered to me by Firefox were not actually usable speakers on my system.

When I joined using Edge, I had access to the correct speakers.

I used this URL to test and saw the same behavior:

https://webrtc.github.io/samples/src/content/devices/input-output/

Here is my profile:

https://profiler.firefox.com/public/0ya2bfxb84b57qtprkb0kq4terqnby4sg8rq9f0/calltree/?globalTrackOrder=0wc&hiddenGlobalTracks=1w9&hiddenLocalTracksByPid=19048-0w357wbde~32260-0w4~45940-0~45756-0~46516-0~43228-01~44004-0w5~38860-0w4~38936-0w3~43760-0w4~41808-0w245~10368-0w469bwdfwk~37188-0235wj&thread=xa&v=10

Screenshot attached.

The speakers that actually produce sound are the Pebble or LG UltraHD, neither of which were available.

I said Meet but it might have been Teams.

Either way, the problem was on the sample page as well.

Jan-Ivar, in the profile above, we see that the speakers Mike would like to use are the default on the system. It feels weird that they're not enumerated.

Flags: needinfo?(jib)
Flags: needinfo?(jib)
Blocks: meet
OS: Unspecified → Windows
Hardware: Unspecified → x86_64

Edge is identifying the Pebble as the default output device, but cubeb is identifying two preferred output devices:

LogMessages — (cubeb) cubeb.c:670:DeviceID: "{0.0.0.00000000}.{e6d38cfd-f6a7-4267-8850-abd03840e92d}" (PREFERRED)
	Name:	"Headphones (Oculus Virtual Audio Device)"
	Group:	"ROOT\MEDIA\0000"
	Vendor:	"(null)"
	Type:	output
	State:	enabled
	Maximum channels:	2
	Format:	S16LE F32LE (0x1010)

LogMessages — (cubeb) cubeb.c:670:DeviceID: "{0.0.0.00000000}.{32ab2bd4-d563-4036-9988-2cdfe23af74e}" (PREFERRED)
	Name:	"Speakers (3- Pebble V3)"
	Group:	"USB\VID_041E&PID_3272&MI_00\8&33572625&0&0000"
	Vendor:	"(null)"
	Type:	output
	State:	enabled
	Maximum channels:	2
	Format:	S16LE F3

Gecko is choosing the last preferred device to treat as the system default.
If the "Oculus Virtual Audio Device" were not a preferred output device, then Gecko would add a virtual "Default audio output device" option so that sound could be output via the system default audio output.

Can you attach about:support or the Output Devices section, please?

I wonder how many kinds of Preferred devices are obviously system configurable?

I wonder whether Gecko can make a better choice for the system default device.

The system default output device presented by enumerateDevices() should be the one used with setSinkId("") (and with no setSinkId() at all). I don't know that anything ensures that.

See Also: → 1769985

(subject change based on comment 1 and bug 1878107)

  1. Fewer devices than Edge: Firefox follows spec which says microphone-use enables discovery of "same groupId" speakers, leaving websites to discover non-mic'ed speakers through selectAudioOutput().

    Please try here, hit Go! + Allow, then Speakers: Other... and report which devices are exposed where (in-content vs Firefox prompt), to see if this is the problem.

  2. The system default device is not listed: There's no need to expose what the default speaker (at the moment) is since it is used by default. How users revert to (dynamic) system default is up to websites (my test page above adds a "Default system output" entry associated with "").

    If your speaker shows up under Speakers: Other..., try selecting it, hit Allow, and then type this into web console:

    await navigator.mediaDevices.enumerateDevices();
    

    See if its groupId matches any listed mics. If not then it not being enumerable with mic-use is by design.

Karl, do I have that right? You've worked on this more recently.

We'll reach out to MS teams. I'll also reach out to other vendors to see about traction of selectAudioOutput().

Summary: Not all Speakers are displaying for Google Meet → Not all Speakers are displaying for MS Teams

Here's an even simpler test page that leaves out microphone entirely.

The simple test page defaults correctly and offers all my devices when I click Other.

(In reply to Jan-Ivar Bruaroey [:jib] (needinfo? me) from comment #5)

  1. The system default device is not listed: There's no need to expose what the default speaker (at the moment) is since it is used by default. How users revert to (dynamic) system default is up to websites (my test page above adds a "Default system output" entry associated with "").

We (perhaps arguably) don't need to expose the physical device behind the system default speaker, but the first "audio-output" device from enumerateDevices() should be the system default, which is not the case is this report. https://github.com/w3c/mediacapture-output/issues/133 is the spec issue tracking this.

Changes for bug 1769985 added a dummy default audio output device to enumerateDevices results when the first exposed output device is not the default, which was expected to mean that a virtual system default output device would be listed (and selectable) in this situation. The concept of multiple system default output devices, and Gecko's perhaps inconsistent treatment thereof, is breaking this.

Which preferred output device is used by MediaTrackGraph depends on whether a primary input device has any processing (AGC, AED, noise suppression) applied.

I guess we could always add a virtual system default output device when we don't know which physical device would be used.

In Google Meet, I only have "System Default Speakers"

Even in settings, that's the only speaker.

No longer blocks: meet
Severity: -- → S3

Taking this to partners, and potentially trying to choose a better default on Windows.

In Google Meet, I only have "System Default Speakers"

That's bug 1878107 comment 9.

See Also: → 1902436

Update on the 3 things:

  1. For non-headset speakers, we've reached out to MS Teams who said selectAudioOutput was on their roadmap. I pointed them at https://blog.mozilla.org/webrtc/how-webrtc-speaker-selection-works/
  2. I'll raise the https://github.com/w3c/mediacapture-output/issues/133 spec issue at the next WebRTC WG meeting.
  3. comment 8: "The concept of multiple system default output devices, and Gecko's perhaps inconsistent treatment thereof, is breaking this." — see also comment 3.

Paul, do you have insights about 3?

Flags: needinfo?(padenot)

On Windows (and only on Windows), there are two default devices: one default communication device, and one default device (usually for listening to music and that sort of thing).

It is possible to know what is what using this enum / field: https://searchfox.org/mozilla-central/source/media/libcubeb/include/cubeb/cubeb.h#369-375,395. Historically, it has been preferred by users to disregard the default communication device, and use the "regular" default device. It's counterintuitive, but is what is preferred by users: there were lots of complaints when we tried picking the default communication input and output devices for voice-type application and the default device for non-voice applications.

Flags: needinfo?(padenot)

Thank you, Paul. Are you implying that users would prefer that we use the "regular" default device even for WebRTC and so we should remove CUBEB_STREAM_PREF_VOICE on Windows (perhaps through "media.cubeb.output_voice_routing") so that cubeb doesn't ever choose the communications default device?

If so, then our enumeration code can be adjusted to mark only the CUBEB_DEVICE_PREF_MULTIMEDIA preferred device as the default device.

Flags: needinfo?(padenot)

As always, it's complicated.

We're envisioning CUBEB_STREAM_PREF_VOICE to convey the fact that the stream is to be used for voice. We're starting to have it enable processing that is geared towards voice (and disabling WebRTC's processing when possible). This pref has been used briefly in the past to control what "default device" was picked, but people didn't like it, and I don't plan to try again as of now.

I think Gecko's enumeration code could indeed only pay attention to CUBEB_DEVICE_PREF_MULTIMEDIA and that would be strictly better. This could be a Gecko patch without touching cubeb, I assume.

Flags: needinfo?(padenot)
See Also: → 1546237
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: