Not all Speakers are displaying for MS Teams
Categories
(Core :: WebRTC: Audio/Video, 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:
Screenshot attached.
The speakers that actually produce sound are the Pebble or LG UltraHD, neither of which were available.
Reporter | ||
Comment 1•5 months ago
|
||
I said Meet but it might have been Teams.
Either way, the problem was on the sample page as well.
Comment 2•5 months ago
|
||
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.
Updated•5 months ago
|
Reporter | ||
Updated•5 months ago
|
Comment 3•5 months ago
|
||
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.
Comment 4•5 months ago
|
||
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.
Comment 5•5 months ago
•
|
||
(subject change based on comment 1 and bug 1878107)
-
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, thenSpeakers: Other...
and report which devices are exposed where (in-content vs Firefox prompt), to see if this is the problem. -
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, hitAllow
, 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().
Reporter | ||
Comment 7•5 months ago
|
||
The simple test page defaults correctly and offers all my devices when I click Other.
Comment 8•5 months ago
|
||
(In reply to Jan-Ivar Bruaroey [:jib] (needinfo? me) from comment #5)
- 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.
Comment 9•5 months ago
|
||
Which preferred output device is used by MediaTrackGraph depends on whether a primary input device has any processing (AGC, AED, noise suppression) applied.
Comment 10•5 months ago
|
||
I guess we could always add a virtual system default output device when we don't know which physical device would be used.
Reporter | ||
Comment 11•5 months ago
|
||
In Google Meet, I only have "System Default Speakers"
Even in settings, that's the only speaker.
Updated•5 months ago
|
Comment 12•5 months ago
|
||
Taking this to partners, and potentially trying to choose a better default on Windows.
Comment 13•5 months ago
|
||
In Google Meet, I only have "System Default Speakers"
That's bug 1878107 comment 9.
Comment 14•4 months ago
•
|
||
Update on the 3 things:
- 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/ - I'll raise the https://github.com/w3c/mediacapture-output/issues/133 spec issue at the next WebRTC WG meeting.
- 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?
Comment 15•4 months ago
|
||
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.
Comment 16•4 months ago
|
||
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.
Comment 17•4 months ago
|
||
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.
Description
•