Awful conference performance and unable to troubleshoot it

Problem

Conferencing with Google Meet and alternative on Fedora 42 has awful performance. Even with turned off outgoing video, the incoming A/V streams are stuttering, especially when switching to other tabs. People report that outgoing wired microphone sound is bubbling at start, and there is noticeable lag, which disrupts communication. The bluetooth phones are used as a sound target, and the headset codec is set to AAC.

The actual problem is that there is no way to troubleshoot the performance of the whole pipeline. Which codec depletes resources (100% CPU Core), which is not given the necessary priority, where the mem/swap is occurring.

With the performance tool and troubleshooting manual it is possible to at least distill this to separate issues.

Cause

Not yet known.

dmesg shows this. No idea what it means.

[ 8362.389283] Bluetooth: hci0: corrupted SCO packet
[ 8362.389285] Bluetooth: hci0: corrupted SCO packet
[ 8454.212645] perf: interrupt took too long (3988 > 3987), lowering kernel.perf_event_max_sample_rate to 50000
[ 8740.818540] perf: interrupt took too long (5022 > 4985), lowering kernel.perf_event_max_sample_rate to 39000
[ 8961.649346] Bluetooth: hci0: corrupted SCO packet
[ 8961.649352] Bluetooth: hci0: corrupted SCO packet

Related Issues

Bugzilla report: #NNNN

Workarounds

None yet.

In general, when using a Bluetooth headset with Google Meet or other WebRTC-based apps, the system needs to switch the Bluetooth profile from A2DP (high-quality audio, no mic) to HSP/HFP (lower-quality audio, includes mic support) to allow microphone input.

This profile switching can sometimes lead to:

  • Audio stuttering or poor sound quality (especially in the HSP/HFP profile)
  • Unstable AV streaming during video calls
  • Latency or buffering issues, especially on lower-bandwidth Bluetooth connections

These issues are not unique to Fedora 42, but could relate to how the system handles Bluetooth profile changes, the PipeWire audio stack, or even wireless interference or browser behavior under WebRTC load.

Using a USB microphone while keeping the headset in A2DP mode is one common workaround to maintain better audio output during calls from my experience.

Normally, AAC is used with the A2DP profile, which isn’t supposed to support microphone input—so if a call is active, the profile should have switched to HSP/HFP instead. This raises some questions about whether the profile switching is working correctly.

So if profile switching causes audio stuttering, then it seems like a memory alignment problem or a race condition. Especially if you say that if the profile is HSP/HFP from the start, then there are no problems. So how to diag/check/debug this?

EDIT: I can plug/unplug/connect my headphones/mic no problem. I can open any WebRTC page no problem. But I don’t know where to look to see anything. I am not even sure how to check which codec library/version/path is used by Firefox in the process.

I am using wired microphone with Bluetooth headphones, but it doesn’t help. Switching to a different tab in Firefox helps a bit. I guess because video processing is then disabled, but still I have no idea how to check which codecs are failing to provide optimal performance. I don’t mind lagging video as long as audio plays smoothly.

So how to debug this subsystem? Get all metrics together with profile switches. There is this https://cockpit-project.org/ that I have installed, and it seems to me it comes with system level logging and profiling tools. Can it be scripted to dig all these Bluetooth/codec/AV/conferencing/kernel problems?

The closest thing I could find on its pages is this PCP integration guide PCP Metrics

PCP stands for Performance Co-Pilot, but its web site is rather rough https://pcp.io/ and I can not see any Bluetooth related tutorials.