Use a Windows 11 PC as an iPhone Bluetooth speaker or AirPlay screen receiver.
11
stars
8
commits
C#
primary language
Aug 2, 2026
updated
MirrorSpeaker is a small Windows desktop app that turns a PC into an AirPlay screen receiver or an iPhone Bluetooth speaker. It uses Windows' built-in Bluetooth audio receiver for phone-only video apps such as TikTok, and gives UxPlay a simple native interface for AirPlay mirroring.
Privacy policy · Security policy · Code signing policy · MIT license
The public source repository is github.com/codyabraham/MirrorSpeaker.
35000–35002 and mDNS UDP port 5353, so firewall access is predictable.The mirrored video opens in a separate GStreamer window managed by UxPlay. Keeping the media renderer separate is the most reliable Windows configuration supported by the upstream receiver.
The public source build requires Windows 11 and the .NET 10 LTS SDK. From PowerShell in this folder:
.\scripts\Build-Release.ps1
Then run:
dist\win-x64\MirrorSpeaker.exe
The published app is framework-dependent and does not bundle Microsoft .NET or
WPF runtime binaries. Running dist\win-x64\MirrorSpeaker.exe requires the
Microsoft .NET 10 Desktop Runtime (x64) to be installed.
For development:
dotnet run --project .\src\AirMirror.App\AirMirror.App.csproj
With the pinned Inno Setup 7.0.2 installed, create the per-user Windows installer, portable ZIP, and SHA-256 checksum file with:
.\scripts\Build-Installer.ps1 `
-Version 1.4.4 `
-Publisher "MirrorSpeaker Project" `
-PublisherUrl "https://github.com/codyabraham/MirrorSpeaker"
The outputs are written below artifacts\release. The installer adds Start
Menu and desktop shortcuts, registers a normal Windows uninstaller, and
supports Inno Setup's silent switches. It first checks for a compatible
Microsoft .NET 10 Desktop Runtime (x64). If that runtime is missing, setup
clearly prompts the user, downloads only the pinned official Microsoft
10.0.10 x64 runtime, verifies its SHA-256 checksum, and runs Microsoft's
runtime installer. An Internet connection and administrator approval for that
Microsoft system prerequisite may therefore be required; MirrorSpeaker itself
remains a per-user installation. The pinned runtime-installer SHA-256 is
e82fc901c8f52d716293b2bc0830ce0dd254a06268c457a19e8fc503560a84d1.
The portable ZIP does not download or bundle .NET. Its
MirrorSpeaker.exe requires the Microsoft .NET 10 Desktop Runtime (x64) to be
installed before launch. The ZIP uses portable.flag so MirrorSpeaker settings
and pairing records stay with the extracted app.
The first public release intentionally does not redistribute a prebuilt
receiver engine. AirPlay setup remains an explicit, user-initiated local
source build. A future release may include a pruned, versioned receiver
package built by scripts\Build-ReceiverPackage.ps1 only after the receiver
has a reproducible public CI build, complete corresponding source, and an
explicit license and legal review. The internal-test override and its
artifacts are never publishable. See
docs/RELEASING.md for the complete signing, licensing,
silent-install, and clean-Windows test checklist.
For TikTok or normal iPhone audio, choose Bluetooth speaker — best for TikTok. MirrorSpeaker checks Windows' Bluetooth-device records first, selects an already-connected iPhone, and reuses it without pairing again. Connected beside the phone describes its general Bluetooth link; only the Bluetooth connected status badge confirms that Windows also opened the separate audio receiver profile. If that profile does not open, MirrorSpeaker reports a failure and this PC will not appear as an iPhone audio destination yet. If the iPhone is not listed, click Bluetooth settings, confirm Windows shows it, return to MirrorSpeaker, and click Refresh phones. Bluetooth mode needs neither the AirPlay engine nor a Private Wi-Fi network or firewall exception.
For AirPlay screen mirroring:
AirPlay requires the iPhone and PC on the same local network. Guest Wi-Fi, VPNs, access-point/client isolation, or VLAN separation can block AirPlay discovery.
If the PC does not appear on the iPhone:
If the iPhone connects but video or audio does not appear:
For TikTok, use Bluetooth speaker — best for TikTok. TikTok may treat AirPlay screen mirroring as external playback and stop its local picture. Bluetooth avoids that AirPlay classification. Windows does not expose codec or buffer controls for this receiver API, so a small wireless delay remains. Using another wireless headset or speaker creates two radio hops and can be less reliable than the PC's built-in speakers or wired headphones. MirrorSpeaker keeps an enabled receiver alive after a transient Windows opening failure, recognizes a later phone-initiated connection, and makes bounded background attempts to open or recover the audio link.
dotnet build .\AirMirror.sln --configuration Release
dotnet run --project .\tests\AirMirror.Core.SmokeTests\AirMirror.Core.SmokeTests.csproj --configuration Release
The smoke tests cover safe argument construction, port validation, receiver log/PIN interpretation, engine discovery, settings persistence, and wireless-output classification. A physical iPhone is required for end-to-end Bluetooth audio validation; AirPlay mirroring also requires a local Wi-Fi network.
MirrorSpeaker has no telemetry or project-operated cloud service. The screen stream travels directly from the iPhone to the PC over the local network. Pairing is enabled by default, and the provided firewall rules apply only to Private networks. The AirPlay receiver and its dependencies connect to the network only for the user-requested operations described in the privacy policy. Please report vulnerabilities privately as described in the security policy.
MirrorSpeaker has not yet been accepted into the SignPath Foundation open-source program. Current builds are unsigned and must not be represented as signed. If the project is accepted, official Windows releases will use:
Free code signing provided by SignPath.io, certificate by SignPath Foundation
Code-signing roles are currently assigned as follows:
MirrorSpeaker Project is the publisher stored in the product and installer
metadata. A future SignPath signature would instead show SignPath Foundation
as the Authenticode certificate signer; the two fields have different
purposes. See the complete code signing policy.
MirrorSpeaker's original C# and XAML controller code is open source under the
MIT License. The user-initiated receiver setup obtains and locally
builds the pinned UxPlay revision recorded in
scripts/Install-ReceiverEngine.ps1;
UxPlay is GPL-3.0. UxPlay-derived source fragments and patch payloads embedded
in that script are GPL-3.0 material and are not covered by MirrorSpeaker's
root MIT license.
UxPlay also warns that the legal status of its third-party GPL PlayFair library for handling FairPlay is unclear. MirrorSpeaker repeats that warning without making a legal determination or representing that redistribution has been approved. This is one reason the first public release must omit the prebuilt receiver binary.
The framework-dependent application does not redistribute Microsoft .NET or
WPF runtime binaries. The normal Windows installer can obtain the pinned
Microsoft .NET 10 Desktop Runtime prerequisite directly from Microsoft when it
is missing; the portable ZIP requires that runtime to be installed separately.
The application does include Microsoft's unmodified Windows SDK .NET projection
assemblies needed to call the Windows Bluetooth APIs; their Windows SDK terms
and the remaining SignPath System Library review are disclosed in the
third-party notices.
The user-initiated receiver setup obtains GStreamer and MSYS2 locally, and the
Windows setup and uninstall programs contain Inno Setup-generated code. Each
third-party component remains governed by its respective license. See
THIRD-PARTY-NOTICES.txt for the full notices and
receiver redistribution restrictions.
8 commits
C#
55.8%
PowerShell
39.0%
Inno Setup
5.2%
Use a Windows 11 PC as an iPhone Bluetooth speaker or AirPlay screen receiver.
11
stars
8
commits
C#
primary language
Aug 2, 2026
updated
MirrorSpeaker is a small Windows desktop app that turns a PC into an AirPlay screen receiver or an iPhone Bluetooth speaker. It uses Windows' built-in Bluetooth audio receiver for phone-only video apps such as TikTok, and gives UxPlay a simple native interface for AirPlay mirroring.
Privacy policy · Security policy · Code signing policy · MIT license
The public source repository is github.com/codyabraham/MirrorSpeaker.
35000–35002 and mDNS UDP port 5353, so firewall access is predictable.The mirrored video opens in a separate GStreamer window managed by UxPlay. Keeping the media renderer separate is the most reliable Windows configuration supported by the upstream receiver.
The public source build requires Windows 11 and the .NET 10 LTS SDK. From PowerShell in this folder:
.\scripts\Build-Release.ps1
Then run:
dist\win-x64\MirrorSpeaker.exe
The published app is framework-dependent and does not bundle Microsoft .NET or
WPF runtime binaries. Running dist\win-x64\MirrorSpeaker.exe requires the
Microsoft .NET 10 Desktop Runtime (x64) to be installed.
For development:
dotnet run --project .\src\AirMirror.App\AirMirror.App.csproj
With the pinned Inno Setup 7.0.2 installed, create the per-user Windows installer, portable ZIP, and SHA-256 checksum file with:
.\scripts\Build-Installer.ps1 `
-Version 1.4.4 `
-Publisher "MirrorSpeaker Project" `
-PublisherUrl "https://github.com/codyabraham/MirrorSpeaker"
The outputs are written below artifacts\release. The installer adds Start
Menu and desktop shortcuts, registers a normal Windows uninstaller, and
supports Inno Setup's silent switches. It first checks for a compatible
Microsoft .NET 10 Desktop Runtime (x64). If that runtime is missing, setup
clearly prompts the user, downloads only the pinned official Microsoft
10.0.10 x64 runtime, verifies its SHA-256 checksum, and runs Microsoft's
runtime installer. An Internet connection and administrator approval for that
Microsoft system prerequisite may therefore be required; MirrorSpeaker itself
remains a per-user installation. The pinned runtime-installer SHA-256 is
e82fc901c8f52d716293b2bc0830ce0dd254a06268c457a19e8fc503560a84d1.
The portable ZIP does not download or bundle .NET. Its
MirrorSpeaker.exe requires the Microsoft .NET 10 Desktop Runtime (x64) to be
installed before launch. The ZIP uses portable.flag so MirrorSpeaker settings
and pairing records stay with the extracted app.
The first public release intentionally does not redistribute a prebuilt
receiver engine. AirPlay setup remains an explicit, user-initiated local
source build. A future release may include a pruned, versioned receiver
package built by scripts\Build-ReceiverPackage.ps1 only after the receiver
has a reproducible public CI build, complete corresponding source, and an
explicit license and legal review. The internal-test override and its
artifacts are never publishable. See
docs/RELEASING.md for the complete signing, licensing,
silent-install, and clean-Windows test checklist.
For TikTok or normal iPhone audio, choose Bluetooth speaker — best for TikTok. MirrorSpeaker checks Windows' Bluetooth-device records first, selects an already-connected iPhone, and reuses it without pairing again. Connected beside the phone describes its general Bluetooth link; only the Bluetooth connected status badge confirms that Windows also opened the separate audio receiver profile. If that profile does not open, MirrorSpeaker reports a failure and this PC will not appear as an iPhone audio destination yet. If the iPhone is not listed, click Bluetooth settings, confirm Windows shows it, return to MirrorSpeaker, and click Refresh phones. Bluetooth mode needs neither the AirPlay engine nor a Private Wi-Fi network or firewall exception.
For AirPlay screen mirroring:
AirPlay requires the iPhone and PC on the same local network. Guest Wi-Fi, VPNs, access-point/client isolation, or VLAN separation can block AirPlay discovery.
If the PC does not appear on the iPhone:
If the iPhone connects but video or audio does not appear:
For TikTok, use Bluetooth speaker — best for TikTok. TikTok may treat AirPlay screen mirroring as external playback and stop its local picture. Bluetooth avoids that AirPlay classification. Windows does not expose codec or buffer controls for this receiver API, so a small wireless delay remains. Using another wireless headset or speaker creates two radio hops and can be less reliable than the PC's built-in speakers or wired headphones. MirrorSpeaker keeps an enabled receiver alive after a transient Windows opening failure, recognizes a later phone-initiated connection, and makes bounded background attempts to open or recover the audio link.
dotnet build .\AirMirror.sln --configuration Release
dotnet run --project .\tests\AirMirror.Core.SmokeTests\AirMirror.Core.SmokeTests.csproj --configuration Release
The smoke tests cover safe argument construction, port validation, receiver log/PIN interpretation, engine discovery, settings persistence, and wireless-output classification. A physical iPhone is required for end-to-end Bluetooth audio validation; AirPlay mirroring also requires a local Wi-Fi network.
MirrorSpeaker has no telemetry or project-operated cloud service. The screen stream travels directly from the iPhone to the PC over the local network. Pairing is enabled by default, and the provided firewall rules apply only to Private networks. The AirPlay receiver and its dependencies connect to the network only for the user-requested operations described in the privacy policy. Please report vulnerabilities privately as described in the security policy.
MirrorSpeaker has not yet been accepted into the SignPath Foundation open-source program. Current builds are unsigned and must not be represented as signed. If the project is accepted, official Windows releases will use:
Free code signing provided by SignPath.io, certificate by SignPath Foundation
Code-signing roles are currently assigned as follows:
MirrorSpeaker Project is the publisher stored in the product and installer
metadata. A future SignPath signature would instead show SignPath Foundation
as the Authenticode certificate signer; the two fields have different
purposes. See the complete code signing policy.
MirrorSpeaker's original C# and XAML controller code is open source under the
MIT License. The user-initiated receiver setup obtains and locally
builds the pinned UxPlay revision recorded in
scripts/Install-ReceiverEngine.ps1;
UxPlay is GPL-3.0. UxPlay-derived source fragments and patch payloads embedded
in that script are GPL-3.0 material and are not covered by MirrorSpeaker's
root MIT license.
UxPlay also warns that the legal status of its third-party GPL PlayFair library for handling FairPlay is unclear. MirrorSpeaker repeats that warning without making a legal determination or representing that redistribution has been approved. This is one reason the first public release must omit the prebuilt receiver binary.
The framework-dependent application does not redistribute Microsoft .NET or
WPF runtime binaries. The normal Windows installer can obtain the pinned
Microsoft .NET 10 Desktop Runtime prerequisite directly from Microsoft when it
is missing; the portable ZIP requires that runtime to be installed separately.
The application does include Microsoft's unmodified Windows SDK .NET projection
assemblies needed to call the Windows Bluetooth APIs; their Windows SDK terms
and the remaining SignPath System Library review are disclosed in the
third-party notices.
The user-initiated receiver setup obtains GStreamer and MSYS2 locally, and the
Windows setup and uninstall programs contain Inno Setup-generated code. Each
third-party component remains governed by its respective license. See
THIRD-PARTY-NOTICES.txt for the full notices and
receiver redistribution restrictions.
8 commits
C#
55.8%
PowerShell
39.0%
Inno Setup
5.2%