Symfonium never shows album art on a BMW IDrive (eDrive 8.5) head unit connected via Bluetooth

App version

Production

Issue description

Summary

Symfonium never shows album art on a BMW IDrive (eDrive 8.5) head unit connected via Bluetooth. Other players work fine.

Description

Hi, been using Symfonium for the last two years with as my Jellyfin/Local music player. I have gotten recently a new car with an infotainment system that works from Bluetooth.

When connected to it, the player is able to see the track name, the album and the artists; it is also able to skip and go back a song, and it provides a shuffle button which doesn’t work. But, what I am more concerned about is actually the Cover Art. It does not display it no matter what. This was doubly strange, has, if I played the same songs through my phone’s default music app (Samsung Music, which I installed when debugging), the Cover Art would be present.

Do note, this has always been a problem. I have used Symfonium with a bunch of different cars, not all of which had fancydandy infotainment systems, but the ones that did, never shown the Cover Art.

I have gone through extensive debugging the past few days to try and figure out if there was something I could do from my side, but it seems to be deeply related with either the Samsung’s Bluetooth Stack, Symfonium’s Media Session/player registration or both.

Quick reference

This support ticket was originally based on ticket Missing Bluetooth Album Art/Metadata , but then went off the freaking rails… xd sorry for the long description below

Environment and “Toggled” settings

Environment

  • Samsung S24 Ultra with latest Android Update
  • Symfonium Production with latest update
  • BMW IDrive 8.5 with latest update
  • AVRCP at 1.6
  • “Expose media sessions queue” setting turned on on Symfonium
  • Main media library streamed or cached from Jellyfin

Connection made through Bluetooth. Android Auto was an option but I am not intentionally using it, as I want to use the car’s own “Interface”

“Toggled” Settings

So, I have tried:

  • All AVRCP versions available;
  • Toggling “Expose media sessions queue”
  • Toggling “Disable Media session restoration”
  • Re-pairing Bluetooth with the car on each setting change
  • Playing music from Local Provider, Streamed fromJEllyfin and Cached from Jellyfin.
  • A bunch of other random stuff that I don’t recall to be honest xd

My theory

Preface

So, as I said, I went deep on trying to debug this. I can’t read the logs from the side of the vehicle, and as such I can’t 100% say that the Cover Art missing is caused by situations A,B or C, but I can see what my phone is doing/sending and what my Car is requesting and Receiving… so my educated guess is but that.

I know for a fact why the car shows no Cover Art, I don’t know the mechanisms for this failure and that’s what I want to see with you guys.

What I know is failing.

When using Symfonium as the media player, while the connection is registered as OBEX-able, the car makes no requests for Cover Art, nor does it ever open an OBEX channel.

This is in contrast of other media players, where, when a playback is started, a few milliseconds after an OBEX request from the car is made for the Art, for which the phone responds with the address and then a channel for transmitting said art is opened.

Suspected cause for the missing OBEX channel

When I restart my phone’s Bluetooth, the AVRCP Target service starts, which lists the available media players on my device, which would be at the time of testing Samsung Music Player, VLC and Symfonium. All of these have similar described capabilities (AVRCP 1.6 player bitmask bits), including the Cover Art one, but they have a two different ones. Samsung Music player as both the “Browsing” and the “NowPlaying” bits as true while Symfonium has them at false.

This appears to be relevant because of how my car is accessing metadata. When communicating with my phone, the car requests metadata from Samsung Music Player as:

  1. RX&TX SetBrowsedPlayer player=
  2. RX&TX GetItemAttributes scope=3(Now Playing) which contains the typical metadata BUT ALSO an attr bit 0x08 for COVER_ART_HANDLE
  3. TX Browse COVER_ART_HANDLE=
  4. RX OBEX GET … the image

When Using Symfonium instead, the car never communicates through the Browser Channel, but through generic AVRCP commands:

  1. RX AVRCP GetElementAttributes attrs=TITLE,ARTIST,ALBUM,TRACK#,NUMTRACKS,GENRE,DURATION
  2. TX AVRCP … TITLE=‘Sultry Night’ ARTIST=‘Kenichiro Nishihara’ ALBUM=‘Sincerely…’

This might be relevant as AVRCP GetElementAttributes never references 0x08 AKA the Cover Art handle (I assume it’s just the normal behavirour for GetElementAttributes, which differs fromthe GetItemAttributes).


So my theory is as follows: The car does not show any Cover Art from Symfonium, because it never requests any to begin with. It doesn’t request the art from Symfonium, because it can only request said cover art from a Browsable Player, which, for some reason, Symfonium is not.

< I hit the char limit of th>

Device type

Phone

Media provider

All

Steps to reproduce

The steps to reproduce the problem are simple:

  1. Play music over bluetooth.

What’s more interesting is the steps I have taken to try to debug this (from which the debug logs I have provided originated:

  1. Kill all media players running
  2. Restart Bluetooth
  3. Connect to car
  4. Play local music on Samsung Music Player, skipping songs around
  5. Kill Samsung Music Player, open Symfonium
  6. Play the exact same local music on Symfonium, skipping songs around
  7. Kill Symfonium
    (This test started at 20:32 local time)

When playing through Samsung, Cover Art was uploaded to the car’s infotainment. When using Symfonium, no cover art was present on the infotainment

Additional information

< Continuing the Issue Description text box>

Used tools

I have gathered the Symfonium Debug logs, the Android report enriched with the Bluetooth stack trace.
I have analyzed the debug logs through greps for keywirds such as AVRCP, OBEX, BIP, COVER,…
I h ave analyzed the Bluetooth trace through Wireshark my nemesis.

I will provide all of the above. The Android Report will be limited to the grepped version of itself because: 1-it’s gigantic, 2- contains too much info to be shared publically.

Expected solution and questions

First, questions, are you guys expecting Symfonium “not to be” Browsable on AVRCP?

It does feel like BMW decided that they only wanted to grab Cover Art through Browsable media players, ignoring the fact that even on it’s not browsable state, Symfonium does advertise the Cover Art attibute as a capability when the media session is registered. It is also strange that Symfonium can and techically receives extra calls such as the Shuffle command from the infotainment system, but decides to ignore them? Something seems wrong but I cannot say what, or better, where.

I hope that Symfonium is able to be “Browsable” so that I can see the cover arts <3

Final remarks

I tried to be as brief as possible. English is not my first language so I might just not be able to do it better then this. I have uploaded the logs files described above, but please ask for more. I would really love to not need to go back to Samsung Music and local only files just for the Cover Art of my car.


Also, after coming up with my thesis, I asked Gemini to read through the same logs as I will provide you, to come up with a thesis of it’s own. I tried my best to avoid “poisoning the well” as much as possible (although no approach is perfect when I give the machine pre-grepped logs). It came up with the same conclusing as me: “Symfonium not appearing Browsable appears to be the key distinction, the reason for that being is unknown”.

I wasn’t fully satisfied, so I asked a friend with Claude’s expensive subscription to take an handover from Gemini with the same logs. Claude also came up with the same thesis, although it did analysis a bit further then I did. While I don’t know your stances on LLMs being used on debugging,i can assure you everything I wrote above were my own findings, but I believe that Claude was more eloquent then myself on explaining them, as such I will also provide that conversation. Please do not crucify me I just want my covers >.< . If LLM stuff is frowned upon, just ignore it but please address my findings anyways.

I searched existing issues first

on

I understand that logs are mandatory

on

Log upload name / description

Symfonium never shows album art on a BMW IDrive (eDrive 8.5) head unit connected via Bluetooth. Other players work fine.

Your capture confirms that Samsung advertises Symfonium playback as a non-browsable “Media Player,” after which the BMW requests text metadata without requesting an artwork handle. Android does receive artwork from Symfonium.

Symfonium already provides a browsing service, so the remaining question is why Samsung’s Bluetooth service does not register it.

Please try opening Symfonium before restarting Bluetooth, leave it running, then connect to the car and play. Enable Symfonium debug logging before this test and include the Bluetooth browser-discovery logs from startup.

Hi, thank you for the response and sorry for the late message. I have done as you requested:

  • App running and playing

  • Restarted Bluetooth

  • Connected to car

  • Played on car

  • Skipped around a few tracks.

Same behaviour as before, no images, the rest appears fine.

I have uploaded the Symfonium Log directly from the app like 10 hours ago, and Android Report/Bluetooth Trace just now. Both under my username, I probably wasn’t consistent with the title on the Symfonium log. If you are unable to find it, tell me and I’ll send it again.

Starting to lack idea except one easy test. In the interface advanced settings return the icon to the default one then reboot the phone and try again.

I may have found something try with 15.1.0 beta 6 see changelog for download links.

Hi, thank you for the support. I am unable to test this until Saturday. I’ll get back to you with feedback.

Hey, managed to try the new version earlier. So, some things did change, although not what was the original problem.

What I did

  • Installed 15.1.0B6. Direct APK;
  • Restarted Bluetooth;
  • Played songs in the car, mixture of streamed and locally cached;
  • Shuffled (that’s new);
  • Stopped playing and saved reports
  • Reports named after my name NimbleNebula46 and reference Post15.1.0B6

The test ran at around 12:00, Lisbon Time

What happened

  • Sadly, no cover art yet;
  • BUT, now I can enable and disable shuffle from my infotainment system. This triggers like a “micro reload” of the apps interface, and now my playlist is shuffled. Disabling and enabling the function around reshuffles everything;

Weird edge case

When I first got into the car I was not going to do these tests, just going for a drive, I had installed the beta at that point. For some reason, on the single first drive, there was a crazy amount of delay in between songs, around 10 seconds… this is on local cached songs even. If I skipped quickly various songs, the car would attempt to play all of them a bit. The infotainment interface reacted immediately though.

I have not been able to replicate this behavior and as such I am not really concerned about it. Just wanted to highlight it.

Next steps?

I have submitted the new Symfonium Debug Log and ADB Report (Grepped) with the bluetooth trace. If you see that any other report or if you want other stuff grepped from ADB, let me know.

P.S.: I was reading the subreddit and saw someone getting cover art back on an Nvidia Shield, so something really was fixed. Hopefully I’ll be able to also get Cover Art.

P.S.S.: Thank you for the support, I do not know if we will be able to get my cover art fixed, hopefully we do but the app just got better for me (now i can shuffle :open_mouth: ) so once again, thank you.

Thanks, the new logs confirm that shuffle and repeat commands now reach Symfonium correctly.

For artwork, the phone still registers only Samsung Music as browsable after Bluetooth restarts. There are no browsing connection callbacks in Symfonium’s log during that restart. The car does successfully open the artwork connection, but then never requests an artwork handle or image.

The next step is to check whether Android can find the new validation activity and Symfonium’s browsing service on your phone.

With 15.1.0B6 installed, open Symfonium, then run these commands from your computer with ADB connected. You don’t need to be connected to the car for these checks.

  1. Check the activity used for Bluetooth discovery:

adb shell “cmd package query-activities --components --user 0 -a android.intent.action.VIEW -d content://media/internal/audio/media/1 -t ‘audio/*’ -p app.symfonik.music.player”

  1. Check the browsing service:

adb shell “cmd package query-services --components --user 0 -a android.media.browse.MediaBrowserService -p app.symfonik.music.player”

  1. Save Android’s installed-package information:

adb shell dumpsys package app.symfonik.music.player > symfonium-package.txt

Please paste the output from the first two commands, including if either returns no results, and upload symfonium-package.txt created by the third command. These are read-only checks.

Also, this capture still shows the custom icon. After collecting those results, could you select the default icon, fully reboot the phone, then reconnect to the car and test artwork once more? Please let me know if you already tried that combination.

For the one-off delay between songs, the app’s debug logging starts after the earlier drive, so I can’t establish its cause from this capture. If it happens again, a capture with debug logging enabled beforehand would help.

Hi Tolriq. Here’s the results:

  1. “No activities found”
  2. “app.symfonik.music.player/app.symfonik.core.playback.service.PlayerService”
  3. Result uploaded with my name, reference Post15.1.0B6-ADB

I then removed the icon and themes that installed, Trying to play on the car but same result, metadata shows, Forwards/Backwards/Shuffle works, but no Cover Art. Didn’t know if it is relevant, so I made same three steps without the icon/skin.

  1. “No activities found”
  2. “app.symfonik.music.player/app.symfonik.core.playback.service.PlayerService”
  3. Result uploaded with my name, reference Post15.1.0B6-ADB. File as suffix basic-icon-restart.

Let me know If I can support you anyway else.

Thanks, both uploads confirm that the new Bluetooth discovery activity is installed, and the second confirms the default icon was selected.

I noticed the forum formatted the previous commands with curly quotation marks. Those can change the command’s meaning, so we need to rule that out before relying on “No activities found.”

Please run this version, which needs no quotation marks:

adb shell cmd package query-activities --components --user 0 -a android.intent.action.VIEW -d content://media/internal/audio/media/1 -t audio/mpeg -p app.symfonik.music.player

Please paste its complete output. It should include:

app.symfonik.music.player/app.symfonik.ui.bluetooth.BluetoothValidationActivity

This checks the installed audio filter using a concrete audio type. You don’t need to connect to the car or repeat the icon test.

Also need the device BT APK.

1. Find its location:

adb shell pm path com.android.bluetooth

2. Copy the returned path, removing the package: prefix, then download it:

adb pull /the/returned/path/Bluetooth.apk Bluetooth.apk

Replace /the/returned/path/Bluetooth.apk with the actual path from step 1. These are standard ADB package lookup and file-copy commands.

3. Also capture its package information:

adb shell dumpsys package com.android.bluetooth > bluetooth-package.txt

I have repeated the commands. Here’s the output:

adb shell cmd package query-activities --components --user 0 -a android.intent.action.VIEW -d content://media/internal/audio/media/1 -t audio/mpeg -p app.symfonik.music.player

app.symfonik.music.player/app.symfonik.ui.MainActivity
app.symfonik.music.player/app.symfonik.ui.bluetooth.BluetoothValidationActivity


I have pulled both the apk and the dump. Both uploaded with ref.: BT

Thank you for the support.

Thanks, the APK finally gives us a concrete explanation.

The Bluetooth implementation installed on your phone contains a hardcoded list of apps permitted to support Bluetooth browsing: Samsung Music, its China variant, and Google Play Music.

It skips other apps before even attempting to connect to their browsing service. It also advertises them to the car as a generic non-browsable “Media Player”. This exactly matches your logs and explains why Symfonium receives no browsing connection, despite browsing working through Android Auto.

Combined with your Bluetooth captures, this explains the missing artwork: the BMW does not request an artwork handle or image when Symfonium is advertised this way.

Unfortunately, Symfonium cannot override that hardcoded package-name check. The new validation activity is installed correctly, but cannot bypass this restriction.

Please report this to Samsung, with these technical details:

  • com.android.bluetooth.audio_util.Util.isBrowsablePlayer() hardcodes the three allowed package names.
  • BrowsablePlayerConnector.connectToPlayers() skips all other packages.
  • MediaPlayerList.getMediaPlayerList() advertises them as player 127 with browsable=false.

The Bluetooth package reports version 16 / version code 36. Samsung would need to update this implementation to allow other apps with a valid browsing service.

Edit: Can you confirm it really works with VLC and what exact version ? Or only did with Samsung music.

Sadly my fear was confirmed with this then. I did have a feeling it could be related with Samsung doing something odd. Most likely I’ll open a ticket with them but they won’t change this as it feels very “intentional”.

Tolriq, thank you for the support, the beta version did help fix another issue with the shuffling, just a shame that the Cover Arts are out of question currently.

About VLC, I honest believe I saw cover art when playing local files on VLC, but I just tested it now and it didn’t. Most likely when jumping in between apps I just made a mistake.

Well, thank you anyways, I’ll see if I get lucky on Samsung Support.