BLE Audio introduces new role names at each layer of the stack and a precise vocabulary for audio streams. Understanding what Initiator, Acceptor, CIS, CIG, and BIG mean is essential before working on any BLE Audio profile or BlueZ implementation.
1. Role Naming Across Layers
Each layer adds more specificity. The same physical device has a different role name at each layer — this is intentional because higher layers define more precise responsibilities.
| Layer | Phone / Laptop Side | Earbud / Hearing Aid Side |
|---|---|---|
| Core (BT Spec) | Central Sends commands |
Peripheral Responds to commands |
| BAP (Basic Audio Profile) | Client Reads/writes GATT characteristics |
Server Hosts GATT services (ASCS, PACS) |
| CAP (Common Audio Profile) | Initiator Sets up & schedules Isochronous Streams |
Acceptor Accepts & participates in streams |
2. Streaming Terminology
BLE Audio uses three nested terms to describe how audio travels. Each has a precise scope:
| Audio IN (Analogue) |
→ | LC3 Encode |
→ | SDU Core packs |
→ | PDU Air Tx |
→ | PDU received |
→ | LC3 Decode |
→ | Audio OUT (Speaker) |
| ◄─────────────── Isochronous Stream (SDU → PDU transport, retransmissions, sync) ───────────────► | |||||||||||
| ◄──────────────────── Audio Stream (encoded audio over Isochronous Stream, BAP-defined) ────────────────────► | |||||||||||
| ◄────────────────────── Audio Channel (end-to-end: analogue in to analogue out, unidirectional) ──────────────────────► | |||||||||||
| Term | What it covers | Direction |
|---|---|---|
| Audio Channel | Full end-to-end path: analogue IN → BT → analogue OUT. Like a wired headphone connection. | Unidirectional |
| Audio Stream | Encoded audio flowing over an Isochronous Stream. Defined in BAP. Goes from encoder output to decoder input. | Unidirectional |
| Isochronous Stream | Transport mechanism: SDUs packaged into PDUs, sent over air. Includes retransmissions and buffering for multi-stream sync. | Uni or Bi |
3. CIG, CIS and BIG — Grouping Streams
The Core bundles related Isochronous Streams into groups so they share a time reference — critical for synchronized playback on two earbuds.
|
UNICAST
CIG
Connected Isochronous Group
CIS 0
CIS 1
Requires ACL connection first.
One or more CISes per CIG. |
BROADCAST
BIG
Broadcast Isochronous Group
BIS 0
BIS 1
No ACL connection needed.
Any scanner can receive it. |
|
❌ Two Separate CISes (wastes airtime)
2 separate streams, 2 time slots
|
✅ Bidirectional CIS (saves airtime)
1 stream, carries both directions — preferred choice
|
4. BlueZ: Setting Up a CIS (ISO Socket API)
BlueZ 5.64+ introduced the ISO socket API (BTPROTO_ISO) for CIS and BIS. This maps directly to the CIG/CIS model.
connect() call triggers HCI LE Set CIG Parameters (to configure the CIG at the controller) followed by LE Create CIS. BlueZ maps these automatically from the QoS struct — you don’t write HCI commands manually.