[GH-ISSUE #104] No AirPlay playback #50

Closed
opened 2026-02-27 19:28:07 +03:00 by kerem · 14 comments
Owner

Originally created by @kob04 on GitHub (Jan 2, 2026).
Original GitHub issue: https://github.com/lox-audioserver/lox-audioserver/issues/104

AirPlay playback doesn’t works. All setup works perfect, but no music on device.

Originally created by @kob04 on GitHub (Jan 2, 2026). Original GitHub issue: https://github.com/lox-audioserver/lox-audioserver/issues/104 AirPlay playback doesn’t works. All setup works perfect, but no music on device.
kerem closed this issue 2026-02-27 19:28:07 +03:00
Author
Owner

@rudyberends commented on GitHub (Jan 2, 2026):

Do you mean AirPlay output to a zone (streaming from the audio server to an AirPlay speaker), or AirPlay input (an iPhone/Mac streaming into lox-audioserver)?

If you mean AirPlay output: were you able to set it up successfully (speaker discovery shows up, you can select it, pairing/connection works, etc.)?

To pinpoint what’s failing, I’ll need a debug log captured while you press play / start the stream, covering the few seconds before and after the attempt.

<!-- gh-comment-id:3706264352 --> @rudyberends commented on GitHub (Jan 2, 2026): Do you mean AirPlay output to a zone (streaming from the audio server to an AirPlay speaker), or AirPlay input (an iPhone/Mac streaming into lox-audioserver)? If you mean AirPlay output: were you able to set it up successfully (speaker discovery shows up, you can select it, pairing/connection works, etc.)? To pinpoint what’s failing, I’ll need a debug log captured while you press play / start the stream, covering the few seconds before and after the attempt.
Author
Owner

@christophpichlmaier commented on GitHub (Jan 2, 2026):

Screenshot_20260102-232908.jpg

Processor] [command=audio/cfg/getservicefolder/custom/custom/start/0/20] command received
[2026-01-02T22:19:17.115Z][DEBUG][Content|Manager] [folderId=start limit=20 offset=0 service=custom user=custom] content cache miss
[2026-01-02T22:19:25.837Z][DEBUG][LoxoneHttp|Processor] [command=audio/31/serviceplay/radio/nouser/https://live-nors.sharp-stream.com/nors19.mp3/?q&ZW5mb3JjZVVzZXI9dHJ1ZQ] command received
[2026-01-02T22:19:25.838Z][INFO][Zones|Manager] [hasParentContext=false normalizedTarget=https://live-nors.sharp-stream.com/nors19.mp3 resolvedTarget=https://live-nors.sharp-stream.com/nors19.mp3 station="" type=serviceplay uri=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] playContent
[2026-01-02T22:19:25.839Z][DEBUG][Zones|Manager] [expandedCount=0 isAppleMusic=false isMusicAssistant=false queueSourcePath=https://live-nors.sharp-stream.com/nors19.mp3 resolvedTarget=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] queue build resolved
[2026-01-02T22:19:25.840Z][DEBUG][Zones|Manager] [authority=local items=1 startIndex=0 target=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] queue rebuilt
[2026-01-02T22:19:25.841Z][DEBUG][Audio|UrlProxy] [proxyUrl=http://127.0.0.1:7090/streams/proxy?u=https%3A%2F%2Flive-nors.sharp-stream.com%2Fnors19.mp3 targetUrl=https://live-nors.sharp-stream.com/nors19.mp3] proxying audio url for ffmpeg
[2026-01-02T22:19:25.842Z][INFO][Audio|Manager] [hasStream=false label=https://live-nors.sharp-stream.com/nors19.mp3 sourceKind=url zoneId=31] startWithResolvedSource
[2026-01-02T22:19:25.842Z][INFO][Audio|Manager] [handoff=false kind=url profiles=["mp3"] zoneId=31] starting audio engine
[2026-01-02T22:19:25.843Z][INFO][Audio|Session] [maxBufferBytes=8192 outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=mp3 targetLeadMs=1000 zoneId=31] audio session buffer config
[2026-01-02T22:19:25.843Z][DEBUG][Audio|Session] [args=["-hide_banner","-loglevel","error","-fflags","nobuffer","-probesize","32k","-analyzeduration","0","-reconnect","1","-reconnect_streamed","1","-reconnect_delay_max","5","-i","http://127.0.0.1:7090/streams/proxy?u=https%3A%2F%2Flive-nors.sharp-stream.com%2Fnors19.mp3","-vn","-acodec","libmp3lame","-ar","44100","-ac","2","-b:a","256k","-af","aresample=resampler=soxr:precision=28:cutoff=0.97:async=1","-f","mp3","pipe:1"] outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=mp3 zoneId=31] spawning ffmpeg
[2026-01-02T22:19:25.847Z][INFO][Audio|Engine] [profile=mp3 source=url zoneId=31] audio session started
[2026-01-02T22:19:25.848Z][INFO][Audio|Manager] [source=https://live-nors.sharp-stream.com/nors19.mp3 stream=31-1d10c39a-c847-49d5-a5e3-e9fe9fab113c title="The Beat (Oslo)" zoneId=31] playback started
[2026-01-02T22:19:25.849Z][DEBUG][Zones|Manager] [action=play transportCount=0 transportTypes=[] zoneId=31] dispatchTransports
[2026-01-02T22:19:25.899Z][DEBUG][LoxoneHttp|Processor] [command=audio/31/recent] command received
[2026-01-02T22:19:27.415Z][INFO][Audio|Session] [bytes=116 profile=mp3 zoneId=31] ffmpeg first chunk
[2026-01-02T22:19:38.532Z][DEBUG][LoxoneHttp|Processor] [command=audio/31/pause] command received
[2026-01-02T22:19:38.533Z][INFO][Audio|Engine] [zoneId=31] audio session stopped
[2026-01-02T22:19:38.534Z][DEBUG][Audio|Manager] [source=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] playback paused
[2026-01-02T22:19:38.534Z][DEBUG][Zones|Manager] [action=pause transportCount=0 transportTypes=[] zoneId=31] dispatchTransports
[2026-01-02T22:19:38.535Z][DEBUG][Zones|Manager] [action=pause transportCount=0 transportTypes=[] zoneId=31] dispatchTransports
[2026-01-02T22:19:38.958Z][DEBUG][Audio|Session] [zoneId=31] ffmpeg stdout closed
[2026-01-02T22:19:38.958Z][INFO][Audio|Session] [bufferedBytes=7523 code=255 earlyExit=false runMs=13114 signal=null stderr=undefined stderrAt=undefined subscribers=0 totalBytes=636249 zoneId=31] ffmpeg exited
[2026-01-02T22:19:42.450Z][DEBUG][LoxoneHttp|WS] [total=3] ws disconnected
[2026-01-02T22:24:27.936Z][DEBUG][LoxoneHttp|Processor] [command=audio/cfg/miniservertime

<!-- gh-comment-id:3706348297 --> @christophpichlmaier commented on GitHub (Jan 2, 2026): ![Screenshot_20260102-232908.jpg](https://github.com/user-attachments/assets/2620f036-cecf-4526-a349-493653ad52bf) Processor] [command=audio/cfg/getservicefolder/custom/custom/start/0/20] command received [2026-01-02T22:19:17.115Z][DEBUG][Content|Manager] [folderId=start limit=20 offset=0 service=custom user=custom] content cache miss [2026-01-02T22:19:25.837Z][DEBUG][LoxoneHttp|Processor] [command=audio/31/serviceplay/radio/nouser/https://live-nors.sharp-stream.com/nors19.mp3/?q&ZW5mb3JjZVVzZXI9dHJ1ZQ] command received [2026-01-02T22:19:25.838Z][INFO][Zones|Manager] [hasParentContext=false normalizedTarget=https://live-nors.sharp-stream.com/nors19.mp3 resolvedTarget=https://live-nors.sharp-stream.com/nors19.mp3 station="" type=serviceplay uri=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] playContent [2026-01-02T22:19:25.839Z][DEBUG][Zones|Manager] [expandedCount=0 isAppleMusic=false isMusicAssistant=false queueSourcePath=https://live-nors.sharp-stream.com/nors19.mp3 resolvedTarget=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] queue build resolved [2026-01-02T22:19:25.840Z][DEBUG][Zones|Manager] [authority=local items=1 startIndex=0 target=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] queue rebuilt [2026-01-02T22:19:25.841Z][DEBUG][Audio|UrlProxy] [proxyUrl=http://127.0.0.1:7090/streams/proxy?u=https%3A%2F%2Flive-nors.sharp-stream.com%2Fnors19.mp3 targetUrl=https://live-nors.sharp-stream.com/nors19.mp3] proxying audio url for ffmpeg [2026-01-02T22:19:25.842Z][INFO][Audio|Manager] [hasStream=false label=https://live-nors.sharp-stream.com/nors19.mp3 sourceKind=url zoneId=31] startWithResolvedSource [2026-01-02T22:19:25.842Z][INFO][Audio|Manager] [handoff=false kind=url profiles=["mp3"] zoneId=31] starting audio engine [2026-01-02T22:19:25.843Z][INFO][Audio|Session] [maxBufferBytes=8192 outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=mp3 targetLeadMs=1000 zoneId=31] audio session buffer config [2026-01-02T22:19:25.843Z][DEBUG][Audio|Session] [args=["-hide_banner","-loglevel","error","-fflags","nobuffer","-probesize","32k","-analyzeduration","0","-reconnect","1","-reconnect_streamed","1","-reconnect_delay_max","5","-i","http://127.0.0.1:7090/streams/proxy?u=https%3A%2F%2Flive-nors.sharp-stream.com%2Fnors19.mp3","-vn","-acodec","libmp3lame","-ar","44100","-ac","2","-b:a","256k","-af","aresample=resampler=soxr:precision=28:cutoff=0.97:async=1","-f","mp3","pipe:1"] outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=mp3 zoneId=31] spawning ffmpeg [2026-01-02T22:19:25.847Z][INFO][Audio|Engine] [profile=mp3 source=url zoneId=31] audio session started [2026-01-02T22:19:25.848Z][INFO][Audio|Manager] [source=https://live-nors.sharp-stream.com/nors19.mp3 stream=31-1d10c39a-c847-49d5-a5e3-e9fe9fab113c title="The Beat (Oslo)" zoneId=31] playback started [2026-01-02T22:19:25.849Z][DEBUG][Zones|Manager] [action=play transportCount=0 transportTypes=[] zoneId=31] dispatchTransports [2026-01-02T22:19:25.899Z][DEBUG][LoxoneHttp|Processor] [command=audio/31/recent] command received [2026-01-02T22:19:27.415Z][INFO][Audio|Session] [bytes=116 profile=mp3 zoneId=31] ffmpeg first chunk [2026-01-02T22:19:38.532Z][DEBUG][LoxoneHttp|Processor] [command=audio/31/pause] command received [2026-01-02T22:19:38.533Z][INFO][Audio|Engine] [zoneId=31] audio session stopped [2026-01-02T22:19:38.534Z][DEBUG][Audio|Manager] [source=https://live-nors.sharp-stream.com/nors19.mp3 zoneId=31] playback paused [2026-01-02T22:19:38.534Z][DEBUG][Zones|Manager] [action=pause transportCount=0 transportTypes=[] zoneId=31] dispatchTransports [2026-01-02T22:19:38.535Z][DEBUG][Zones|Manager] [action=pause transportCount=0 transportTypes=[] zoneId=31] dispatchTransports [2026-01-02T22:19:38.958Z][DEBUG][Audio|Session] [zoneId=31] ffmpeg stdout closed [2026-01-02T22:19:38.958Z][INFO][Audio|Session] [bufferedBytes=7523 code=255 earlyExit=false runMs=13114 signal=null stderr=undefined stderrAt=undefined subscribers=0 totalBytes=636249 zoneId=31] ffmpeg exited [2026-01-02T22:19:42.450Z][DEBUG][LoxoneHttp|WS] [total=3] ws disconnected [2026-01-02T22:24:27.936Z][DEBUG][LoxoneHttp|Processor] [command=audio/cfg/miniservertime
Author
Owner

@kob04 commented on GitHub (Jan 3, 2026):

Hi,

I’ve conducted several tests with the following results:

1/ AirPlay (output)

  • The configuration works (speaker discovery shows up, you can select it, pairing/connection works, etc. – everything works perfectly).

Image

  • TunesIn (low stream quality) – playback is choppy and stops after 120 seconds (known behavior).

Image

  • Apple Music (via MA bridge) – high stream quality – no playback on the device. In my opinion, the issue might be related to stream quality resampling.

Image

  • The HomePod is not visible in the device list, but it appears correctly in MA.

2/ Sonos (S2)

  • Apple Music (via MA bridge) – high-quality stream – stuttering occurs during streaming.
  • TunesIn (low-quality stream) – stuttering also occurs during streaming.

3/ Other observations

  • Apple Music via MA bridge works correctly.
  • Apple Music via token – playlists and search results are displayed correctly, but album details are not, and playback does not work.

Image

  • There is no option to select offload only MA zones as a playback output.
  • Control functions (e.g., play/pause, track change, etc.) are very slow to respond.

Everything is running on: Proxmox, VM, DietPi.

LogFile attached.

lox-audioserver-logs-2026-01-03T09-51-59-044Z.txt

Thanks a lot for your work – and if there’s a way to support the project, I’d be happy to contribute ($)!

<!-- gh-comment-id:3706939188 --> @kob04 commented on GitHub (Jan 3, 2026): Hi, I’ve conducted several tests with the following results: 1/ AirPlay (output) - The configuration works (speaker discovery shows up, you can select it, pairing/connection works, etc. – everything works perfectly). ![Image](https://github.com/user-attachments/assets/3c7273a8-6795-4ea0-9cb7-78f95e1b62be) - TunesIn (low stream quality) – playback is choppy and stops after 120 seconds (known behavior). ![Image](https://github.com/user-attachments/assets/16ab78f1-3c7e-43ba-95f1-52c6a62093d5) - Apple Music (via MA bridge) – high stream quality – no playback on the device. In my opinion, the issue might be related to stream quality resampling. ![Image](https://github.com/user-attachments/assets/ca76bfc1-d2ae-4bf9-8b0e-c3caf422863e) - The HomePod is not visible in the device list, but it appears correctly in MA. 2/ Sonos (S2) - Apple Music (via MA bridge) – high-quality stream – stuttering occurs during streaming. - TunesIn (low-quality stream) – stuttering also occurs during streaming. 3/ Other observations - Apple Music via MA bridge works correctly. - Apple Music via token – playlists and search results are displayed correctly, but album details are not, and playback does not work. ![Image](https://github.com/user-attachments/assets/9be37253-620b-4ae1-95d6-ed2d25f89f1f) - There is no option to select offload only MA zones as a playback output. - Control functions (e.g., play/pause, track change, etc.) are very slow to respond. ⸻ Everything is running on: Proxmox, VM, DietPi. LogFile attached. [lox-audioserver-logs-2026-01-03T09-51-59-044Z.txt](https://github.com/user-attachments/files/24414743/lox-audioserver-logs-2026-01-03T09-51-59-044Z.txt) Thanks a lot for your work – and if there’s a way to support the project, I’d be happy to contribute ($)!
Author
Owner

@rudyberends commented on GitHub (Jan 3, 2026):

I will come back on the airplay issues. I do not have any issues, but I will test it on a HomePod to see if I can reproduce it.

With the latest testing release the 120 second tunein should be resolved.

Apple Music directly as a provider works (I use this myself a lot), but there is a caveat.

On the first playback attempt, a widevine_cdm directory is created inside the data directory. This directory contains two files, but these are dummy placeholder files only. They exist so the application can resolve the expected paths, but they are not functional and do not allow actual playback.

To make Apple Music work, these dummy files must be replaced with real Widevine CDM files for playback to succeed.

I’m intentionally not including these binaries in the repository, as it is unclear to me whether redistributing Widevine CDM files is legally permitted. They are on the filesystem of a MA installation however, so you could get them from there. You only need to obtain the files ones. They never change.

<!-- gh-comment-id:3706957247 --> @rudyberends commented on GitHub (Jan 3, 2026): I will come back on the **airplay** issues. I do not have any issues, but I will test it on a HomePod to see if I can reproduce it. With the latest testing release the 120 second **tunein** should be resolved. **Apple Music** directly as a provider works (I use this myself a lot), but there is a caveat. On the first playback attempt, a widevine_cdm directory is created inside the data directory. This directory contains two files, but these are dummy placeholder files only. They exist so the application can resolve the expected paths, but they are not functional and do not allow actual playback. To make Apple Music work, these dummy files must be replaced with real Widevine CDM files for playback to succeed. I’m intentionally not including these binaries in the repository, as it is unclear to me whether redistributing Widevine CDM files is legally permitted. They are on the filesystem of a MA installation however, so you could get them from there. You only need to obtain the files ones. They never change.
Author
Owner

@kob04 commented on GitHub (Jan 3, 2026):

Can you please tell me where I can find those two files in MA?

<!-- gh-comment-id:3707019738 --> @kob04 commented on GitHub (Jan 3, 2026): Can you please tell me where I can find those two files in MA?
Author
Owner

@rudyberends commented on GitHub (Jan 3, 2026):

Can you please tell me where I can find those two files in MA?

not sure. Just use find

find / -name *_cdm

<!-- gh-comment-id:3707102238 --> @rudyberends commented on GitHub (Jan 3, 2026): > Can you please tell me where I can find those two files in MA? not sure. Just use find `find / -name *_cdm`
Author
Owner

@simon2207 commented on GitHub (Jan 3, 2026):

Couldn´t find those files... either...

"On the first playback attempt, a widevine_cdm directory is created inside the data directory."

  • not within my data folder Lox-Audioserver ( Docker / Synology )

Widevine CDM files are not visible in my MusicAssistant Data Folder ( Docker / Synology )

<!-- gh-comment-id:3707151059 --> @simon2207 commented on GitHub (Jan 3, 2026): Couldn´t find those files... either... "On the first playback attempt, a widevine_cdm directory is created inside the data directory." - not within my data folder Lox-Audioserver ( Docker / Synology ) Widevine CDM files are not visible in my MusicAssistant Data Folder ( Docker / Synology )
Author
Owner

@rudyberends commented on GitHub (Jan 3, 2026):

Couldn´t find those files... either...

"On the first playback attempt, a widevine_cdm directory is created inside the data directory."

  • not within my data folder Lox-Audioserver ( Docker / Synology )

Widevine CDM files are not visible in my MusicAssistant Data Folder ( Docker / Synology )

They are there. Using that exact find command will show you the path.

You might need to restart the code once after adding the Apple Music provider. Then play a track and the widevine files will be created.

<!-- gh-comment-id:3707161553 --> @rudyberends commented on GitHub (Jan 3, 2026): > Couldn´t find those files... either... > > "On the first playback attempt, a widevine_cdm directory is created inside the data directory." > - not within my data folder Lox-Audioserver ( Docker / Synology ) > > Widevine CDM files are not visible in my MusicAssistant Data Folder ( Docker / Synology ) They are there. Using that exact find command will show you the path. You might need to restart the code once after adding the Apple Music provider. Then play a track and the widevine files will be created.
Author
Owner

@simon2207 commented on GitHub (Jan 3, 2026):

@rudyberends you were right with the restart of lox-audio server services - so I was able to find the widevine_cdm directory.
But those dummy files:

private_key.pem
client_id.bin

are not within any Music Assistant Folder...

Simon@Synology:$ sudo find / -name private_key.pem
/volume1/@appdata/ContainerManager/all_shares/docker/lox-audioserver/data/widevine_cdm/private_key.pem
/volume1/docker/lox-audioserver/data/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/e7f5fac30250c0914b19cce4e25444d69a7f4148d813c237dc4dd4a1f4044386/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/2fb7f7bebf8218989b8cd923a9d56ea05587c00e68f793aca1b0e2f4b80e07d8/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/5ec730e774b35ddaa29e3c1f82d3570ed4cb0266fd5676088d23e8a9d0dd746b/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/1bcfe281812772b495fed0dd41af900cc5079772b5f22754902cfe430d4a9979/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/8d7e8c706fdf3541d23951fd2020c9664b96b733535024e47c1e664d18b34f54/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/28f24dc3e1353c40f9b8d374ed191ec7104c61c5a16ab92ddd68af0c0d7f5e52/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4-init/usr/local/bin/widevine_cdm/private_key.pem
/volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4/usr/local/bin/widevine_cdm/private_key.pem
^C
Simon@Synology:
$ sudo find / -name client_id.bin
/volume1/@appdata/ContainerManager/all_shares/docker/lox-audioserver/data/widevine_cdm/client_id.bin
/volume1/docker/lox-audioserver/data/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/e7f5fac30250c0914b19cce4e25444d69a7f4148d813c237dc4dd4a1f4044386/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/2fb7f7bebf8218989b8cd923a9d56ea05587c00e68f793aca1b0e2f4b80e07d8/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/5ec730e774b35ddaa29e3c1f82d3570ed4cb0266fd5676088d23e8a9d0dd746b/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/1bcfe281812772b495fed0dd41af900cc5079772b5f22754902cfe430d4a9979/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/8d7e8c706fdf3541d23951fd2020c9664b96b733535024e47c1e664d18b34f54/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/28f24dc3e1353c40f9b8d374ed191ec7104c61c5a16ab92ddd68af0c0d7f5e52/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4-init/usr/local/bin/widevine_cdm/client_id.bin
/volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4/usr/local/bin/widevine_cdm/client_id.bin
Simon@Synology:~$

<!-- gh-comment-id:3707236208 --> @simon2207 commented on GitHub (Jan 3, 2026): @rudyberends you were right with the restart of lox-audio server services - so I was able to find the widevine_cdm directory. But those dummy files: private_key.pem client_id.bin are not within any Music Assistant Folder... Simon@Synology:~$ sudo find / -name private_key.pem /volume1/@appdata/ContainerManager/all_shares/docker/lox-audioserver/data/widevine_cdm/private_key.pem /volume1/docker/lox-audioserver/data/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/e7f5fac30250c0914b19cce4e25444d69a7f4148d813c237dc4dd4a1f4044386/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/2fb7f7bebf8218989b8cd923a9d56ea05587c00e68f793aca1b0e2f4b80e07d8/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/5ec730e774b35ddaa29e3c1f82d3570ed4cb0266fd5676088d23e8a9d0dd746b/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/1bcfe281812772b495fed0dd41af900cc5079772b5f22754902cfe430d4a9979/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/8d7e8c706fdf3541d23951fd2020c9664b96b733535024e47c1e664d18b34f54/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/28f24dc3e1353c40f9b8d374ed191ec7104c61c5a16ab92ddd68af0c0d7f5e52/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4-init/usr/local/bin/widevine_cdm/private_key.pem /volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4/usr/local/bin/widevine_cdm/private_key.pem ^C Simon@Synology:~$ sudo find / -name client_id.bin /volume1/@appdata/ContainerManager/all_shares/docker/lox-audioserver/data/widevine_cdm/client_id.bin /volume1/docker/lox-audioserver/data/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/e7f5fac30250c0914b19cce4e25444d69a7f4148d813c237dc4dd4a1f4044386/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/2fb7f7bebf8218989b8cd923a9d56ea05587c00e68f793aca1b0e2f4b80e07d8/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/5ec730e774b35ddaa29e3c1f82d3570ed4cb0266fd5676088d23e8a9d0dd746b/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/1bcfe281812772b495fed0dd41af900cc5079772b5f22754902cfe430d4a9979/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/8d7e8c706fdf3541d23951fd2020c9664b96b733535024e47c1e664d18b34f54/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/28f24dc3e1353c40f9b8d374ed191ec7104c61c5a16ab92ddd68af0c0d7f5e52/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4-init/usr/local/bin/widevine_cdm/client_id.bin /volume1/@docker/btrfs/subvolumes/20a1e72b8e8021ca38c601f846c6d9941978b2b34a7b2d3eb457b755430360b4/usr/local/bin/widevine_cdm/client_id.bin Simon@Synology:~$
Author
Owner

@rudyberends commented on GitHub (Jan 3, 2026):

root@docker:/app/venv# find / -name *cdm*
/usr/local/bin/widevine_cdm

root@docker:/app/venv# ls /usr/local/bin/widevine_cdm/
client_id.bin  private_key.pem
<!-- gh-comment-id:3707241821 --> @rudyberends commented on GitHub (Jan 3, 2026): ``` root@docker:/app/venv# find / -name *cdm* /usr/local/bin/widevine_cdm root@docker:/app/venv# ls /usr/local/bin/widevine_cdm/ client_id.bin private_key.pem ```
Author
Owner

@simon2207 commented on GitHub (Jan 3, 2026):

Got them with a little help of ChatGPT:

Schritt 1: Dateien aus dem Container heraus kopieren
NICHT direkt aus dem @docker/btrfs-Pfad arbeiten.
Container ermitteln
docker ps
Angenommen der Container heißt:
music_assistant
Dateien aus dem Container nach DSM kopieren
Wir kopieren sie in ein sauberes, dauerhaftes Verzeichnis:
mkdir -p /volume1/docker/music_assistant/widevine
docker cp music_assistant:/usr/local/bin/widevine_cdm/client_id.bin
/volume1/docker/music_assistant/widevine/
docker cp music_assistant:/usr/local/bin/widevine_cdm/private_key.pem
/volume1/docker/music_assistant/widevine/
Prüfen:
ls -l /volume1/docker/music_assistant/widevine

NOW - Apple Music is working!!!

Without MA dependence... Excellent but not easy... ;-)

<!-- gh-comment-id:3707291280 --> @simon2207 commented on GitHub (Jan 3, 2026): Got them with a little help of ChatGPT: Schritt 1: Dateien aus dem Container heraus kopieren NICHT direkt aus dem @docker/btrfs-Pfad arbeiten. Container ermitteln docker ps Angenommen der Container heißt: music_assistant Dateien aus dem Container nach DSM kopieren Wir kopieren sie in ein sauberes, dauerhaftes Verzeichnis: mkdir -p /volume1/docker/music_assistant/widevine docker cp music_assistant:/usr/local/bin/widevine_cdm/client_id.bin \ /volume1/docker/music_assistant/widevine/ docker cp music_assistant:/usr/local/bin/widevine_cdm/private_key.pem \ /volume1/docker/music_assistant/widevine/ Prüfen: ls -l /volume1/docker/music_assistant/widevine NOW - Apple Music is working!!! Without MA dependence... Excellent but not easy... ;-)
Author
Owner

@kob04 commented on GitHub (Jan 5, 2026):

Why is playback via still choppy? I also have MA on the same VM and everything is fine, so it's not the VM environment.
The transmission is jerky even when using MA zones as output. TuneIn playback is seamless.

In my opinion, the problem lies in the time delay, but I don't know why.
20:40:14: AirPlay requests to start streaming.
20:40:18: FFmpeg sends the first data only after 4 seconds.

[2026-01-05T20:40:12.466Z][INFO][Zones|Manager] [hasParentContext=false normalizedTarget=spotify@bridge-applemusic-761lwx:playlist:b64_cGwucG0tMjBlOWYzNzM5MTlkYTA4MDY1ZjEwZjFkM2NkY2JkY2Q= resolvedTarget=spotify@bridge-applemusic-761lwx:playlist:b64_cGwucG0tMjBlOWYzNzM5MTlkYTA4MDY1ZjEwZjFkM2NkY2JkY2Q= station="" type=serviceplay uri=spotify@bridge-applemusic-761lwx:playlist:b64_cGwucG0tMjBlOWYzNzM5MTlkYTA4MDY1ZjEwZjFkM2NkY2JkY2Q= zoneId=2] playContent
[2026-01-05T20:40:13.940Z][INFO][Content|AppleMusicStream] [isLibrary=false keyUri=data:;base64,AAAAAG6942UAHXPN99s9uQ== trackId=1857938277] Apple Music DRM: starting key extraction (new format)
[2026-01-05T20:40:14.362Z][INFO][Content|AppleMusicStream] [keyPreview=c9918f66bf6b018e...] DRM key extracted successfully
[2026-01-05T20:40:14.362Z][INFO][Content|AppleMusicStream] [keyPreview=c9918f66bf6b018e...] DRM key ready, streaming with decryption
[2026-01-05T20:40:14.437Z][INFO][Audio|Manager] [hasStream=false label=applemusic sourceKind=url zoneId=2] startWithResolvedSource
[2026-01-05T20:40:14.437Z][INFO][Audio|Manager] [handoff=true kind=url profiles=["pcm"] zoneId=2] starting audio engine
[2026-01-05T20:40:14.438Z][INFO][Audio|Session] [maxBufferBytes=98304 outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=pcm targetLeadMs=1000 zoneId=2] audio session buffer config
[2026-01-05T20:40:14.439Z][INFO][Audio|Engine] [profile=pcm source=url zoneId=2] audio session started (handoff)
[2026-01-05T20:40:14.440Z][INFO][Audio|Manager] [source=applemusic stream=2-6c5f31cb-43c2-4c3c-9142-07d71635c3d5 title="Jsou tu Vánoce (feat. Unique Quartet)" zoneId=2] playback started
[2026-01-05T20:40:14.440Z][INFO][Transport|AirPlay] [channels=2 pcmBitDepth=16 sampleRate=44100 zoneId=2] AirPlay output format
[2026-01-05T20:40:14.440Z][INFO][Transport|AirPlay] [clientId=192.168.1.168:7000 zoneId=2 zoneName="Stereo výstup 1 - Levá"] AirPlay play requested
[2026-01-05T20:40:14.440Z][INFO][Audio|Session] [maxBufferBytes=98304 outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=pcm targetLeadMs=1000 zoneId=2] audio session buffer config
[2026-01-05T20:40:14.454Z][INFO][Transport|AirPlay] [inputUrl=null source=applemusic zoneId=2 zoneName="Stereo výstup 1 - Levá"] AirPlay starting stream
[2026-01-05T20:40:18.069Z][INFO][Audio|Session] [bytes=32768 profile=pcm zoneId=2] ffmpeg first chunk
[2026-01-05T20:40:18.070Z][INFO][Transport|AirPlaySender] [host=192.168.1.168] airplay sender started
[2026-01-05T20:40:18.070Z][INFO][Transport|AirPlayFlow] [clientId=192.168.1.168:7000 hasSharedSource=true targetUrl=undefined zoneId=2] airplay client started
[2026-01-05T20:40:18.071Z][INFO][Audio|Session] [bytes=65536 profile=pcm zoneId=2] ffmpeg first chunk
[2026-01-05T20:40:18.071Z][INFO][Audio|Engine] [zoneId=2] audio handoff complete

<!-- gh-comment-id:3712018699 --> @kob04 commented on GitHub (Jan 5, 2026): Why is playback via still choppy? I also have MA on the same VM and everything is fine, so it's not the VM environment. The transmission is jerky even when using MA zones as output. TuneIn playback is seamless. In my opinion, the problem lies in the time delay, but I don't know why. 20:40:14: AirPlay requests to start streaming. 20:40:18: FFmpeg sends the first data only after 4 seconds. [2026-01-05T20:40:12.466Z][INFO][Zones|Manager] [hasParentContext=false normalizedTarget=spotify@bridge-applemusic-761lwx:playlist:b64_cGwucG0tMjBlOWYzNzM5MTlkYTA4MDY1ZjEwZjFkM2NkY2JkY2Q= resolvedTarget=spotify@bridge-applemusic-761lwx:playlist:b64_cGwucG0tMjBlOWYzNzM5MTlkYTA4MDY1ZjEwZjFkM2NkY2JkY2Q= station="" type=serviceplay uri=spotify@bridge-applemusic-761lwx:playlist:b64_cGwucG0tMjBlOWYzNzM5MTlkYTA4MDY1ZjEwZjFkM2NkY2JkY2Q= zoneId=2] playContent [2026-01-05T20:40:13.940Z][INFO][Content|AppleMusicStream] [isLibrary=false keyUri=data:;base64,AAAAAG6942UAHXPN99s9uQ== trackId=1857938277] Apple Music DRM: starting key extraction (new format) [2026-01-05T20:40:14.362Z][INFO][Content|AppleMusicStream] [keyPreview=c9918f66bf6b018e...] DRM key extracted successfully [2026-01-05T20:40:14.362Z][INFO][Content|AppleMusicStream] [keyPreview=c9918f66bf6b018e...] DRM key ready, streaming with decryption [2026-01-05T20:40:14.437Z][INFO][Audio|Manager] [hasStream=false label=applemusic sourceKind=url zoneId=2] startWithResolvedSource [2026-01-05T20:40:14.437Z][INFO][Audio|Manager] [handoff=true kind=url profiles=["pcm"] zoneId=2] starting audio engine [2026-01-05T20:40:14.438Z][INFO][Audio|Session] [maxBufferBytes=98304 outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=pcm targetLeadMs=1000 zoneId=2] audio session buffer config [2026-01-05T20:40:14.439Z][INFO][Audio|Engine] [profile=pcm source=url zoneId=2] audio session started (handoff) [2026-01-05T20:40:14.440Z][INFO][Audio|Manager] [source=applemusic stream=2-6c5f31cb-43c2-4c3c-9142-07d71635c3d5 title="Jsou tu Vánoce (feat. Unique Quartet)" zoneId=2] playback started [2026-01-05T20:40:14.440Z][INFO][Transport|AirPlay] [channels=2 pcmBitDepth=16 sampleRate=44100 zoneId=2] AirPlay output format [2026-01-05T20:40:14.440Z][INFO][Transport|AirPlay] [clientId=192.168.1.168:7000 zoneId=2 zoneName="Stereo výstup 1 - Levá"] AirPlay play requested [2026-01-05T20:40:14.440Z][INFO][Audio|Session] [maxBufferBytes=98304 outputBitDepth=16 outputChannels=2 outputSampleRate=44100 profile=pcm targetLeadMs=1000 zoneId=2] audio session buffer config [2026-01-05T20:40:14.454Z][INFO][Transport|AirPlay] [inputUrl=null source=applemusic zoneId=2 zoneName="Stereo výstup 1 - Levá"] AirPlay starting stream [2026-01-05T20:40:18.069Z][INFO][Audio|Session] [bytes=32768 profile=pcm zoneId=2] ffmpeg first chunk [2026-01-05T20:40:18.070Z][INFO][Transport|AirPlaySender] [host=192.168.1.168] airplay sender started [2026-01-05T20:40:18.070Z][INFO][Transport|AirPlayFlow] [clientId=192.168.1.168:7000 hasSharedSource=true targetUrl=undefined zoneId=2] airplay client started [2026-01-05T20:40:18.071Z][INFO][Audio|Session] [bytes=65536 profile=pcm zoneId=2] ffmpeg first chunk [2026-01-05T20:40:18.071Z][INFO][Audio|Engine] [zoneId=2] audio handoff complete
Author
Owner

@rudyberends commented on GitHub (Jan 5, 2026):

It’s a bit more complicated than that. The root cause is in the code itself. There are protocol extensions in place that enable time-synchronized audio, and especially the HomePods are extremely sensitive to this. Everything is implemented entirely on the server, mostly written from scratch, without the use of external binaries, so it’s not a matter of simply flipping a switch, or change a parameter to make it work.

I will fix it, but there are multiple issues and it will take some time.

<!-- gh-comment-id:3712091769 --> @rudyberends commented on GitHub (Jan 5, 2026): It’s a bit more complicated than that. The root cause is in the code itself. There are protocol extensions in place that enable time-synchronized audio, and especially the HomePods are extremely sensitive to this. Everything is implemented entirely on the server, mostly written from scratch, without the use of external binaries, so it’s not a matter of simply flipping a switch, or change a parameter to make it work. I will fix it, but there are multiple issues and it will take some time.
Author
Owner

@rudyberends commented on GitHub (Jan 11, 2026):

The latest version includes significantly improved AirPlay output support. It is not perfect yet, but it should be much better than before.

Please make sure you are running the latest version (v4.0.0-20260111152632) if you want to test it.

<!-- gh-comment-id:3735011040 --> @rudyberends commented on GitHub (Jan 11, 2026): The latest version includes significantly improved AirPlay output support. It is not perfect yet, but it should be much better than before. Please make sure you are running the latest version (v4.0.0-20260111152632) if you want to test it.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/lox-audioserver#50
No description provided.