LE Audio support in PipeWire

Since version 0.3.59, PipeWire supports LE Audio’s Basic Audio Profile (BAP) for Connected Isochronous Streams (CIS) with the Low Complexity Communication Codec (LC3), see https://www.linkedin.com/posts/collabora_add-bluetooth-le-audio-support-1360-activity-6978014601649037312-7W6d/.

Thanks to the modular architecture of PipeWire, it is ready for future codecs.
It supports bi-directional audio and can act as a Central or Peripheral device. In the former case, it allows the end-user to select a new audio profile, while in the latter, it automatically connects Bluetooth audio streams to the local audio input and output. This paves the way for Auracast support in BlueZ and PipeWire.

If you are interested in trying this, the LC3 codec from https://github.com/google/liblc3.git must be installed. The PipeWire meson build must be configured with the option `-Dbluez5-codec-lc3=enabled`.

LE Audio Support

From release 5.66, the initial support for BAP (Basic Audio Profile) which is an essential part of LE Audio responsible for stream control is added.

The plugin is considered experimental and depends on ISO socket in order to work so the following setting needs to be changed in order to enable it:

# Enables D-Bus experimental interfaces
# Possible values: true or false
Experimental = true

# Enables kernel experimental features, alternatively a list of UUIDs
# can be given.
# a6695ace-ee7f-4fb9-881a-5fac66c629af (BlueZ Experimental Offload Codecs)
# 6fbaf188-05e0-496a-9885-d6ddfdb4e03e (BlueZ Experimental ISO socket)
# Defaults to false.
KernelExperimental = 6fbaf188-05e0-496a-9885-d6ddfdb4e03e

While proper support to the likes of PulseAudio and Pipewire are still in progress it is possible to test using bluetoothctl with the following commands:

[Server/Peripheral]
[bluetooth]# power on
[bluetooth]# advertise on
[bluetooth]# endpoint.register 00002bc9-0000-1000-8000-00805f9b34fb 0x06
[/local/endpoint/ep0] Auto Accept (yes/no): y
[/local/endpoint/ep0] CIG (auto/value): a
[/local/endpoint/ep0] CIS (auto/value): a
Capabilities:
03 01 ff 00 02 02 03 02 03 03 05 04 1e 00 f0 00 ................
Endpoint /local/endpoint/ep0 registered
[bluetooth]# endpoint.register 00002bcb-0000-1000-8000-00805f9b34fb 0x06
[/local/endpoint/ep1] Auto Accept (yes/no): y
[/local/endpoint/ep1] CIG (auto/value): a
[/local/endpoint/ep1] CIS (auto/value): a
Capabilities:
03 01 ff 00 02 02 03 02 03 03 05 04 1e 00 f0 00 ................
Endpoint /local/endpoint/ep1 registered

[Client/Central]
[bluetooth]# power on
[bluetooth]# endpoint.register 00002bc9-0000-1000-8000-00805f9b34fb 0x06
[/local/endpoint/ep0] Auto Accept (yes/no): y
[/local/endpoint/ep0] CIG (auto/value): a
[/local/endpoint/ep0] CIS (auto/value): a
Capabilities:
03 01 ff 00 02 02 03 02 03 03 05 04 1e 00 f0 00 ................
Endpoint /local/endpoint/ep0 registered
[bluetooth]# endpoint.register 00002bcb-0000-1000-8000-00805f9b34fb 0x06
[/local/endpoint/ep1] Auto Accept (yes/no): y
[/local/endpoint/ep1] CIG (auto/value): a
[/local/endpoint/ep1] CIS (auto/value): a
Capabilities:
03 01 ff 00 02 02 03 02 03 03 05 04 1e 00 f0 00 ................
Endpoint /local/endpoint/ep1 registered
[bluetooth]# scan on
[bluetooth]# scan off
[bluetooth]# connect
[NEW] Transport /org/bluez/hci0/dev_00_AA_01_01_00_02/pac_source0/fd0
Endpoint: SetConfiguration
Transport /org/bluez/hci0/dev_00_AA_01_01_00_02/pac_source0/fd0
Device: /org/bluez/hci0/dev_00_AA_01_01_00_02
Auto Accepting...
[NEW] Transport /org/bluez/hci0/dev_00_AA_01_01_00_02/pac_sink0/fd1
Endpoint: SetConfiguration
Transport /org/bluez/hci0/dev_00_AA_01_01_00_02/pac_sink0/fd1
Device: /org/bluez/hci0/dev_00_AA_01_01_00_02
Auto Accepting...
[bluetooth]# transport.acquire /org/bluez/hci0/dev_00_AA_01_01_00_02/pac_sink0/fd1

Release of BlueZ 5.66

This release mainly includes the initial support of BAP (Basic Audio Profile) which is an essential part of LE Audio responsible for stream control and VCP (Volume Control Profile). For MESH, new MGMT opcodes are added to share one controller between the legacy bluetooth daemon and the mesh daemon. This release also includes various bug fixes in A2DP, GATT, HOG

bluez-5.66.tar.xz

Release of BlueZ 5.65

This release includes many changes related to the IOS support such as supporting ISO socket via experimental feature support and updating the monitor and tools. It also contains numerous bug fixes on A2DP, AVRCP, SDP, HOG, GATT, and MESH.

bluez-5.65.tar.xz

Release of BlueZ 5.64

This is another release mostly with the bug fixes on HOG, GATT, A2DP, Media, AVDTP, AVRCP, and scanning failure. Also, this release includes a fix for building with old glibc (< 2.25), and other minor issues found with the static code analyzing tool. ISO packet support is added to the emulator as a part of LE Audio development.

bluez-5.64.tar.xz

Release of BlueZ 5.63

This release is mostly a bug fix release, with fixes to features such as GATT, SDP, Daemon, and emulator. It also adds a new MGMT Event for Device Found and Device Lost of Advertisement Monitor.

New build options for sanitizers (lsan, asan, ubsan) are added and it may require installing additional libraries depending on the distros.

bluez-5.63.tar.xz

Study Guide for Linux Developer

The Bluetooth SIG provides the self-study guide for Linux developers to explain the Bluetooth applications on Linux that uses D-Bus and BlueZ stack:

  • Includes a basic introduction to Bluetooth Low Energy (LE).
  • Explains the architecture of Bluetooth systems on Linux
  • Covers the key concepts relating to the interprocess communication system D-Bus and how it is used with the BlueZ stack.
  • Explains how to use D-Bus from the Python programming language to make and receive remote method calls and to emit and receive D-Bus signals.
  • Explains how to write code that acts as a Bluetooth LE Central device using Python, D-Bus and BlueZ, using practical exercises to compliment the theory.
  • Explains how to write code that acts as a Bluetooth LE Peripheral device using Python, D-Bus and BlueZ, using practical exercises to compliment the theory.
  • Illustrates how to set up your Linux kernel and build BlueZ from source to create a Linux environment for Bluetooth application development.

Please go to the Bluetooth Technology for Linux Developer page to find more details and download the study guide package.

Release of BlueZ 5.62

This release updates the sources to use the inclusive language based on the guide from the Bluetooth SIG(Appropriate-Language-Mapping-Table), updates the DBUS API to add new properties for GATT and Adapter. For MESH, it updates the configuration client and adds a new API to export the keys. It adds a new document to describe the errors of D-BUS method returns for connection failure reasons. In addition, it includes the various bug fixes in Core, ATT, AVCTP, AVDTP, and MGMT API.

It recommends using the ELL version 0.44.

bluez-5.62.tar.xz