Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UxPlayEnhanced

A lightweight, audio-only, Bonjour-free UxPlay distribution for Windows.

UxPlayEnhanced turns a Windows PC into an AirPlay audio receiver without installing Apple's Bonjour service. It is built on the official FDH2/UxPlay project and keeps UxPlay's audio engine while making the packaged Windows experience intentionally audio-first: no local video renderer, no always-open terminal, and no external mDNS service.

Upstream: FDH2/UxPlay. The upstream source is tracked directly in this repository as the lib/uxplay Git submodule. UxPlayEnhanced is an independent Windows packaging and integration project, not an official FDH2 release.

What UxPlayEnhanced Changes

Area UxPlayEnhanced behavior
Primary use AirPlay audio playback on Windows
Video pipeline Disabled by default with -vs 0
Device discovery Embedded mDNS; Apple Bonjour is not required
User interface Background tray application with status, song, quality, and logs
Installation Self-elevating setup creates firewall rules and shortcuts
Audio information Logs codec, lossless/lossy classification, and receiver format
Console noise Suppresses repeated unchanged metadata blocks
ALAC startup Begins dequeuing on the first real audio packet to avoid a startup burst
Windows resampling Uses GStreamer's maximum quality for 44.1 to 48 kHz conversion

“Lightweight” refers to runtime behavior: the normal launcher does not create a video decode/render pipeline and does not require a separate Bonjour service. The release still includes the GStreamer and FFmpeg libraries required by UxPlay's audio stack.

Install

  1. Download the latest Windows ZIP from the UxPlayEnhanced releases.
  2. Extract the complete ZIP.
  3. Run UxPlayEnhanced-Setup.cmd.
  4. Approve the Windows administrator prompt.
  5. Launch UxPlayEnhanced from the desktop or Start menu.
  6. Open the AirPlay output selector on the iPhone, iPad, or Mac and choose the Windows computer's name.

The setup installs to C:\Program Files\UxPlayEnhanced, unblocks files that inherited Windows' downloaded-file marker, creates and verifies program-scoped inbound TCP and UDP firewall rules used by AirPlay, adds desktop and Start-menu shortcuts, and registers an uninstall entry in Windows Apps and Features.

The desktop shortcut is created in the Windows all-users Desktop so it remains visible when setup is approved with a different administrator account. Setup verifies that the shortcut targets the installed copy before reporting success. The installer does not delete the extracted release folder; its setup files are intentionally not copied into Program Files. After a successful installation, the extracted folder can be deleted manually.

During an upgrade, setup stops every running executable from the installed package and waits until the installation stays process-free. Releases use a versioned application directory so antivirus behavior monitoring cannot strand an upgrade by protecting an older executable. Hash-identical runtime files are retained instead of being overwritten, while copied files receive SHA-256 verification.

Uninstall from Windows Apps and Features. The uninstaller verifies the registered Program Files path before recursive removal. If antivirus behavior monitoring keeps an old runtime file protected, uninstall schedules only the remaining UxPlayEnhanced files for deletion at the next Windows restart and reports that a restart is required.

Portable Use

Installation is optional. Extract the ZIP and run setup-firewall.ps1 once; it requests administrator access automatically. Then launch UxPlayEnhanced.bat. The portable launcher also starts in audio-only mode and uses the tray application when available.

Tray Application

The bundled UxPlayEnhanced.exe runs UxPlay without an open terminal window. Right-click its blue tray icon to see:

  • AirPlay host, connected client device, and connection status
  • Current artist, song, and album metadata
  • Clean codec, lossless/lossy quality, bit depth, sample rate, and channels
  • View logs and open the installation folder
  • Restart and quit controls

Logs are stored at %LOCALAPPDATA%\UxPlayEnhanced\Logs\UxPlayEnhanced.log. View logs opens that file directly in Notepad, without relying on a Windows .log file association. The log rotates at 5 MB and keeps two older files (UxPlayEnhanced.log.1 and .log.2), so a long-running receiver cannot fill the disk.

Normal logs omit the once-per-second track progress display. Launch UxPlayEnhanced.exe --verbose when troubleshooting to include those progress updates; connection, format, metadata, warning, and error events are always logged.

The executable bundles its Python runtime and tray dependencies. End users do not need Python, pip, pystray, or Pillow installed.

Audio-Only Behavior

All included launchers pass -vs 0, which disables UxPlay's local video sink. This avoids local video decoding, rendering, and video-timing work while keeping AirPlay audio reception active. The underlying uxplay.exe remains available for advanced users, but screen mirroring is outside this distribution's normal supported workflow. Use upstream FDH2/UxPlay when full video-mirroring behavior is the priority.

Audio Format Logging

When an audio session starts, UxPlayEnhanced logs the codec, lossless/lossy classification, receiver resolution, channel count, and equivalent decoded PCM bitrate. ALAC (ct=2) is lossless and AAC-ELD (ct=8) is lossy.

The current receiver profile is 16-bit/44.1 kHz. The log therefore reports the format received and decoded by UxPlay; it does not claim to measure the source service's encoded bitrate or prove that an Apple Music source was Hi-Res Lossless. Repeated identical DMAP metadata updates are omitted from the console.

In Apple Music terms, UxPlayEnhanced's 16-bit/44.1 kHz receiver profile is standard Lossless (CD quality), not Hi-Res Lossless; see Apple's lossless-audio guide. This is also the useful compatibility default for iOS 27 Developer Beta 3: current beta user reports indicate AutoMix works with Lossless selected but is unavailable with Hi-Res Lossless. Apple does not list that restriction in the Beta 3 release notes, so it should be treated as beta behavior that may change.

ALAC playback starts from the first real audio payload instead of accumulating frames until the first NTP synchronization packet and then burst-draining them. This is a narrowed backport of FDH2/UxPlay PR #548; malformed short packets are excluded explicitly. The PR's separate audioresample quality=10 change was evaluated independently: it added approximately 2.18 ms of filter latency and increased this isolated stage from about 0.11% to 0.22% of one CPU core on the build PC. UxPlayEnhanced includes it because the absolute overhead is small and audio quality is the project's priority.

Bonjour-Free Discovery

UxPlayEnhanced replaces UxPlay's Windows Bonjour/DNS-SD dependency with the embedded responder in src/dnssd_embedded.c. It:

  • Listens for mDNS on UDP multicast 224.0.0.251:5353
  • Advertises _airplay._tcp and _raop._tcp
  • Responds with PTR, SRV, TXT, and A records
  • Sends startup announcements and TTL=0 goodbye records
  • Runs in-process without dnssd.dll, iTunes, iCloud, or Bonjour services

Discovery is advertised on every up, non-loopback IPv4 interface rather than only the one that routes toward the internet, so a PC on both Ethernet and Wi-Fi is reachable from either network and a machine with no default route still works. Each interface advertises its own address. The interface list is rechecked every 15 seconds, so joining Wi-Fi, docking, or raising a VPN is picked up without a restart, and services are re-announced on links that appear.

Build from Source

Clone this repository with its official UxPlay submodule:

git clone --recurse-submodules https://github.com/Kylepossible/UxPlayEnhanced.git
cd UxPlayEnhanced

Install MSYS2, then install the MinGW64 build dependencies:

pacman -S --needed \
  mingw-w64-x86_64-toolchain \
  mingw-w64-x86_64-cmake \
  mingw-w64-x86_64-gstreamer \
  mingw-w64-x86_64-gst-plugins-base \
  mingw-w64-x86_64-gst-plugins-good \
  mingw-w64-x86_64-gst-plugins-bad \
  mingw-w64-x86_64-gst-libav \
  mingw-w64-x86_64-openssl \
  mingw-w64-x86_64-libplist \
  mingw-w64-x86_64-pkg-config

The standalone tray executable also requires a Windows Python build environment with PyInstaller, pystray, and Pillow. Run the build from MSYS2:

bash build.sh

The self-contained package is written to dist/UxPlayEnhanced/.

Project Layout

  • lib/uxplay/ — official FDH2/UxPlay source submodule
  • src/dnssd_embedded.c — embedded Windows mDNS/DNS-SD implementation
  • patch_cmake.py — applies the integration, audio-quality, and metadata patches
  • launcher/uxplay_tray.pyw — UxPlayEnhanced tray application source
  • launcher/UxPlayEnhanced-Setup.* — installer entry point and setup logic
  • assets/ — application and tray icon assets
  • build.sh — builds UxPlay, resolves DLL dependencies, and packages the release

License

UxPlayEnhanced is distributed under the GNU General Public License v3.0. See LICENSE.

UxPlayEnhanced builds on FDH2/UxPlay, which is licensed under GPL-3.0, and every release ships a patched uxplay.exe. A modified GPLv3 work must itself be distributed under GPLv3, so that license covers this repository and all binary releases.

Per-component notes:

Component License
lib/uxplay/ (submodule) GPL-3.0 — see lib/uxplay/LICENSE
lib/uxplay/lib/ (upstream AirPlay library, derived from RPiPlay/shairplay) LGPL-2.1-or-later
src/dnssd_embedded.c LGPL-2.1-or-later, matching the upstream lib/dnssd.c it replaces
patch_cmake.py, build.sh, launcher/ GPL-3.0

src/dnssd_embedded.c stays under LGPL-2.1-or-later so it remains usable in the same places upstream's lib/dnssd.c is; the "or later" grant makes it compatible with the GPL-3.0 work it links into.

The complete corresponding source for a binary release is this repository at the matching tag, together with the lib/uxplay submodule commit it pins.

Attribution

Core AirPlay implementation: FDH2/UxPlay.

Windows packaging was also informed by leapbtw/uxplay-windows.

About

Lightweight, audio-only, Bonjour-free AirPlay receiver for Windows, powered by FDH2/UxPlay.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages