New Features:
Multi-Channel and High-Resolution Audio Support
48,000 frames per second ("48k") operation.
48k lossless stereo support.
5.1 and 7.1 surround sound support.
Multi-channel and multi-rate operation on ALSA, PipeWire, PulseAudio, FreeBSD, stdout and Unix pipe output backends.
Automatic Audio Format Selection
Flexible and controllable output format selection.
Automatic rate, sample format, and channel count selection.
Full FFmpeg Integration
Support for transcoding.
Advanced resampling capabilities.
New audio format support.
Enhanced Resampling
New vernier resampling and interpolation method optimized for low-power CPUs.
Better performance on resource-constrained devices.
Convolution and Loudness Enhancements:
Convolution system is now multithreaded and works on stereo and multichannel audio at 48k and 44.1k.
Multiple impulse response (IR) files can now be provided via convolution_ir_files setting.
New convolution_thread_pool_size setting for multithreaded processing (defaults to 1).
Loudness processing now works with stereo and multichannel audio at 48k and 44.1k.
Updated to the most recent HiFi-LoFi FFT convolver.
MQTT Enhancements:
Added new publish_retain boolean option. When enabled, published MQTT messages have the retain flag set, so the MQTT broker stores the last message per topic and new subscribers receive the most recent value immediately. Thanks to lululombard for PR #2142.
D-Bus Enhancements:
Added new dbus_default_message_bus command-line argument (can be system or session) to set the default message bus for both D-Bus native service and MPRIS service.
Performance Improvements:
Enhanced compatibility with AirPlay 2 AutoMix and Smart Tracklists resulting in less unexplained track skipping.
Better operation on low-power devices down to Raspberry Pi B.
Improved efficiency on embedded systems.
Enhanced timestamp handling for better synchronization.
Improved sync error calculation.
Rebuilt buffered audio processor for cleaner handling of immediate and deferred flush requests.
Docker Enhancements:
Reduced Docker image sizes with slimmed-down FFmpeg library.
Removed dhclient from Docker images for smaller footprint.
Bug Fixes:
Fixed MQTT warning on service startup: "Could not establish a mqtt connection". The startup script now correctly states that the mosquitto service is required. Thanks to Hugo Villeneuve for PR #2137.
Fixed compatibility with mbedtls library version 3.4+ (present on recent Linux versions). Thanks to Christian Beier for finding and fixing the bug.
Fixed PulseAudio backend so that PA_ERR_NODATA returns "No latency data yet". Thanks to Vladimir Shakov for the report and fix.
Ensured old flush requests are deleted when a new play session starts. Thanks to saujanyashah for the report.
Fixed format warnings on 64-bit and 32-bit systems
Removed compilation warnings on 32-bit builds
Improved argument checking for debug(), inform(), warn() and die() functions
Fixed "daemon" typos throughout codebase. Thanks to Chris Boot for PR #1981.
Added warning if a convolution impulse response file cannot be read due to bad path or permissions
Build System Improvements:
Unified service file with variable substitution for Avahi support, making it easier to add future service dependencies. Thanks to Hugo Villeneuve.
Network interface selection now only considers interfaces that are up, running and not loopback interfaces. Thanks to Carl Johnson for the suggestion.
Configuration File Changes and Deprecations
New settings: convolution_ir_files (replaces convolution_ir_file), convolution_enabled (replaces convolution), convolution_max_length_in_seconds (replaces convolution_max_length), loudness_enabled (replaces loudness).
New convolution_thread_pool_size setting (defaults to 1).
Deprecated settings: convolution_ir_file, convolution, convolution_max_length, loudness.
Corresponding D-Bus methods and properties have been updated.
Deprecation Notice:
The Jack Audio and soundio backends are deprecated and will be removed in a future release. Consider using the updated PipeWire backend instead.
Documentation Updates
Updated BUILD.md with latest build instructions.
Updated AIRPLAY2.md with feature information.
Enhanced convolution and loudness documentation.
Maintenance:
Fixed FFmpeg deprecation warnings.
Bumped actions/checkout from 6.0.1 to 6.0.2.
Bumped docker/login-action from 3.6.0 to 3.7.0.
Bumped docker/build-push-action from 6.13.0 to 6.15.0.
Bumped docker/setup-qemu-action from 3.4.0 to 3.6.0.
Bumped docker/setup-buildx-action from 3.9.0 to 3.10.0.
3.9 KiB
Shairport Sync Docker Image
Available at: https://hub.docker.com/r/mikebrady/shairport-sync
Shairport Sync provides limited AirPlay 2 functionality. Versions with tags including -classic only provide classic AirPlay (aka "AirPlay 1"), the same as Shairport Sync versions up to 3.3.9.
Tags
latestandlatest-classicare images of the most recent releases. These should be the most stable and updated only when a new release is made.rollingandrolling-classicare images of the latest updates in themasterbranch that have not yet been incorporated in a release. These may be updated frequently but should be stable.developmentanddevelopment-classicare images of the latest pushes to thedevelopmentbranch. These will be less stable and may be actually faulty. They will be updated frequently.- Version Tags, e.g.
4.1are images of specific releases.
Example Docker Compose File
See the docker-compose.yaml file in this folder for an example.
Docker Run
To run the latest release of Shairport Sync, which provides AirPlay 2 service:
$ docker run -d --cap-add=SYS_NICE --restart unless-stopped --net host --device /dev/snd \
mikebrady/shairport-sync:latest
To run the classic version:
$ docker run -d --cap-add=SYS_NICE --restart unless-stopped --net host --device /dev/snd \
mikebrady/shairport-sync:latest-classic
Options
Command line options will be passed to Shairport Sync. Here is an example:
$ docker run -d --cap-add=SYS_NICE --restart unless-stopped --net host --device /dev/snd \
mikebrady/shairport-sync:latest \
-v --statistics -a DenSystem -- -d hw:0 -c PCM
This will send audio to alsa hardware device hw:0 and make use of the that device's mixer control called PCM. The service will be visible as DenSystem on the network.
The image is built with PipeWire and PulseAudio backend support. To use it, refer to docker-compose.yaml for required environment variables and mounts.
To use the PipeWire backend, set the backend to pipewire via either command line option -o pipewire or the output_backend field in the general section of the configuration file.
Similarly, to use the PulseAudio backend, set the backend to pulseaudio via either command line option -o pulseaudio or the output_backend field in the general section of the configuration file.
For use with PulseAudio, you might need to adjust authentication on your PulseAudio server (PA documentation).
Configuration File
To get access to the full range of configuration options, pass the configuration file to /etc/shairport-sync.conf in the container using the -v option or docker compose.
Building
Build Example (for arm7 devices)
docker buildx build --platform linux/arm/v7 -f ./docker/Dockerfile --build-arg SHAIRPORT_SYNC_BRANCH=development --build-arg NQPTP_BRANCH=development --no-cache -t shairport-sync:development .
SHAIRPORT_SYNC_BRANCH and NQPTP_BRANCH are required to ensure the image is built using the expected branch.
--no-cache needs to be used to force buildx to pull the NQPTP branch for new updates. This slows down the build time though so can be removed when it is not beneficial during testing.
"Classic" AirPlay
The "Classic" AirPlay only dockerfile is in the classic folder. This also includes the start.sh script used by the container.
GitHub Action Builds
Requires the following secrets to be set in the repo:
DOCKER_REGISTRY- docker.io if using Docker Hub, else set to your registry URL.DOCKER_REGISTRY_TOKEN- Access token for your registry.DOCKER_REGISTRY_USER- Login user for your registry.DOCKER_IMAGE_NAME- The name of the image, for exampleyour-registry.com/shairport-syncor justyour-username/shairport-syncif using Docker Hub.