AirPlay OBS plugin for Apple Silicon: iPhone / iPad / Mac Screen Mirroring into OBS Studio as a source named AirPlay Receiver. Video + audio.
Not an official OBS Project plugin. Not affiliated with Apple or Zoom.
macOS 13+ · arm64 · OBS Studio 32.2.2
Download (macOS Apple Silicon): obs-airplay-0.2.5-macos-arm64.pkg
iPhone shot: Control Center → Screen Mirroring and a live mirror in the preview are not in this README yet. They need a phone on the same Wi-Fi. The OBS UI shots below are from this Mac.
| Source | AirPlay Receiver in Sources → + |
| AirPlay name | The OBS source name (rename the source to rename the receiver) |
| Idle | Full-canvas instruction card (not a black box) |
| Live video | Letterboxed into the OBS canvas; transparent margins, scene shows through |
| Audio | PCM into OBS; pad default −6 dB (source properties). iPhone volume buttons do not change capture level |
| Crash isolation | Protocol/decode run in AirPlayReceiverHelper.app. Killing the helper must not kill OBS |
OBS may stay open. The installer finishes and offers a restart so OBS loads the new plugin. Restart is optional.
Installer: double-click obs-airplay-0.2.5-macos-arm64.pkg (also on Releases). No admin password. Payload:
~/Library/Application Support/obs-studio/plugins/obs-airplay.plugin
Does not write into /Applications/OBS.app.
From this tree:
./scripts/package_pkg.sh # → dist/obs-airplay-0.2.5-macos-arm64.pkg
./scripts/install.shThere is no Apple Developer ID, so the .pkg is not notarized. After a download from the internet:
- Control-click the
.pkg→ Open, or - System Settings → Privacy & Security → Open Anyway
AirDrop/USB often skip that prompt.
If OBS still says the plugin failed to load after Open Anyway: this version’s installer rewrites the bundle onto a new inode (macOS 26 keeps Gatekeeper state after xattr). Reinstall 0.2.5, then restart OBS. Homebrew / FFmpeg on the target Mac is not required.
./scripts/uninstall.sh-
OBS → Sources → + → AirPlay Receiver
-
The receiver advertises as soon as the source exists (any scene). The canvas shows the waiting card:
-
On iPhone: Control Center → Screen Mirroring → the source name (default
AirPlay Receiver), notMacBook Air/ the Mac’s own receiver. -
Video + audio land on the source. Ride level with the source pad and the OBS mixer.
-
Source properties → Mode (waiting card: Mac or iPhone) and FPS (25, 30, or 60). Resolution follows the canvas and the connected device; there is no width/height field. A MacBook widens the source when it connects. Tools → AirPlay Receiver: stub language (en/ru) and connect/disconnect scene automation. Disconnect can return to the previous scene.
Two sources can run at once (AirPlay Receiver, AirPlay Receiver 2, …). Rename while live restarts that helper (the AirPlay session drops).
Built-in AirPlay Receiver on the Mac can stay on. The picker will show several names — pick the OBS source.
- Apple Silicon only. No Windows, no Intel Mac.
- OBS 32.2.2 arm64.
- Unsigned
.pkg. - 2h soak, Wi-Fi toggle, and reconnect loops still need a real iPhone (see
docs/TEST_REPORT.md). Lock/unlock and first mirror have been confirmed on this machine.
This is a fork/rewrite of mika314/obs-airplay (GPL-2.0), not an official OBS Project plugin.
- Protocol: UxPlay 1.73.6 (GPL-3.0), vendored. Lineage: antimof/UxPlay → RPiPlay / shairplay / playfair.
- Helper process is this project’s design. Zoom AirHost was inspected read-only as a process-isolation reference. No Zoom code, identity, or assets.
- OBS Studio plugin API: obsproject/obs-studio (GPL-2.0).
- Also: libplist, FFmpeg (helper only), fdk-aac, OpenSSL. See
NOTICEanddocs/DEPENDENCIES.md.
Vibe-coded in Cursor by the maintainer. Models used on this tree: Cursor Auto, Composer, GPT-5.3 Codex, Grok 4.6.
That is a fact, not a sales pitch. Treat the plugin as experimental. File crashes in Issues. Do not assume OBS Forums will list it: their resource policy discourages mostly-AI plugins even with a disclaimer.
- OBS plugin (
obs-airplay.plugin): GPL-2.0-or-later (same family as upstream obs-airplay / libobs). SeeLICENSE. - Helper (
AirPlayReceiverHelper.app) links UxPlay: GPL-3.0. Seethird_party/UxPlay/LICENSE. - fdk-aac: Fraunhofer FDK AAC license (bundled dylib), not GPL.
docs/BUILD.md. Pins: OBS 32.2.2, UxPlay v1.73.6 21eef8df25d91e12635c36d8176ad192725baca2.
- Latest
.pkg: https://github.com/dgraid/obs-airplay-plugin/releases/latest - Counts (GitHub counts the attached
.pkg, not the source zip):
gh api repos/dgraid/obs-airplay-plugin/releases --jq '.[] | {tag: .tag_name, assets: [.assets[] | {name, download_count}]}'


