Open gregrwm opened 4 years ago
@miketaylr, can you take a look at this one?
Google Voice is only available in the US and we need a valid US phone number to verify the allocated number?
As an aside, i trust that Firefox will catch up with how this already 'just works' on Chromium, but even then, it's a klutsy interface if you just want to change headsets. it begs a simple ability, such as already available on Android, to change from one headset to another, ie changing the 'speaker' and 'microphone' devices as a matched pair/trio when they are in fact a single device. i'm aware such an enhancement would require thoughtful design and coordination across PulseAudio, DE's such as KDE/LXDE/LXQT/Gnome, browsers such as Firefox and Chromium, and web apps such as voice.google.com.
OK, so in terms of unexpected behavior on the site, I'm able to reproduce the following on macOS:
Expected: the new microphone is selected Actual: it appears that no microphones or speakers are available.
Here's a link to a quick screencast: https://miketaylr.com/bzla/voice.mp4
Side note: we're not able to enumerate the list of devices in the Speakers and Ringing section due to media.setsinkid.enabled
not being enabled by default https://bugzilla.mozilla.org/show_bug.cgi?id=1498512 (though setting that to true does not fix this UI bug in the screencast)
Here's the markup for the audio controls, it seems like they're using some custom elements + AngularJS:
<gv-audio-controls _nghost-urc-c21="" class="ng-star-inserted">
<div _ngcontent-urc-c21="" class="full-panel">
<div _ngcontent-urc-c21="" class="section">
<div _ngcontent-urc-c21="" class="header">
<span _ngcontent-urc-c21="" id="mic_label"> Microphone </span>
<span _ngcontent-urc-c21="" class="mic-info">
<mat-icon _ngcontent-urc-c21="" class="icon mat-icon notranslate mat-icon-no-color disabled" large-icon="" role="img" svgicon="mic_none" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fit="" preserveAspectRatio="xMidYMid meet" focusable="false">
<path d="M12 14c1.66 0 3-1.34 3-3V5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3 3 3zm-1-9c0-.55.45-1 1-1s1 .45 1 1v6c0 .55-.45 1-1 1s-1-.45-1-1V5z"></path>
<path d="M17 11c0 2.76-2.24 5-5 5s-5-2.24-5-5H5c0 3.53 2.61 6.43 6 6.92V21h2v-3.08c3.39-.49 6-3.39 6-6.92h-2z"></path>
</svg>
</mat-icon>
<gv-volume-bars _ngcontent-urc-c21="" class="mic-bars" _nghost-urc-c22=""><span _ngcontent-urc-c22="" class="bars volumeLevel0"><span _ngcontent-urc-c22="" class="bar bar0"></span><span _ngcontent-urc-c22="" class="bar bar1"></span><span _ngcontent-urc-c22="" class="bar bar2"></span></span></gv-volume-bars>
</span>
</div>
<mat-form-field _ngcontent-urc-c21="" appearance="outline" class="form mat-form-field ng-tns-c23-26 mat-primary mat-form-field-type-mat-select mat-form-field-appearance-outline mat-form-field-can-float mat-form-field-disabled mat-form-field-should-float">
<div class="mat-form-field-wrapper">
<div class="mat-form-field-flex">
<!----><!---->
<div class="mat-form-field-outline ng-tns-c23-26 ng-star-inserted" style="">
<div class="mat-form-field-outline-start"></div>
<div class="mat-form-field-outline-gap"></div>
<div class="mat-form-field-outline-end"></div>
</div>
<div class="mat-form-field-outline mat-form-field-outline-thick ng-tns-c23-26 ng-star-inserted" style="">
<div class="mat-form-field-outline-start"></div>
<div class="mat-form-field-outline-gap"></div>
<div class="mat-form-field-outline-end"></div>
</div>
<!---->
<div class="mat-form-field-infix">
<mat-select _ngcontent-urc-c21="" aria-labelledby="mic_label" class="mat-select ng-tns-c24-27 ng-star-inserted mat-select-disabled" role="listbox" id="mat-select-9" tabindex="-1" aria-required="false" aria-disabled="true" aria-invalid="false" aria-multiselectable="false">
<div class="mat-select-trigger" aria-hidden="true" cdk-overlay-origin="">
<div class="mat-select-value">
<!----><!---->
<span class="mat-select-value-text ng-tns-c24-27 ng-star-inserted" style="">
<!----><span class="ng-tns-c24-27 ng-star-inserted"> </span><!---->
</span>
</div>
<div class="mat-select-arrow-wrapper">
<div class="mat-select-arrow"></div>
</div>
</div>
<!---->
</mat-select>
<span class="mat-form-field-label-wrapper">
<!---->
</span>
</div>
<!---->
</div>
<!---->
<div class="mat-form-field-subscript-wrapper">
<!----><!---->
<div class="mat-form-field-hint-wrapper ng-tns-c23-26 ng-trigger ng-trigger-transitionMessages ng-star-inserted" style="opacity: 1; transform: translateY(0%);">
<!---->
<div class="mat-form-field-hint-spacer"></div>
</div>
</div>
</div>
</mat-form-field>
<!---->
<div _ngcontent-urc-c21="" class="error ng-star-inserted"> To change this, give Google Voice permission to use your microphone </div>
</div>
<mat-divider _ngcontent-urc-c21="" class="mat-divider mat-divider-horizontal" role="separator" aria-orientation="horizontal"></mat-divider>
<div _ngcontent-urc-c21="" class="section">
<div _ngcontent-urc-c21="" class="header button-header">
<span _ngcontent-urc-c21="" id="ring_label"> Ringing </span>
<span _ngcontent-urc-c21="">
<button _ngcontent-urc-c21="" aria-label="Test ring audio" class="button gmat-button mat-focus-indicator mat-button mat-button-base" mat-button="">
<span class="mat-button-wrapper">
<mat-icon _ngcontent-urc-c21="" class="icon mat-icon notranslate mat-icon-no-color" large-icon="" role="img" svgicon="volume_up" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fit="" preserveAspectRatio="xMidYMid meet" focusable="false">
<path d="M3 9v6h4l5 5V4L7 9H3zm7-.17v6.34L7.83 13H5v-2h2.83L10 8.83zM16.5 12A4.5 4.5 0 0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02z"></path>
<path d="M14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77 0-4.28-2.99-7.86-7-8.77z"></path>
</svg>
</mat-icon>
Test
</span>
<div class="mat-button-ripple mat-ripple" matripple=""></div>
<div class="mat-button-focus-overlay"></div>
</button>
</span>
</div>
<mat-form-field _ngcontent-urc-c21="" appearance="outline" class="form mat-form-field ng-tns-c23-28 mat-primary mat-form-field-type-mat-select mat-form-field-appearance-outline mat-form-field-can-float mat-form-field-disabled mat-form-field-should-float">
<div class="mat-form-field-wrapper">
<div class="mat-form-field-flex">
<!----><!---->
<div class="mat-form-field-outline ng-tns-c23-28 ng-star-inserted" style="">
<div class="mat-form-field-outline-start"></div>
<div class="mat-form-field-outline-gap"></div>
<div class="mat-form-field-outline-end"></div>
</div>
<div class="mat-form-field-outline mat-form-field-outline-thick ng-tns-c23-28 ng-star-inserted" style="">
<div class="mat-form-field-outline-start"></div>
<div class="mat-form-field-outline-gap"></div>
<div class="mat-form-field-outline-end"></div>
</div>
<!---->
<div class="mat-form-field-infix">
<mat-select _ngcontent-urc-c21="" aria-labelledby="ring_label" class="mat-select ng-tns-c24-29 ng-star-inserted mat-select-disabled" role="listbox" id="mat-select-10" tabindex="-1" aria-required="false" aria-disabled="true" aria-invalid="false" aria-multiselectable="false">
<div class="mat-select-trigger" aria-hidden="true" cdk-overlay-origin="">
<div class="mat-select-value">
<!----><!---->
<span class="mat-select-value-text ng-tns-c24-29 ng-star-inserted" style="">
<!----><span class="ng-tns-c24-29 ng-star-inserted"> </span><!---->
</span>
</div>
<div class="mat-select-arrow-wrapper">
<div class="mat-select-arrow"></div>
</div>
</div>
<!---->
</mat-select>
<span class="mat-form-field-label-wrapper">
<!---->
</span>
</div>
<!---->
</div>
<!---->
<div class="mat-form-field-subscript-wrapper">
<!----><!---->
<div class="mat-form-field-hint-wrapper ng-tns-c23-28 ng-trigger ng-trigger-transitionMessages ng-star-inserted" style="opacity: 1; transform: translateY(0%);">
<!---->
<div class="mat-form-field-hint-spacer"></div>
</div>
</div>
</div>
</mat-form-field>
<!---->
<div _ngcontent-urc-c21="" class="error ng-star-inserted"> To change this, give Google Voice permission to use your microphone </div>
</div>
<mat-divider _ngcontent-urc-c21="" class="mat-divider mat-divider-horizontal" role="separator" aria-orientation="horizontal"></mat-divider>
<div _ngcontent-urc-c21="" class="section">
<div _ngcontent-urc-c21="" class="header button-header">
<span _ngcontent-urc-c21="" id="speaker_label"> Speakers </span>
<span _ngcontent-urc-c21="">
<button _ngcontent-urc-c21="" aria-label="Test speakers audio" class="button gmat-button mat-focus-indicator mat-button mat-button-base" mat-button="">
<span class="mat-button-wrapper">
<mat-icon _ngcontent-urc-c21="" class="icon mat-icon notranslate mat-icon-no-color" large-icon="" role="img" svgicon="volume_up" aria-hidden="true">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fit="" preserveAspectRatio="xMidYMid meet" focusable="false">
<path d="M3 9v6h4l5 5V4L7 9H3zm7-.17v6.34L7.83 13H5v-2h2.83L10 8.83zM16.5 12A4.5 4.5 0 0 0 14 7.97v8.05c1.48-.73 2.5-2.25 2.5-4.02z"></path>
<path d="M14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77 0-4.28-2.99-7.86-7-8.77z"></path>
</svg>
</mat-icon>
Test
</span>
<div class="mat-button-ripple mat-ripple" matripple=""></div>
<div class="mat-button-focus-overlay"></div>
</button>
</span>
</div>
<mat-form-field _ngcontent-urc-c21="" appearance="outline" class="form mat-form-field ng-tns-c23-30 mat-primary mat-form-field-type-mat-select mat-form-field-appearance-outline mat-form-field-can-float mat-form-field-disabled mat-form-field-should-float">
<div class="mat-form-field-wrapper">
<div class="mat-form-field-flex">
<!----><!---->
<div class="mat-form-field-outline ng-tns-c23-30 ng-star-inserted" style="">
<div class="mat-form-field-outline-start"></div>
<div class="mat-form-field-outline-gap"></div>
<div class="mat-form-field-outline-end"></div>
</div>
<div class="mat-form-field-outline mat-form-field-outline-thick ng-tns-c23-30 ng-star-inserted" style="">
<div class="mat-form-field-outline-start"></div>
<div class="mat-form-field-outline-gap"></div>
<div class="mat-form-field-outline-end"></div>
</div>
<!---->
<div class="mat-form-field-infix">
<mat-select _ngcontent-urc-c21="" aria-labelledby="speaker_label" class="mat-select ng-tns-c24-31 ng-star-inserted mat-select-disabled" role="listbox" id="mat-select-11" tabindex="-1" aria-required="false" aria-disabled="true" aria-invalid="false" aria-multiselectable="false">
<div class="mat-select-trigger" aria-hidden="true" cdk-overlay-origin="">
<div class="mat-select-value">
<!----><!---->
<span class="mat-select-value-text ng-tns-c24-31 ng-star-inserted" style="">
<!----><span class="ng-tns-c24-31 ng-star-inserted"> </span><!---->
</span>
</div>
<div class="mat-select-arrow-wrapper">
<div class="mat-select-arrow"></div>
</div>
</div>
<!---->
</mat-select>
<span class="mat-form-field-label-wrapper">
<!---->
</span>
</div>
<!---->
</div>
<!---->
<div class="mat-form-field-subscript-wrapper">
<!----><!---->
<div class="mat-form-field-hint-wrapper ng-tns-c23-30 ng-trigger ng-trigger-transitionMessages ng-star-inserted" style="opacity: 1; transform: translateY(0%);">
<!---->
<div class="mat-form-field-hint-spacer"></div>
</div>
</div>
</div>
</mat-form-field>
<!---->
<div _ngcontent-urc-c21="" class="error ng-star-inserted"> To change this, give Google Voice permission to use your microphone </div>
</div>
</div>
<audio _ngcontent-urc-c21="" preload="auto">
<source _ngcontent-urc-c21="" src="https://www.gstatic.com/voice-fe/audio/outbound_ring.mp3" type="audio/mpeg">
</audio>
<audio _ngcontent-urc-c21="" preload="auto">
<source _ngcontent-urc-c21="" src="https://www.gstatic.com/voice-fe/audio/outbound_ring.mp3" type="audio/mpeg">
</audio>
</gv-audio-controls>
There's no errors in the browser console, but some error info does get sent back to Google via https://voice.google.com/u/0/_/jserror?script=https%3A%2F%2Fvoice.google.com%2Fu%2F0%2Fmessages&error=Error%20in%20protected%20function%3A%20Concurrent%20mic%20process%20limit.&line=Not%20available
Error in protected function: Concurrent mic process limit.
There's more info in the POST data, including a stack trace and this buildInfo key that may be useful voice.web-frontend_20200512.06_p0
.
call stack:
g@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2907:30\nNya@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:1309:320\nPya@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:1309:492\nqSa@https://www.gstatic.com/_/voice/_…m=base:2893:169\nx.xt@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2902:206\nx/this.invoke@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2902:110\ne/q.args[0]@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:103:83\n"
trace:
g@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2907:30dr@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:1079:97LV@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:4860:23U4a/<@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:4866:389w.prototype.invoke@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2899:452iA@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:163:291w.prototype.invoke@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2899:414q.prototype.run@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2892:20q/<@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2921:276w.prototype.xt@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2900:384Jt@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:163:180w.prototype.xt@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2900:340q.prototype.hp@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2893:130g@https://www.gstatic.com/_/voice/_/js/k=voice.voice_module_set.en_US.2kNbIOE8kgc.O/am=iA/d=1/ct=zgms/rs=AJAOlGkZU1zgx3CLB0Iskx0ZayGDe4z66w/m=base:2889:388
The Concurrent mic process limit
error comes from Firefox: https://searchfox.org/mozilla-central/source/dom/media/MediaManager.cpp#4143
@adamopenweb do you think someone from the media team could take a look before we reach out to Google (in case they recognize that as an obvious bug on our end)?
Clarifying question: has this ever worked properly in Firefox? My guess is no, but it would be helpful to have the answer to that.
@padenot this sounds to me like the multi-input work which is on your to-do list, correct?
Clarifying question: has this ever worked properly in Firefox?
I'm not 100% sure, but I can try it out on some older builds (like 52, 60, 68, 74).
Actually, this seems to work in 52 (at least the select-ish widget doesn't clear out). I'll run mozregression.
It breaks somewhere between 2017(!)-06-19 and 2017-06-20, but mozregression can't find any more builds in that range:
(there's 18 matches for "media", but I don't know which of them are likely vs unlikely culprits)
@padenot this sounds to me like the multi-input work which is on your to-do list, correct?
Yes.
Also not allowing the input stream to move between devices is intentional. The UI makes users think that the permission is about all microphones but that's not the case, it's for a particular device. @jan-ivar will know more.
Also I don't see anything obvious in the range above. It's not a lot of commits, I can try to have a look at the diff.
To Google Voice team: you're opening the new mic while still holding on to the old one.
This runs into Firefox's NotReadableError: Concurrent mic process limit
(bug 1400488).
Here's a workaround https://jsfiddle.net/jib1/18q692ux/
try {
element.srcObject = await navigator.mediaDevices.getUserMedia({audio});
} catch (e) {
if (e.name != "NotReadableError" || !element.srcObject) throw e;
element.srcObject.getAudioTracks()[0].stop(); // Stop old mic first!
element.srcObject = await navigator.mediaDevices.getUserMedia({audio});
}
Not all hardware allows two mics at once, so having this fallback might be a good idea in general.
Happens even if users pick ☑ Remember this decision
in Firefox & is unrelated to permission.
you're opening the new mic while still holding on to the old one.
Thanks @padenot and @jan-ivar -- I'll route that to Google.
edit: email sent to internal mailing list
(I wonder if the regression related to the UI breaking when using the selec-y thing is not media related, but perhaps on the DOM side of things).
(update: an internal Google ticket has been filed)
According to:
- log into google voice
- click on the headset icon in the top right
- give permission for whatever default device it's prompting for
- select a different microphone and give permission
I can choose between different microphone options and the microphones or speakers are available.
Thanks for the report, but I'm not able to reproduce the issue.
Tested with: Browser / Version: Firefox Nightly 81.0a1 (2020-07-30) Operating System: Windows 10 Pro
@miketaylr can you still reproduce the issue? @gregrwm can you confirm this?
The issue has been fixed.
Tested with: Browser / Version: Firefox Nightly 82.0a1 (2020-09-03) Operating System: Windows 10 Pro
just tested again on Firefox Nightly 82.0a1, running on ubuntu focal...the description of how it works, and doesn't, as in the OP bug description, still stands, it doesn't look fixed from here.
please re-open, in light of the preceeding comment.
Thanks for checking, the issue was not reproducible on our side.
But since you can still reproduce it, I reopen it for further investigation. @cipriansv could you also check on your Linux?
I am able to select all the microphone options from the available selections, one by one.
Tested with: Browser / Version: Firefox Nightly 82.0a1 (2020-09-10) Operating System: Ubuntu 20.04 LTS
I was not able to reproduce the issue. After giving permission to access the microphone, and testing with 3 different sources, I am able to select either one by the menu on the voice.google.com page without having to give permission again.
Tested with: Browser / Version:Firefox Nightly 86.0a1 (2020-12-29 (64-bit) / Chrome Version 87.0.4280.88 (Official Build) (64-bit) Operating System: Ubuntu 20.04.1 LTS x64
it remains that, as in the OP, tho now on ff nightly86.0a1(2020-12-30)(64-bit),
the ring and speaker devices cannot be changed from the voice.google.com menu.
when attempting to change the recording device in pavucontrol, i select a new device on the menu, but it simply doesn't change.
if a call is already in progress and i attempt to change the microphone device on voice.google.com's menu, the microphone stream is lost, the other party can no longer hear me, and i can't change it back.
I was able to reproduce the issue. It seems that after connecting a second Audio source for "Microphone", "Ringing", and "Speakers," only the "Microphone" source is recognized and can be changed from the voice.google.com menu. For "Ringing" and "Speaker "( I have connected a Headset device) it seems that the device is recognized and works, but it is the only option available. In Chrome, all the audio input options are available (e.g in my case: headset, built-in speakers) and can be selected.
Tested with: Browser / Version:Firefox Nightly 86.0a1 (2021-01-21) (64-bit)/ Chrome Version 87.0.4280.141 (Official Build) (64-bit) Operating System: Ubuntu 20.4 LTS x64
URL: https://voice.google.com/u/0/voicemail
Browser / Version: Firefox 79.0 Operating System: Linux Tested Another Browser: Yes Chrome
Problem type: Video or audio doesn't play Description: Media controls are broken or missing Steps to Reproduce: Goto voice.google.com and make a call.
On Chromium (Version 83.0.4103.61 Official Build snap 64-bit), it all just works, both the playback and recording(microphone) devices can be changed either by the menus on the voice.google.com page, or by pavucontrol, whether still before starting a call, or if a call is already in progress. That's 8 different device change conditions that all work properly: (speaker or microphone) (pavucontrol or googlevoice) (beforeCall or inCall).
But on Firefox Nightly, the playback device can be changed only via pavucontrol, not by the menu on the voice.google.com page, and, changing the recording(microphone) device has several issues:
When attempting to change the recording device in pavucontrol, it simply doesn't change, iiuc because the DONT-MOVE flag was improperly set by firefox, see https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/882#note_521241
Note that in "Settings - Microphone permissions", voice.google.com is already set to "Allow", and indeed the microphone works, as long as i don't wish to change the device.
if a call hasn't been started yet and i attempt to change the microphone device on the menu on the voice.google.com page, it does change, however you wouldn't think so, because it shows "To change this, give Google Voice permission to use your microphone". And then i have to dismiss and re-invoke the menu if i want to change it back.
if a call is already in progress and i attempt to change the microphone device on the menu on the voice.google.com page, the menu shows both the changed device and the "To change this" warning just as above, tho meanwhile pavucontrol seems to show that the device has not changed, and in fact the microphone stream is simply gone, the other party can no longer hear me, and i can't change it back.
View the screenshot
Browser Configuration
View console log messages
From webcompat.com with ❤️