Closed Bug 1385258 Opened 7 years ago Closed 7 years ago

On Linux, use dummy audio devices for WebRTC

Categories

(Core :: WebRTC: Audio/Video, enhancement, P1)

enhancement

Tracking

()

RESOLVED WONTFIX

People

(Reporter: padenot, Assigned: padenot)

References

Details

(Keywords: stale-bug)

Attachments

(1 file)

It's quite wasteful to use the normal devices, it does tons of IPC and such, and we're using cubeb regardless.
Assignee: nobody → padenot
Rank: 18
Priority: -- → P1
Blocks: 1384655
Comment on attachment 8891322 [details]
Bug 1385258 - Use dummy audio device with WebRTC on Linux.

https://reviewboard.mozilla.org/r/162526/#review167792
Attachment #8891322 - Flags: review?(dminor) → review+
Comment on attachment 8891322 [details]
Bug 1385258 - Use dummy audio device with WebRTC on Linux.

With the patch applied neither PulseAudio-only (default) nor ALSA-only work on FreeBSD. getUserMedia test fails with: "NotFoundError: The object can not be found here.".

https://mozilla.github.io/webrtc-landing/gum_test.html
Attachment #8891322 - Flags: feedback-
Perhaps we should revert the changes to include_alsa_audio and include_pulse_audio in gyp.mozbuild, and add 'OS!="freebsd"'" to the changes to audio_device.gypi so we only get the DummyAudio device on Linux and not FreeBSD.

Does this mean we do not use cubeb on FreeBSD?
Comment on attachment 8891322 [details]
Bug 1385258 - Use dummy audio device with WebRTC on Linux.

https://reviewboard.mozilla.org/r/162526/#review167806
Attachment #8891322 - Flags: review+
Can you explain why this is Linux-specific? Why not just define include_internal_audio_device=0 on all platforms?
(In reply to Dan Minor [:dminor] from comment #4)
> Does this mean we do not use cubeb on FreeBSD?

It does or HTML5 audio wouldn't work. Do you mean WebRTC in particular? Looking under dom/media/webrtc/ I don't see Linux-specific code, so any backend that implements .enumerate_devices op should work.

Here's what about:support shows:

PulseAudio:
  Media
  Audio Backend	pulse-rust
  Max Channels	2
  Preferred Channel Layout	stereo
  Preferred Sample Rate	44100
  Output Devices
  Name 	Group 	Vendor 	State 	Preferred 	Format 	Channels 	Rate 	Latency
  /dev/dsp0			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp1			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp2			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp3			Enabled	All	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp4			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp5			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp6			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Input Devices
  Name 	Group 	Vendor 	State 	Preferred 	Format 	Channels 	Rate 	Latency
  Monitor of /dev/dsp0			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Monitor of /dev/dsp1			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Monitor of /dev/dsp2			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp3			Enabled	All	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Monitor of /dev/dsp3			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  /dev/dsp4			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Monitor of /dev/dsp4			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Monitor of /dev/dsp5			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0
  Monitor of /dev/dsp6			Enabled	None	default: S16LE, support: S16LE S16BE F32LE F32BE	2	default: 44100, support: 1 - 384000	0 - 0

ALSA:
  Media
  Audio Backend	alsa
  Max Channels	10000
  Preferred Channel Layout	unknown
  Preferred Sample Rate	44100
  Output Devices
  Name 	Group 	Vendor 	State 	Preferred 	Format 	Channels 	Rate 	Latency
  default	default	default	Enabled	All	default: S16LE, support: S16LE	10000	default: 44100, support: 44100 - 44100	0 - 0
  Input Devices
  Name 	Group 	Vendor 	State 	Preferred 	Format 	Channels 	Rate 	Latency
  default	default	default	Enabled	All	default: S16LE, support: S16LE	10000	default: 44100, support: 44100 - 44100	0 - 0
This is an assigned P1 bug without activity in two weeks. 

If you intend to continue working on this bug for the current release/iteration/sprint, remove the 'stale-bug' keyword.

Otherwise we'll reset the priority of the bug back to '--' on Monday, August 28th.
Keywords: stale-bug
Does FreeBSD set the media.navigator.audio.full_duplex pref to true?  That seems to be required for WebRTC to use Cubeb instead of the  media/webrtc/... audio layer, if I'm reading the code around https://searchfox.org/mozilla-central/rev/18c16ebf818abb86805ce08a6e537e4cd826f044/dom/media/webrtc/MediaEngineWebRTC.cpp#317 correctly.
(In reply to Jed Davis [:jld] (⏰UTC-6) from comment #11)
> Does FreeBSD set the media.navigator.audio.full_duplex pref to true?

No. With the pref enabled PulseAudio works fine but ALSA shows "NotReadableError: Failed to allocate audiosource" probably because FreeBSD uses OSS plugin instead of in-kernel support.
Can you drop media.navigator.audio.full_duplex=false support if you plan to break it on any/all platform?
Flags: needinfo?(padenot)
JACK also shows "NotReadableError: Failed to allocate audiosource" with media.navigator.audio.full_duplex=true on FreeBSD. With the patch applied the pref has no effect, similar to comment 3.
Instead of continuing to use old interfaces in webrtc.org that are not supported upstream, we'll take the proper route and modify gecko to use the new, supported audio processing interfaces.

I'm closing this, because it's not relevant anymore. It's hacky, fragile, and hurts downstream maintainers.
Status: NEW → RESOLVED
Closed: 7 years ago
Flags: needinfo?(padenot)
Resolution: --- → WONTFIX
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: