40 Commits
Author SHA1 Message Date
Mike Brady b405c0b896 Version 5.0 Major Release.
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.
2026-02-13 15:17:40 +00:00
Mike Brady 03d291f464 Second attempt. Modify the generation of the 12-digit classic AirPlay service name prefix so that it depends on the service name as well as the hardware address. 2022-11-17 10:31:51 +00:00
Mike Brady dfcc4e377a Revert the change to the 12-digit calculation 2022-11-16 16:45:37 +00:00
Mike Brady fc117e7302 Modify the generation of the 12-digit classic AirPlay service name prefix so that it depends on the service name as well as the hardware address. 2022-11-16 14:25:53 +00:00
Mike Brady f5e21ade64 clang 2021-09-01 16:53:14 +01:00
Mike Brady 2ab97d980e add a simple mdns_update 2021-07-19 17:10:51 +01:00
Mike Brady a109b587ec Flush seems to be working properly and reliably. Some audio glitches removed too by dropping the first two AAC blocks of any passage. Crude. Flush diagnostic linked list stuff left in place. 2021-05-30 11:17:06 +01:00
Mike Brady e1034e1131 Advertise the _raop._tcp service as well as the _airplay._tcp service. Use a real MAC as the basis for the device ID. 2021-05-24 12:07:05 +01:00
Mike Brady 3a02b79a62 Update the mdns stuff to work with a string, update audio_alsa rtp.c, rtsp.c and shairport.c to build and work in AirPlay 1 but with AirPlay 2 code in place. Some of it is #defined out. 2021-04-30 09:29:30 +01:00
Brian Olsen f21b5faf52 Fix the build on macOS 2019-05-02 17:12:35 +02:00
Mike Brady 3162977c71 make mdns-external-avahi a conditional compilation 2019-02-05 09:45:16 +00:00
Mike Brady d54025486a Include the mdns_external interface even if avahi is not included. 2019-02-04 16:58:55 +00:00
Mike Brady 72079adaf4 Initial shot at tidying up the avahi monitoring for DACP Id port information to make it survive abnormal temrination of play sessions. 2018-12-08 21:55:49 +00:00
Mike Brady c9b3d2a2f4 Many changes to compilation and linking flags. Stop using HAVE_* flags except where necessary, use CONFIG_* for optional stuff, use HAS_* for immediate definitions, use USE_* for AM definitions. Probably introduced bgs, sigh. 2018-09-09 20:41:31 +01:00
Mike Brady 8a5a29e2c2 Move to using pthread_cancel in place of pthread_kill -- due to a problem in CYGWIN, but the move makes the code simpler and more rugged. Tidy up the code a bit and remove a clobbering warning. 2018-05-17 10:29:59 +01:00
Mike Brady 7d0eb37958 Move to using pthread_cancel in place of pthread_kill -- due to a problem in CYGWIN, but the move makes the code simpler and more rugged. 2018-05-17 10:16:44 +01:00
Mike Brady 75041c52cd quieten message when dacp scanner does down 2018-04-16 19:19:32 +01:00
Mike Brady 9e944e4050 Allow for an actual NULL DACP-ID string 2018-04-11 09:55:12 +01:00
Mike Brady 08a7d4ffb5 Use snprintf in place of sprintf. 2018-04-08 15:36:05 +01:00
Mike Brady 32c7a535a1 Make scanning for DACP port part of the dacp handler. Only emit 'clip' and 'svip' for a play connection, suppress 'pfls' until 'pffr' has been emitted 2018-03-31 17:34:59 +01:00
Mike Brady af50e91232 Intermediate 2017-12-02 16:21:46 +00:00
Mike Brady d343a851c0 Some spring cleaning using clang-format 2017-10-05 17:48:24 +01:00
Mike Brady 139c18bf3e Add avahi code to look for the rmeote control information for the client and get the port number from it. 2017-10-05 17:39:32 +01:00
Mike Brady 064bd293c5 Tidy up with a clang-format 2016-09-11 10:35:53 +01:00
Mike Brady 8896bd1026 rename apname to service_name 2016-05-21 13:05:31 +01:00
Mke Brady 87a0475c16 Reformat using clang-format. 2015-06-01 23:16:50 +01:00
Mike Brady d2024aa718 Fix harmless memory leak 2015-02-26 00:17:59 +00:00
Mike Brady f64f598275 Completely remove entries for mDNS backends that are not included. 2014-09-07 12:33:54 +01:00
Mike Brady 8207b8823d Add support for removing tinysvcmdns 2014-08-24 16:17:14 +01:00
Paul LietarandJames Laird ce77feecef Add a new mDNS backend which uses mDNSResponder
This backend uses mDNSResponder, like the external-dns-sd one. However,
this one uses the dns-sd library instead of relying on an external
program.
2013-10-22 10:33:41 +11:00
Paul LietarandJames Laird 592119bc4d Add a new mDNS backend based on tinysvcmdns
This backend allows shairport to run without having a heavy daemon such
as avahi or mDNSResponder running in the background.
ipv6 support is more or less experimental right now.
2013-10-22 10:33:41 +11:00
Paul LietarandJames Laird 958fceb60a Add a command-line option to force the mDNS backend
Add this option to the system-v init script.
2013-10-22 10:33:41 +11:00
Paul LietarandJames Laird 3896909080 Reorganize mDNS advertisement
mDNS is now handled more or less in the same way audio is.
Multiple mDNS backends are available, shairport tries them all until one
works.

This makes it, IMHO, cleaner, and easier to add other mDNS backends in
the future, such as using tinysvcmdns or dns-sd library.
Also it will also allow to define mDNS backends as plugins, in a similar
way it is done in PR #230.
2013-10-22 10:33:41 +11:00
James Laird f6eddb84fd add native avahi-client support
requires extra packages on some systems, eg. libavahi-client-dev on
Debian/Ubuntu.
2013-06-04 01:31:46 +10:00
James Laird 8259ae60e8 die/warn functions now have implicit newline at the end 2013-06-04 00:30:17 +10:00
James Laird c5b1f979e4 mdns: die iff the MDNS advertising process dies
and not if any other child does!
2013-06-04 00:26:55 +10:00
James Laird 98da1d2f66 whitespace fixes 2013-05-14 09:14:27 +10:00
James Laird e736802ee1 mdns: NULL-terminate argv lists 2013-04-01 22:57:46 +11:00
James Laird cf8401dbc8 Add copyright notices. 2013-04-01 21:57:11 +11:00
James Laird 04b142dbe3 rewrite: add mDNS registration 2013-04-01 20:08:05 +11:00