Commit Graph
118 Commits
Author SHA1 Message Date
nils d6a3ca335a Add runtime and nqptp image targets to the ohm Dockerfile
Set variables for a Docker build (used by another workflow). / Set variables required for docker build. (push) Successful in 1s
Build and conditionally push docker image / docker-vars (push) Successful in 1s
Build and conditionally push docker image / Build and conditionally push docker image (SHAIRPORT_SYNC_BRANCH=. , ./docker/classic/Dockerfile, classic) (push) Failing after 31m49s
Build and conditionally push docker image / Build and conditionally push docker image (SHAIRPORT_SYNC_BRANCH=. NQPTP_BRANCH=${{ needs.docker-vars.outputs.nqptp_branch }} , ./docker/Dockerfile, main) (push) Failing after 31m50s
The runtime image carries only shairport-sync and its libraries and
expects the node's avahi via the host D-Bus socket; nqptp runs as a
sidecar sharing /dev/shm.
2026-08-29 00:15:32 +02:00
nils b75edeedc3 Add ohm, an OpenHome Songcast sender audio backend
Set variables for a Docker build (used by another workflow). / Set variables required for docker build. (push) Successful in 1s
Build and conditionally push docker image / docker-vars (push) Successful in 2s
Build and conditionally push docker image / Build and conditionally push docker image (SHAIRPORT_SYNC_BRANCH=. , ./docker/classic/Dockerfile, classic) (push) Failing after 31m52s
Build and conditionally push docker image / Build and conditionally push docker image (SHAIRPORT_SYNC_BRANCH=. NQPTP_BRANCH=${{ needs.docker-vars.outputs.nqptp_branch }} , ./docker/Dockerfile, main) (push) Failing after 31m49s
Streams AirPlay audio to OpenHome/Songcast receivers as OHU unicast PCM
(16/24-bit). Sends are paced on the PTP master clock so receivers slave
to the AirPlay group clock through their buffer-fill servo; MediaLatency
carries the phase, matching the wire behaviour of Linn's own sender
(zero flags and timestamps). delay() reports the newest frame's playtime
lead so shairport feeds a receiver latency ahead. Handles Join, Listen,
Leave and Resend with a frame history, and forwards track metadata and
metatext from the metadata hub.

With -r <name>, ohm_upnp controls the receiver over UPnP: discovered by
friendly name via SSDP at time of use, woken, switched to its Songcast
source and pointed at this sender when a session starts; volume follows
the AirPlay slider capped at the device's VolumeLimit; standby follows
some minutes after the session ends.
2026-08-28 23:54:16 +02:00
Mike Brady 6db0ba16a4 Add sys-nice request to docker compose file and comment out unnecessary stuff. 2026-06-28 17:23:14 +01:00
Mike Brady 69f5e78050 Add a few tools and do a recompile for more comportable troubleshooting. 2026-06-28 17:08:56 +01:00
Mike Brady f30dd7aee6 Enhancements
Enable the AirPlay 2 build to operate an optional classic-AirPlay-only service or to gracefully degrade to classic AirPlay, as follows:
  1. Add a new command-line option '-—service-type=<type>' and an equivalent configuration entry 'service_type = "<type>"' in the 'general' section of the configuration file,
     where <type> can be "auto", "classic" or "airplay2":
      1. "auto" (default) means that the service will be AirPlay 2 if NQPTP is running. If NQPTP is not running, classic AirPlay service will be provided instead, and in that case,
      "(Classic)" will be appended to the default AirPlay service name visible to AirPlay clients like Apple Music, for example "RaspberryPi3B (Classic)".
      2. "classic" means the service will be classic AirPlay (aka AirPlay 1).
      3. "airplay2" means the service will be the modern AirPlay 2. In this case, as distinct from "auto", if NQPTP is not running, Shairport Sync will log an error and terminate.
  2. In the systemd service file, NQPTP is now a "Want" rather than a "Require". If it's present, then it will be launched before Shairport Sync. If it's absent, Shairport Sync will launch anyway.
  3. Improve the delivery of input format changes and emit 'sdsc' metadata when changes occur.
  4. Emit new format information in the log if statistics is enabled.

Docker Changes
  1. Support for linux/arm/v6 has been dropped, as Docker is no longer supported.
  2. NQPTP is not started in the AirPlay 2 Docker image if '--service-type=classic' or '--service-type=airplay1' is in the command line options at the end of the docker run command.
     The purpose is to ensure that ports 319 and 320 are left alone when the AirPlay 2 image is set to provide Classic service only.
     Note that setting the configuration file 'service_type' to 'classic' will not prevent NQPTP from starting up -- you must use the command line option.
  3. A new "dev" target has been added. It is a large image containing the custom-built FFmpeg library, NQPTP, Avahi and D-Bus along with the Shairport Sync source and
     all necessary development tools. When started, Avahi, D-Bus and NQPTP are all installed and running. The bash shell has also been added and is entered.

Stability Improvements
  Reorganise session preemption to fully terminate the existing session before starting a new one.
  Don't delay closing the event port to wait for it to be closed at the client end.
  Add a safe_socket_close() function to ensure sockets are fully closed. Use -1 to designate closed rather than 0, to prevent attempts to reclose sockets, causing mayhem.
  Re-order FFmpeg decommissioning during teardown.
2026-05-18 09:57:12 +01:00
Mike Brady 3a1bfd718a Update Docker images to use Alpine 3.23.4 and FFmpeg 8.1 2026-05-06 15:39:55 +01:00
Charles 13ec59dde2 Clone ffmpeg from github for classic image 2025-09-23 22:52:29 +01:00
Charles d3e7672b47 More fixes 2025-09-23 00:24:35 +01:00
Charles e0137b87a8 Fixes and info improvements 2025-09-23 00:04:42 +01:00
Charles a8e6148139 New docker pipeline. 2025-09-22 22:37:57 +01:00
Adam Oleksy d33617131f Add ENABLE_AVAHI env var to control dbus/avahi usage in container
ENABLE_AVAHI decides whether dbus and avahi daemons run inside the
container or if the host's instances are reused. When set to 0,
/var/run/dbus and /var/run/avahi-daemon/socket must be bind-mounted
by the user from the host into the container.
2025-09-22 17:49:22 +02:00
Mike Brady 03fb1d69de Remove obsolete s6-overlay stuff. This directory was not copied into the Docker image anyway... 2025-09-17 14:27:12 +01:00
Mike Brady cb34413249 Remove left-over dbus and avahi pid files. 2025-04-14 09:37:53 +01:00
Mike Brady 60143518c2 This squashed commit comprises a long series of improvements, bug fixes, optimizations, and new feature additions:
- 48,000 frames per second operation,
 - 48k lossless stereo, 5.1 and 7.1 surround sound
 - Multichannel and multi rate operation on ALSA, PipeWire, PulseAudio, FreeBSD, stdout and unix pipe output backends.

Automatic, flexible and controllable output format (rate, sample format and channel count) selection.

Full FFmpeg integration to support transcoding, resampling, and new audio formats.

Better operation on lower powered devices down to e.g. Raspberry Pi B.

Reduced Docker image sizes with a slimmed-down FFmpeg library.

Enhanced timestamp handling for better synchronization.

Improved the sync error calculation.

A new "vernier" resampling and interpolation method for low-power CPUs.

Bug fixes and minor enhancements.

Note -- there are many breaking changes from previous versions of Shairport Sync!
2025-02-23 13:31:17 +00:00
Mike Brady 06cb58ca20 Remove dhclient from the image. 2025-01-31 14:56:39 +00:00
Charles e0e3c45367 Docker updates. Github action updates. Fix for github actions. 2025-01-28 18:55:35 +00:00
Mike Brady 08063e6d50 Add default parameter to the classic Dockerfile. 2025-01-28 10:00:56 +00:00
Mike Brady 0137515670 Add "curl" to the Docker images for potential use in automations. 2025-01-28 06:37:28 +00:00
Mike Brady 00e595ce55 the /run/dbus directory needs to be defined. 2024-12-23 16:14:16 +00:00
duhow 77e1d28472 shrink instructions to reduce layers build 2024-12-16 15:33:19 +01:00
duhow c6fe951cb7 set executable files 2024-12-16 15:27:53 +01:00
duhow 30e6f2e1c8 build in separated stages 2024-12-16 15:20:08 +01:00
Mike Brady fe743fdf70 Remove Avahi static service file definitions for SSH and SFTP 2024-10-16 15:42:28 +01:00
Maxim 8215514923 Compile docker image with pipewire and add example in docker-compose 2024-07-22 21:03:54 +03:00
Mike Brady aade1b39b3 Move the ulimit -n call from 01-startup/script.sh to the 02-dbus/run 2024-06-09 18:41:02 +01:00
Mike Brady 111e247b65 Limit maximum open file handles in Docker images. Increase the level of optimisation while building the Shairport Sync image. 2024-06-08 14:05:26 +01:00
Mike BradyandGitHub ab59f20180 Merge pull request #1812 from HNKNTA/master
Update docker compose file
2024-03-08 09:19:30 +00:00
HNKNTA 997ab4396c Update docker compose file
Added S6_KEEP_ENV to example, without it pulse connection won't happen
2024-02-26 20:29:15 +02:00
Klemens NanniandKlemens Nanni 8ae635e78e Move shairport-sync manual from section 7 to 1
From mandoc man(1) [-s] section:
                   1         General commands (tools and utilities).
                   [...]
                   7         Miscellaneous information.

From GNU man(1) DESCRIPTION:
     1   Executable programs or shell commands
     [...]
     7   Miscellaneous (including macro packages and conventions), e.g.
         man(7), groff(7)

shairport-sync is an executable, shairport-sync(1) ought to be its
documentation, not merely miscellaneous information.

OpenBSD adjusts this in its audio/shairport-sync port/package ever since.
2024-01-27 19:40:04 +01:00
Mike Brady 73af29c823 in the docker build process, skip the make install for nqptp and take the binary of nqptp from where it is built 2023-09-11 17:46:00 +01:00
Mike Brady 464c246a78 in the docker build process, skip the make install for nqptp and take the binary of nqptp from where it is built 2023-09-11 17:44:00 +01:00
Mike BradyandGitHub d39fb7dca3 Update README.md
Fix typo in command line!
2023-09-03 15:10:58 +01:00
Mike BradyandGitHub 4bee50c920 Update README.md
Fix typo in command line!
2023-09-03 15:10:06 +01:00
Mike Brady 25ac1017d1 merge 4.2 updates from the branch 2023-05-20 17:48:01 +01:00
Christian König da58bc0163 Fix s6-timeout issues on slower devices
Signed-off-by: Christian König <ckoenig@posteo.de>
2023-05-13 19:33:58 +02:00
Mike BradyandGitHub 6e7f40a7f1 Merge pull request #1665 from yubiuser/s6-notifyoncheck
Use s6-notifyoncheck to check for services startup readiness.

(Thanks for this. Let's see how it works out!)
2023-04-22 17:37:12 +01:00
Christian König 849e2478d2 Use s6-notifyoncheck to check for services startup readiness
Signed-off-by: Christian König <ckoenig@posteo.de>
2023-04-18 22:41:56 +02:00
nipsufn 847aff15f9 fix: adjust to follow nqptp 2023-04-02 15:22:27 +02:00
nipsufn 585ba4f743 chore: cleanup p3 2023-04-01 14:05:20 +02:00
nipsufn 3cdc5b9da8 chore: cleanup p2 2023-04-01 13:54:30 +02:00
nipsufn 0e9b202805 chore: cleanup 2023-04-01 13:53:41 +02:00
nipsufn 70998d981d test: nqtp fork p3 2023-04-01 13:05:06 +02:00
nipsufn d98ba46d9b test: nqtp fork p2 2023-04-01 12:23:26 +02:00
nipsufn 4f54775645 test: nqtp fork 2023-04-01 11:31:24 +02:00
nipsufn 8502f015e6 fix: second typo 2023-03-28 19:59:24 +02:00
nipsufn 23c8646149 fix: typo 2023-03-28 19:51:13 +02:00
nipsufn 0d9baf525d feat: add PulseAudio support to images 2023-03-28 19:36:54 +02:00
Christian König b6e691263e Do not start SPS as s6 service to avoid passing arguments via -e
Signed-off-by: Christian König <ckoenig@posteo.de>
2023-03-07 22:08:11 +01:00
Christian König f79c3e1579 Allow passing arguments via environment variable
Signed-off-by: Christian König <ckoenig@posteo.de>
2023-02-05 20:29:49 +01:00
Christian König bea0faf488 Update Dockerfiles
Signed-off-by: Christian König <ckoenig@posteo.de>
2023-02-01 14:10:06 +01:00