Sample Header Ad - 728x90

Why doesn't org.bluez.MediaPlayer1 appear when my Raspberry Pi connects to my iPhone via Bluetooth?

0 votes
0 answers
17 views
I'm using a Raspberry Pi with BlueZ 5.66 and Linux 6.6. I want to use the Pi as a Bluetooth audio sink (A2DP) and AVRCP controller so I can stream audio from an iPhone and control playback (play/pause/next/etc) via D-Bus using the org.bluez.MediaPlayer1 interface. This works correctly when the iPhone initiates the Bluetooth connection to the Pi. I can see the MediaPlayer1 interface under the device path on D-Bus, and playback control works. However, if I initiate the connection from the Pi using:
bluetoothctl connect XX:XX:XX:XX:XX:XX
…the connection succeeds, but org.bluez.MediaPlayer1 never appears. Even if I start playback on the iPhone afterward, the interface is still missing. I'm using BlueZ as the Bluetooth stack and BlueALSA for audio. I'm not using PulseAudio and would prefer to avoid it due to its complexity. From what I understand, MediaPlayer1 is exposed by BlueZ when acting as an AVRCP controller and detecting a remote media player. Is there a way to force or trigger org.bluez.MediaPlayer1 to appear when the Pi initiates the Bluetooth connection to the iPhone? Are there any known limitations, timing issues, or configuration-based workarounds that would allow this to work more reliably (ideally without switching to PulseAudio)? **Steps to reproduce:** 1. Pair and trust the iPhone:
bluetoothctl
   power on
   agent on
   default-agent
   pair XX:XX:XX:XX:XX:XX
   trust XX:XX:XX:XX:XX:XX
   connect XX:XX:XX:XX:XX:XX
2. Start music playback on the iPhone. 3. Check D-Bus for /player0:
busctl tree org.bluez
**Expected:** A /org/bluez/hci0/dev_XX_XX_XX_XX_XX_XX/player0 path should appear, with org.bluez.MediaPlayer1 exposed. **Actual:** That path and interface only appear if the iPhone initiates the Bluetooth connection to the Pi. They never appear if the Pi initiates the connection.
Asked by joeyvanlierop (1 rep)
Jul 28, 2025, 07:05 PM