I updated to Fedora 35 yesterday. Before I cannot connect to my Bluetooth headset, but after the upgrade I can with the default WirePlumber+pipewire+bluez setup, which is great. However, the sound quality is really awful. I think it is because the mSBC codec is used instead of AAC, so I want to change it, but the three sources [1][2][3] I found all relate to the config file in /usr/share/pipewire/media-session.d, which is not present in the Fedora 35 installation since the old simple media session manager is replaced by WirePlumber. So where is the location of WirePlumber’s configuration file and how can I set the default Bluetooth codec for it? I’m sure that the headset can run AAC codec on other devices.
Update: I use the KDE spin and found that I can change the codec in the audio setting icon shown below, but the headset is identified as only HSP/HFP and does not support codec other than CVSD (which is worse) and mSBC. How can I make pipewire recognize more advanced audio profile of the headset?
In addition, previously in Fedora 34 I switched from pulseaudio to pipewire by manually removing pulseaudio and installing pipewire-pulseaudio instead of using dnf swap, which seem to also remove some packages that depends on pluseaudio, such as the bluedevil package for KDE bluetooth plugin. Can I found what other packages have been removed and get them back?
Thanks for the reply! I’ve copied and tried to modify part of the config file (/etc/bluetooth/main.conf and /etc/wireplumber/bluetooth.lua.d/50-bluez-config.lua) according to this guide on ArchWiki, but pactl list still only list three HFP/HSP profiles, as shown below:
Sure, but I think the settings for wireplumber contains the setting for bluez in terms of Bluetooth audio device related settings. My guess is that since this is related to the audio backend the settings cannot be directly applied to bluez. Can I set these audio settings otherwise by directly modifying bluez’s config file, and how can I do that?
I guess what I was getting at was that the physical device Pipewire uses, and hence WirePlumber manages, gets determined by the bluetooth driver? does it not? So as to what you would do WRT how you handled that device (ie how it becomes a source for a corresponding sink in pipewire) is done by wireplumber I would think so yes. The how is very likely in the documentation I pointed to in my previous comment. I don’t have any bluetooth audio devices to test with otherwise I would do so for you.
Update: I’ve tried the method in this GitHub issue of bluez and it works! I think the problem then is that the previous cache profile of my bluetooth headsets are from an older bluez install which is incorrect, and removing the cache and connecting again fix it. I tried deleting the device in GUI without deleting the /var/lib/bluetooth folder and that didn’t work out.
So, that makes me think that my headset (Jabra Elite 45h) supports AAC, but still I cannot choose it. Maybe I’m missing some codec or other stuff? Or maybe AAC is just not supported by the headset?
Right now I only have SBC and SBC-XQ modes when in A2DP. Fedora 35 Silverblue here, fresh install.
AAC available on RPMFussion Non-free. If you already installed RPMFussion, from Gnome Software on the bottom window, there’re codec catagery that have GStreamer Multimedia Codecs - Non Free packages (Multimedia playback for Bluray, DTS, MMS, MP3, MPEG-2 AAC, MPEG-4, Mimic and Siren).
It seems like those plugins are no longer available in rpmfusion
Well, nevermind. I activated UnitedRPMs and installed all possible gstreamer1-plugin packages, including bad-nonfree which should contain the AAC stuff.
Then I just repeated previous steps and the headphones still display the same profiles. So, it seems that after all they don’t support AAC…
Just to make sure. You also need to run sudo dnf group update core (on the very bottom of the docs) to make RPM Fussion list apps available in Gnome Software.