Chrome browser fails to handle some builtin microphone audio |
||||||
Issue descriptionChrome Version: 67.0.3396.79 (Official Build) (64-bit) (cohort: 67_win_79) OS: Windows 10 RS 3 This is reproducible on Dell Latitude 3189 device. What steps will reproduce the problem? (1) Make sure the latest version of Flash is installed and enabled in Chrome browser. (2) Go to https://helpx.adobe.com/flash-player.html (3) Right click on Flash content -> Go to settings -> select Microphone tab (4) Allow microphone access if the permission dialog pops out. (5) If no microphone device name is listed, close the dialog and repeat (3) (6) Observe whether microphone can be detected and used. Alternative way to reproduce this issue with HTML5 only: (1) Go to https://www.onlinemictest.com/ (2) Allow microphone access (3) Observe whether microphone can be detected and used. What is the expected result? microphone should be detected and usable. What happens instead? microphone is not detected, and cannot be used Analysis: The audio capture device supports the following audio data format: WAVEFORMATEXTENSIBLE: Format wFormatTag = 65534 nChannels = 4 nSamplesPerSec = 48000 nAvgBytesPerSec = 768000 nBlockAlign = 16 wBitsPerSample = 32 cbSize = 22 Samples union{wValidBitsPerSample, wSamplesPerBlock, wReserved} = 32 dwChannelMask=0 SubFormat Data1 = 3 Data2 = 0 Data3 = 16 Data4[8] = {128, 0, 0, 170, 0, 56, 155, 113} Chrome tries to do the conversion by asking the device to provide the following format: WAVEFORMATEX: wFormatTag = 1 nChannels = 4 nSamplesPerSec = 48000 nAvgBytesPerSec = 384000 nBlockAlign = 8 wBitsPerSample = 16 cbSize = 0 It also uses the above format to call |IAudioClient::Initialize()|, but fails, so audio capture device does not work on that specific laptop (Dell Latitude 3189). I think Chrome should use the supported format to initialize audio capture device, and then do the data conversion from that data format to common PCM format which is used in the mixer. A side issue of Chrome is that when it fails to create audio stream, it does not notify client, the following code segment shows the problem: When the above failure happens, it calls |PepperPlatformAudioInput::OnError()|, but the implementation is no-op, so Pepper flash will not get the notification, and it will block Flash's audio thread forever. /content/renderer/pepper/pepper_platform_audio_input.cc void PepperPlatformAudioInput::OnError() {} I guess the implementation is probably like this: void PepperPlatformAudioInput::OnError() { NotifyStreamCreationFailed(); } Please use labels and text to provide additional information. If this is a regression (i.e., worked before), please consider using the bisect tool (https://www.chromium.org/developers/bisect-builds-py) to help us identify the root cause and more rapidly triage the issue. For graphics-related bugs, please copy/paste the contents of the about:gpu page at the end of this report.
,
Jun 11 2018
,
Jun 11 2018
Thanks for the detailed report/ analysis. Has this behavior changed recently (i.e., did this used to work)? The absence of a notification for the error (failure to connect) condition seems like a bug.
,
Jun 11 2018
This issue does not seem to be a recent injection. The original bug we received was reported against Chrome 64.0.3282.186, so it has been there for a while.
,
Jun 21 2018
Hi All, Is there any update on this issue? Are there any plans to address this in the near future? I have a customer with 4000 units that is affected by this issue. Thanks, Mark Bubel
,
Jun 22 2018
any update? thanks
,
Jun 22 2018
Hi, My name is Ken, and I am the Customer with 4000+ devices. I am at Seattle Public Schools. I am adding myself to this so I can track updates. I will be available for testing with the specific model in question as well if validation is needed. We are currently still purchasing the Dell Latitude 3189 with this issue, so we are expected to have over 4500 of these devices soon, almost exclusively for student use. There could also be future models with this issue as well. Our assignment submission website uses a Flash based Mic recording tool to allow student to attach voice notes along with their assignments. It also helps disabled students use their voice for more efficient submissions. We are working to make Chrome our primary browser for all of the 40,000+ Windows computer at Seattle Schools, but this is a major hurdle in our efforts. Recently Adobe was able to release Flash 30.0.0.113 which fixed the issue in both ActiveX and NPAPI based browsers. The assignment site uses the same plugin as online-voice-recorder.com. Thank you, Ken
,
Jun 22 2018
cc'ing Max, who can comment on the lack of support for this particular hardware. Also, he may have insight into the side issue of what to do in the OnError callback, introduced in this CL: https://chromium.googlesource.com/chromium/src/+/e4faf83271909053e53e988ffc274eb6ef6f7702 If this is a generic error reporting callback, then NotifyStreamCreationFailed wouldn't do the right thing - we might have already successfully reported Open success.
,
Jun 25 2018
Hi, yes. I replaced the OnStateChanged callback with the OnError one in that CL. OnError can either be called during creation (most common case) or afterwards (for example if the device is unplugged). Not sure what it would take to propagate it to flash, looks like NotifyStreamCreationFailed would do before the stream is created. Not sure why we're not open the mic properly though. + some people who works on the Windows code (this may also affect WebRTC?).
,
Jun 25 2018
The format is KSDATAFORMAT_SUBTYPE_IEEE_FLOAT, which should be convertible to fixed PCM by Windows. Perhaps it doesn't because of 4 channels. xzhang: can you please check the error code form IAudioClient::Initialize? You can see it in chrome://histograms under Media.Audio.Capture.Win.InitError, after the problem happens. (Restart the browser first to reset the data, or compare before and after.) Also, is it possible to change number of channels on the input device in the system settings? Try 1 or 2 channels and see if the problem persists.
,
Jun 25 2018
IAudioClient::Initialize returns E_INVALIDARG chrome://histograms shows: Histogram: Media.Audio.Capture.Win.InitError.FormatRelated recorded 1 samples, mean = 3.0 (flags = 0x41) That device only supports 2 default formats: 4 channel, 16 bit, 48000 Hz (DVD Quality) 4 channel, 24 bit, 48000 Hz (Studio Quality)
,
Jul 13
|
||||||
►
Sign in to add a comment |
||||||
Comment 1 by jecl...@adobe.com
, Jun 11 2018