Home

Awesome

AirConnect package for Synology NAS and Synology Router

GitHub release (latest by date) GitHub All Releases GitHub issues Security Scan CodeFactor GitHub Super-Linter GitHub discussions

AirConnect-Synology Logo

Compatible with DSM 7.x (also 7.2)! Please download the package with the name beginning with AirConnect-dsm7-

Updated packages for AirConnect 1.8+ available!

Problems with playback after sonos update 15.2? Please update to 15.3 (or latest available version). If the problem still exists, please check https://github.com/philippe44/AirConnect/issues/458

If you have problems on older synology NAS devices, this could be related to the old device kernel (old kernel, old glibc). Please read the comments in the following issue

A minimal Synology package for AirConnect.
It allows you to use AirPlay to stream to UPnP/Sonos & Chromecast devices that do not natively support AirPlay.

Information

Here is some more information to get you started.

I own multiple Synology NAS devices and the current Synology Router. As long as that is the case, I will also update the releases regularly.

If a release is missing or does not work on your device, please open an issue, then I will check this and deliver it to.

How to install

Every pre-build synology package in the releases section are including these two programs:

So you only need one package to support UPnP, Sonos and Chromcast devices.

Download the pre-build Synology package

You can find the available packages under releases for the following synology DSM distributions (DSM 5, 6 and 7) and the different architecture groups of the synology NAS/Router devices.

DSM Firmware VersionPackage Naming
DSM 5.0-xxxx AND DSM 6.0-xxxx (f.e. DSM 6.0-7321)AirConnect-x86_64-${VERSION} (f.e. AirConnect-x86_64-0.2.50.5-20210630.spk)
DSM 7.0-xxxx (f.e. DSM 7.0-40000)AirConnect-dsm7-x86_64-${VERSION} (f.e. AirConnect-dsm7-86-64-0.2.50.5-20210630.spk)

The minimum firmware version for the DSM7 packages is DSM 7.0-40000.
The minimum firmware version for the x86_64 package AirConnect-x86_64-${VERSION} is DSM 6.0-7321.
For all other package the minimum firmware version is DSM 5.0-4458.

If the x86 (32-bit) package is not working on your device, please download the x86_64 (64-bit) package instead.

Architecture GroupArchitecturePackage to download
ARMv588f6282, 88f6281, 88f628xAirConnect-(dsm7-)armv6-${VERSION}
ARMv5 Static88f6282, 88f6281, 88f628xAirConnect-(dsm7-)armv6-static-${VERSION}
ARMv6use is armv5 does not work - 88f6282, 88f6281, 88f628xAirConnect-(dsm7-)armv5-${VERSION}
ARMv6 Staticuse is armv5 does not work - 88f6282, 88f6281, 88f628xAirConnect-(dsm7-)armv5-static-${VERSION}
ARMv7ipq806x, ipq806x, armada370, armadaxp, armada375, armada38x, alpine, alpine4k, monaco, comcerto2k, hi3535, dakota, ipq806x, northstarplusAirConnect-(dsm7-)arm-${VERSION}
ARMv7 Staticnoarch, ipq806x, ipq806x, armada370, armadaxp, armada375, armada38x, alpine, alpine4k, monaco, comcerto2k, hi3535, dakota, ipq806x, northstarplusAirConnect-(dsm7-)arm-static-${VERSION}
ARMv8rtd1296, armada37xxAirConnect-(dsm7-)aarch64-${VERSION}
ARMv8 Staticnoarch, rtd1296, armada37xxAirConnect-(dsm7-)aarch64-static-${VERSION}
PowerPCqoriq, Ppc853xAirConnect-(dsm7-)powerpc-${VERSION}
PowerPC Staticnoarch, qoriq, Ppc853xAirConnect-(dsm7-)powerpc-static-${VERSION}
Intel - 32-bitx86, cedarview, bromolow, evansport, braswell, broadwell, dockerx64, kvmx64, denverton, grantley, broadwellnk, BroadwellntbapAirConnect-(dsm7-)x86-${VERSION}
Intel - 32-bit Staticx86, cedarview, bromolow, evansport, braswell, broadwell, dockerx64, kvmx64, denverton, grantley, broadwellnk, BroadwellntbapAirConnect-(dsm7-)x86-static-${VERSION}
Intel/AMD - 64-bit (DSM 6.0+)x86_64 x64 cedarview bromolow avoton braswell broadwell apollolake dockerx64 epyc7002 r1000 kvmx64 denverton grantley broadwellnk broadwellnkv2 Broadwellntbap v1000 geminilake purleyAirConnect-(dsm7-)x86_64-${VERSION}
Intel/AMD - 64-bit (DSM 6.0+) Staticx86_64 x64 cedarview bromolow avoton braswell broadwell apollolake dockerx64 epyc7002 r1000 kvmx64 denverton grantley broadwellnk broadwellnkv2 Broadwellntbap v1000 geminilake purleyAirConnect-(dsm7-)x86_64-static-${VERSION}

You can check which architecture you have in the Package Arch column on the Synology What kind of CPU does my Synology NAS have? site.

Synology Router SRM

For all the Synology Routers running Synology SRM you should use the ARM (ARMv7 - dakota, ipq806x, northstarplus) version. If the normal ARM package is not working on your device, please try ARM Static (ARMv7 Static) instead.

Static packages

On some devices, dependencies that are necessary to run airupnp or aircast are not available (mostly on older devices). These dependencies are included in the static version of the packages. This is the reason why the static packages are bigger than the normal versions.

So in general you should always use the normal package (without static in the name). Only when the normal package does not work on your device, please test the static package instead.

If the above ARMv7 package will not work on your device, please download the latest arm-static package. The static package includes "static" binaries, that means, it includes binaries that have no external library dependencies and should be run on your ARMv7 device if the normal ARMv7 package fails.

If the above PowerPC package will not work on your device, please download the latest ppc-static package. The static package includes "static" binaries, that means, it includes binaries that have no external library dependencies and should be run on your PPC device if the normal PPC package fails.

Upgrade from DSM6 to DSM7

If you upgrade your NAS from DSM6 to DSM7, you should just download the new dsm7 package for your device. The old package and new DSM6 packages will not work anymore, since DSM7 changes a lot under the hood (no more root permissions for packages, minimum package version 7.0, etc.).
Just download the DSM7 package and install it from the Package Center as usual.

If, after upgrading to DSM 7, the old package is still installed, please uninstall it and install it again.

If you encounter any problems, please read the troubleshooting section first.

Install via GUI (Package Center)

DSM 7

DSM 6

Please use the older release for DSM 5 & 6: 0.2.50.5-20210706

On DSM5 and some DSM6 devices: As this package is not an official Synology package you may have to Allow packages from any publisher (Go to Settings and set the Trust Level to "Any publisher".)

Do not forget to change back the Trust level to "Synology Inc." for additional security.

Logfiles

Since Version 1.8.3-20240403 The airconnect.log file will now be deleted if it exceeds a size of 50MB A one time backup in the same directory will be created named airconnect.1.log This backup will be deleted on the next start (useful if someone needs the old log for debugging).

airconnect.conf

Only available for DSM 7 packages!

You cannot view/edit the file with FileStation due to a limitation in synology DMS (Symbolik links) by default

Please keep in mind, that if you upgrade your existing AirConnect-Synology package no changes will be made to the airconnect.conf file. If you want to overwrite your airconnect.conf configuration with the default one, please uninstall and install the package again. You can also copy the default values found below to your configuration file.

Starting with release 0.2.50.5-20210801 you can customize the configuration of AirConnect-Synology by using the config file at /volume1/airconnect/airconnect.conf.
Please stop the package before changing the configuration.
If you have edited the configuration while AirConnect is running please restart the AirConnect package.

The configuration options and default values are:

AIRCAST_ENABLED=1
AIRCAST_LATENCY="50:500"
AIRCAST_LOGLEVEL="all=info"
AIRUPNP_ENABLED=1
AIRUPNP_LATENCY="50:500"
AIRUPNP_LOGLEVEL="all=info"
AIRUPNP_CONTENTLENGTH_MODE=0
AIRUPNP_PORT=49154
FILTER_AIRPLAY2_DEVICES="<NULL>,S1,S3,S5,S9,S12,ZP80,ZP90,S15,ZP100,ZP120,1.0,LibreWireless,Fitzwilliam,2.2.6,AllShare1.0"
SYNO_IP="<your synology ip>"
Configuration OptionValuesMandatoryDescription
AIRCAST_ENABLED0 or 1YesEnables or disables AIRCAST
AIRCAST_LATENCY[rtp][:http][:f]NoRTP and HTTP latency (ms), ':f' forces silence fill
AIRCAST_LOGLEVEL<log>=<level>Yeslog=all,raop,main,util,cast -- level=error,warn,info,debug,sdebug
AIRUPNP_ENABLED0 or 1YesEnables or disables AIRUPNP
AIRUPNP_LATENCY[rtp][:http][:f]NoRTP and HTTP latency (ms), ':f' forces silence fill
AIRUPNP_LOGLEVEL<log>=<level>Yeslog=all,raop,main,util,upnp -- level=error,warn,info,debug,sdebug
AIRUPNP_CONTENTLENGTH_MODE-3or -1or 0YesHTTP content-length mode (-3:chunked, -1:none, 0:fixed)
AIRUPNP_PORT49154Yes (airupnp)Port on which airupnp should be started
FILTER_AIRPLAY2_DEVICES<NULL>,S1,S3,S5,S9,S12,ZP80,ZP90,S15,ZP100,...NoSee Supported UPnP Speakers
SYNO_IP192.168.1.100YesThe ip on which aircast/airupnp will be started

Configuration options with Mandatory = Yes must exist in the configuration. Options with Mandatory = No are optional.

Please do not remove the optional configuration options you do not want to use, just set no value (empty value/string). Example: FILTER_AIRPLAY2_DEVICES=

Editing airconnect.conf using your PC

If you want to edit your airconnect.conf file from your computer using a network share (SMB), you need to allow symlinks in your SMB configuration on your synology NAS device.

Settings/Control Panel - File Services - SMB - Advanced Settings

Please activate both options:

AirConnect-Installation-Connection

How it works

It runs the AirConnect processes with the following options by default tuned for sonos:

/volume1/@appstore/AirConnect/airupnp -b [synology device local ip]:49154 -l 50:500 -g 0 -x "/volume1/@appstore/AirConnect/config.xml" -o "<NULL>,S1,S3,S5,S9,S12,ZP80,ZP90,S15,ZP100,ZP120,1.0,LibreWireless,Fitzwilliam,2.2.6,AllShare1.0" -z -f "/volume1/@appstore/AirConnect/log/airconnect.log" -d all=info
/volume1/@appstore/AirConnect/aircast -b [synology device local ip] -l 50:500 -x "/volume1/@appstore/AirConnect/config-cast.xml" -z -f "/volume1/@appstore/AirConnect/log/airconnect.log" -d all=info

Supported UPnP Speakers

On DSM7 you can just change the parameter FILTER_AIRPLAY2_DEVICES in the configuration file airconnect.conf. You could also remove these configuration parameter to allow all airplay2 devices.

To speed up the detection of Sonos/UPnP/DLNA speakers and to not discover speakers which natively supports airplay, this synology package will only include the devices mentioned in the List of supported UPnP Speakers.

If you have another UPnP based speaker that you want to be supported by this package which is not in the list below, please open an issue and let me know (Please tell me the product name (model name, model number etc.)), then i will include it to the default configuration.

With

-o <NULL>,S1,S3,S5,S9,S12,ZP80,ZP90,S15,ZP100,ZP120,1.0,LibreWireless,Fitzwillian,2.2.6,AllShare1.0

the sonos/UPnP speakers that are natively supporting AirPlay or AirPlay2 will be ignored from AirConnect/airupnp and only the ones listed with -o will be used.

Since no new "non airplay" speakers (from sonos) will be released in the future, that should work in any case. So they will be not displayed twice in the list.

How to detect UPnP speakers on your network

To find UPnP speakers, their device_description URL and the model number, follow the following steps.

If you are familiar with linux commands you could use tcpdump to discover upnp devices on your network. You can install tcpdump on any synology NAS by using he integrated synology diagnostic tools.

Just execute as root via SSH synogear install to install the diagnostic tools. See documentation here: FAQ-synogear.
Synogear also installs a few other useful linux/busybox commands. I have installed the diagnostic tools (synogear) on every synology device that i own.

Change en0 to your network adapter name (wait a few seconds until the devices get discovered)

sudo tcpdump -vv -A -s 0 -i en0 host 239.255.255.250 and port 1900 | grep LOCATION

image

Then you need to find your device ip and catch the location URL.

With the curl command (or the browser of your choice) you can then search for the modelNumber in the device xml configuration:

curl http://192.168.1.122:1400/xml/device_description.xml | grep modelNumber

image

S12 is a Sonos Play:1 in this example.

This modelNumber is the number that i need to extend the following List of supported UPnP Speakers.

List of supported UPnP Speakers

Model NumberFriendly NameComment (Sonos seriesid, etc.)
S1Sonos Play:1 (old model)A101
S3Sonos Play:3A100
S5Sonos Play:5P100
S9Sonos PlaybarA100
S12Sonos Play:1A200
S15Sonos ConnectS100
ZP80Sonos Connect (old model)C100
ZP90Sonos ConnectC100
ZP100Sonos Connect:Amp (old model)P100
ZP120Sonos Connect:AmpP100
1.0LibreWireless based SpeakersLibreSyncDMR
LibreWirelessLibreWireless based SpeakersLibreSyncDMR
FitzwilliamFitzwilliamFitzwilliam
2.2.6Devialet Expert Pro 140Devialet Export Pro
AllShare1.0Samsung HW-N950Samsung HW-N950 Soundbar
<NULL>All speakers without a model number

See Command-Line Arguemts for more information about these arguments.

These default options should work for most of you but can also be changed by using a configuration file.

Both processes are running with the low-privilege user airconnect.

Configuration

If you would like to tweak the AirConnect configuration you can also use the AirConnect configuration file.

Before continuing please check the official readme for more information. I'm not going to explain how it generally works here.

Command-Line Arguemts

airupnp

v1.6.3 (Jan  8 2024 @ 18:24:27)
See -t for license terms
Usage: [options]
  -b <ip|iface>[:<port>] network interface or interface and UPnP port to use
  -a <port>[:<count>] set inbound port and range for RTP and HTTP
  -c <mp3[:<rate>]|flac[:0..9]|wav|pcm> audio format send to player
  -g <-3|-1|0>  HTTP content-length mode (-3:chunked, -1:none, 0:fixed)
  -u <version> set the maximum UPnP version for search (default 1)
  -x <config file> read config from file (default is ./config.xml)
  -i <config file> discover players, save <config file> and exit
  -I    auto save config at every network scan
  -l <[rtp][:http][:f]> RTP and HTTP latency (ms), ':f' forces silence fill
  -r    let timing reference drift (no click)
  -f <logfile>  write debug to logfile
  -p <pid file>  write PID in file
  -N <format>  transform device name using C format (%s=name)
  -m <n1,n2...>  exclude devices whose model include tokens
  -n <m1,m2,...> exclude devices whose name includes tokens
  -o <m1,m2,...> include only listed models; overrides -m and -n (use <NULL> if player don't return a model)
  -d <log>=<level> Set logging level, logs: all|raop|main|util|upnp, level: error|warn|info|debug|sdebug
  -z    Daemonize
  -Z    NOT interactive
  -k    Immediate exit on SIGQUIT and SIGTERM
  -t    License terms
  --noflush  ignore flush command (wait for teardown to stop)

Build options: LINUX

aircast

v1.6.3 (Jan  8 2024 @ 18:24:45)
See -t for license terms
Usage: [options]
  -b <ip|iface>  network address or interface to bind to
  -a <port>[:<count>] set inbound port and range for RTP and HTTP
  -c <mp3[:<rate>]|aac[:<rate>]|flac[:0..9]|wav> audio format send to player
  -v <0..1>   group MediaVolume factor
  -x <config file> read config from file (default is ./config.xml)
  -i <config file> discover players, save <config file> and exit
  -I    auto save config at every network scan
  -N <format>  transform device name using C format (%s=name)
  -l <[rtp][:http][:f]> RTP and HTTP latency (ms), ':f' forces silence fill
  -r    let timing reference drift (no click)
  -f <logfile>  Write debug to logfile
  -p <pid file>  write PID in file
  -d <log>=<level> Set logging level, logs: all|raop|main|util|cast, level: error|warn|info|debug|sdebug
  -z    Daemonize
  -Z    NOT interactive
  -k    Immediate exit on SIGQUIT and SIGTERM
  -t    License terms
  --noflush  ignore flush command (wait for teardown to stop)

Build options: LINUX

airupnp and aircast configuration

You cannot view/edit the file with FileStation due to a limitation in synology DMS (Symbolik links) by default

Hint: If you want to filter/include/exclude speakers in the configuration file or airupnp you need to disable the default filter in airconnect.conf using FILTER_AIRPLAY2_DEVICES=. See also airconnect.conf. The default filter will overwrite any filter in the config.xml file of airupnp.

By default the config file will not being used as long as the file is not created (And you are not running on debug log level).

The file is not created by default.

You can create each of these files manually or a reference version can be generated using the -i [config file name] command-line parameter. For the following example i am using the default configuration you can find above in the How it works section. I am just change the -x parameter with the -i parameter.

Change the ip and parameters for your needs:

Example:

/volume1/@appstore/AirConnect/airupnp -b 192.168.1.249:49154 -l 50:500 -g 0 -i "/volume1/@appstore/AirConnect/config.xml" -o "<NULL>,S1,S3,S5,S9,S12,ZP80,ZP90,S15,ZP100,ZP120,1.0,LibreWireless,Fitzwilliam,2.2.6,AllShare1.0" -z -f "/volume1/@appstore/AirConnect/log/airconnect.log" -d all=info

After running this command, airupnp will be started until all needed information and devices are gathered, stopped and the resulted configuration will be written to the defined config file.

Editing config files using your PC

If you want to edit your config.xml or config-cast.xml file from your computer using a network share (SMB) you need to allow symlinks in your SMB configuration on your synology NAS device.

Settings/Control Panel - File Services - SMB - Advanced Settings

Please activate both options:

AirConnect-Installation-Connection

Player specific settings, hints and tips

Please check the original Player specific hints and tips from philippe44 for more information.

Sonos

The upnp version is often used with Sonos players. When a Sonos group is created, only the master of that group will appear as an AirPlay player and others will be removed if they were already detected. If the group is later split, then individual players will re-appear.

You need to use the Sonos native application for grouping / ungrouping.

When changing volume of a group, each player's volume is changed trying to respect the relative values. It's not perfect and still under test now. To reset all volumes to the same value, simply move the cursor to 0 and then to the new value. All players will have the same volume then. You need to use the Sonos application to change individual volumes.

To identify your Sonos players, pick an identified IP address, and visit the Sonos status page in your browser, like http://192.168.1.126:1400/support/review.

Click Zone Players and you will see the identifiers for your players in the UUID column.

Bose SoundTouch

@chpusch has found that Bose SoundTouch work well including synchronisation (as for Sonos, you need to use Bose's native application for grouping / ungrouping). I don't have a SoundTouch system so I cannot do the level of slave/master detection I did for Sonos

Pioneer/Phorus/Play-Fi

Check the Configuration section on how to apply the below tuning to the configuration.

Some of these speakers only support mp3 and require a modified ProtocolInfo to stream correctly.

This can be done by editing the config file and changing <codec>flac</codec> to <codec>mp3</codec> and replacing the <mp3>..</mp3> line with:

<mp3>http-get:*:audio/mpeg:DLNA.ORG_PN=MP3;DLNA.ORG_OP=00;DLNA.ORG_CI=0;DLNA.ORG_FLAGS=0d500000000000000000000000000000</mp3>

Build

The build steps are done using GitHub Actions CI/CD. So it will be build automatically.
In case you want to build it locally, you can also use the following steps.

You need to install the following packages on your distribution:

After that you can start the build process by running shellcheck or directly with the build steps.

Set AirConnect Version

Grab version of your needed AirConnect package and set in variable RELEASE_VERSION

export RELEASE_VERSION=1.8.3

Download AirConnect and extract to /bin

Go to the releases page and grab the latest release or the version you want.
Download it and extract to src/dsm7/bin folder

Example for AirConnect 1.8.3

wget https://github.com/philippe44/AirConnect/releases/download/1.8.3/AirConnect-1.8.3.zip -O src/dsm7/bin/AirConnect.zip
cd src/dsm7/bin
unzip AirConnect.zip

Run shellcheck (optional)

cd src/dsm7
make shellcheck

Build a package for a specific architecture

cd src/dsm7
ARCH=arm make clean build

Possible values for ARCH: arm arm-static armv6 armv6-static aarch64 aarch64-static x86 x86-static x86_64 x86_64-static powerpc powerpc-static

Build a package for all architectures

cd src/dsm7
make clean build-all

You can find the built packages in the dist directory.

Troubleshooting

Cannot be installed or upgrade from an older version

If you get an error message that the package cannot be installed or updated or started when updating AirConnect-Synology, please uninstall the old version first (Package Center -> AirConnect -> Uninstall) and then install the new version.

Uninstalling also removes the old scripts, references and configurations (only the logfile remains). Sometimes it can happen that the problem is already fixed with this.

If the normal uninstallation also does not work, please cleanup the old package using SSH with root permissions:

Issues

If you have a problem installing or using one of these packages and/or are stuck, please open an issue.

It would be very helpful for me if you tell me the synology device you are using, the package you have downloaded and upload the two logfiles mentioned in the Logfiles section or include the important parts from the logfiles in the issue.

If the package was installed successfully and airupnp and aircast are running and no strange problems will be shown in the logfile but for you it is not working as excpeted, please consider opening an issue at the officiall AirConnect Repository.

Multicast and IGMP Snooping/Proxy

Most of the problems with AirConnect are related to the local network configuration. AirConnect (and therefore Sonos/Chromecast) require Multicast to function properly. You must ensure that the communication within your network supports multicast. Especially important is the communication:

Chromecast/Sonos speakers <-> (WLAN)-Router <-> (Switch/Firewall <->) Smartphone which is used

So make sure that multicast is allowed on your router, your switches and your firewall and configure settings like IGMP snooping + IGMP proxy so that the communication is guaranteed.

For testing, please deactive igmp snooping everywhere if you have activated it.

I have activated but properly configured igmp snooping and igmp proxy + different VLANs. It will work with AirConnect, if properly configured.

For additional information, please check the following issues in the official AirConnect Repository:

Debugging

Debug DSM 7

If you want to see more logs then change the AIRCAST_LOGLEVEL or AIRUPNP_LOGLEVEL from all=info in /volume1/airconnect/airconnect.conf to all=debug and restart the package.

DSM 5 and 6

If you want to see more logs then change the -d all=info parameter in scripts/start-stop-status to -d all=debug and rebuild the package, then install it again.

License

Credits

Credits go to @bandesz for the initial work and idea of a Synology package for AirConnect and of course to philippe44 for this great AirConnect application.