webcompat / web-bugs

A place to report bugs on websites.
https://webcompat.com
Mozilla Public License 2.0
746 stars 67 forks source link

voice.google.com - unable to select different audio source (after selecting initial one) #53808

Open gregrwm opened 4 years ago

gregrwm commented 4 years ago

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 screenshotScreenshot
Browser Configuration
  • gfx.webrender.all: false
  • gfx.webrender.blob-images: true
  • gfx.webrender.enabled: false
  • image.mem.shared: true
  • buildID: 20200605043926
  • channel: nightly
  • hasTouchScreen: false
  • mixed active content blocked: false
  • mixed passive content blocked: false
  • tracking content blocked: false

View console log messages

From webcompat.com with ❤️

cipriansv commented 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?

gregrwm commented 4 years ago

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.

miketaylr commented 4 years ago

OK, so in terms of unexpected behavior on the site, I'm able to reproduce the following on macOS:

  1. log into google voice
  2. click on the headset icon in the top right
  3. give permission for whatever default device it's prompting for
  4. select a different microphone and give permission

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)

miketaylr commented 4 years ago

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">&nbsp;</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">&nbsp;</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">&nbsp;</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>
miketaylr commented 4 years ago

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
miketaylr commented 4 years ago

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)?

nils-ohlmeier commented 4 years ago

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?

miketaylr commented 4 years ago

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).

miketaylr commented 4 years ago

Actually, this seems to work in 52 (at least the select-ish widget doesn't clear out). I'll run mozregression.

miketaylr commented 4 years ago

It breaks somewhere between 2017(!)-06-19 and 2017-06-20, but mozregression can't find any more builds in that range:

https://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=95543bdc59bd038a3d5d084b85a4fec493c349ee&tochange=7a6baa6cca3292e8099e652b64d27e74df560874

(there's 18 matches for "media", but I don't know which of them are likely vs unlikely culprits)

padenot commented 4 years ago

@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.

jan-ivar commented 4 years ago

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.

miketaylr commented 4 years ago

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

miketaylr commented 4 years ago

(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).

miketaylr commented 4 years ago

(update: an internal Google ticket has been filed)

softvision-oana-arbuzov commented 4 years ago

According to:

  1. log into google voice
  2. click on the headset icon in the top right
  3. give permission for whatever default device it's prompting for
  4. select a different microphone and give permission

I can choose between different microphone options and the microphones or speakers are available. image image

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?

softvision-oana-arbuzov commented 4 years ago

The issue has been fixed. image

Tested with: Browser / Version: Firefox Nightly 82.0a1 (2020-09-03) Operating System: Windows 10 Pro

gregrwm commented 4 years ago

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.

gregrwm commented 4 years ago

please re-open, in light of the preceeding comment.

softvision-oana-arbuzov commented 4 years ago

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?

cipriansv commented 4 years ago

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

softvision-raul-bucata commented 3 years ago

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. googlevoice

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

gregrwm commented 3 years ago

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.

softvision-raul-bucata commented 3 years ago

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.

pavucontrol

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