Bluetooth Headphone constantly disconnecting
Recently I bought a new pair of headphones, a JBL Everest Elite 150nc (with noise cancelling). I know it is a little older, but the price was a bargain (like 9 times cheaper that an AirPods Pro) and my previous one, a 3 year old Beats x, died on me.
It is working perfectly on my iPhone, iPad and my wife's windows pc, but when I connected to my MacBook Pro 13-inch (2016 - MacBookPro13,2) running macOS 10.15.5 (19F101) it disconnected when I tried to play anything. It is maddening.
I've tried a bunch of solutions in AskDifferent and none worked:
- Bluetooth peripherals randomly disconnecting under Mavericks
- Bluetooth headphones disconnect a few seconds after connecting on macOS
- Bluetooth headphones not connecting with reason 0x16
Can some help me?
After going nuts for a couple of days, I found a somewhat solution that is working for me.
I reset the bluetooth module with Shift-Option click the BT menu bar item > Debug > Reset the Bluetooth module.
After that I ran the command to read the configuration for the Bluetooth audio daemon.
sudo defaults read bluetoothaudiod
Mine had 0 entries witch means that it is all defaulted to what Bluetooth audio daemon thinks its best.
Then I ran the command bellow.
sudo defaults write bluetoothaudiod "Apple Bitpool Max" 40
sudo defaults write bluetoothaudiod "Disable AAC codec" 1
sudo defaults write bluetoothaudiod "Disable AptX codec" 1
It disables AAC and AptX codec, I think because my BT headphone is a little older is getting some incompatibility with then, and set the max Bitpool to 40 (I think it defaults to 64).
Then I tried to connect my BT headphone again and it's working like a charm for a hole day.
Update
Well. I did find a evidence for my solution...
Using this site and Apple Packet Logger on the Additional Tools for Xcode I extracted
How to create btsnoop log on macOS?
- Download Additional Tools for Xcode
- Mount the DMG
- Open PacketLogger in the Hardware folder
- Stop the capture (Play icon on the top left)
- Clear the list (Trash icon)
- Turn off Bluetooth
- Start the capture (Play icon on the top left)
- Turn on Bluetooth, connect to your headset
- Let it run for at least 30 seconds
- Stop the capture again
- Filter by the device you are trying to find the info (top middle)
- Go to File > Export > BTsnoop...
- Save it on your Desktop for easy reference
- Use this file to upload on the site above
After upload you will be redirected to a page with the info bellow:
Connection:
78:4f:43:78:2e:61 () → b0:91:22:bc:5d:4e (JBL Everest Elite 150NC)
Supported codecs:
Audio SBC (48000 | Mono JointStereo | block: 4 8 12 16 | subbands: 8 | allocation: Loudness | bitpool: 2..40)
Audio non-A2DP (aptX - 48000, Stereo)
Used for audio:
Audio SBC (48000 | JointStereo | block: 16 | subbands: 8 | allocation: Loudness | bitpool: 2..40)
Latest SBC Bitpool value: 40
Update 2
Found other values that work
{
"AAC Bitrate" = 255;
"Apple Initial Bitpool" = 53;
"Enable AAC codec" = 1;
}
I found that my headphone apear to have AAC codec compatibility and enabled it. And for my surprise setting the initial SBC Bitpool above de one it was auto discovering (48) it still works