Skip to content

macOS: Sunshine.app does not request microphone permission when running as standalone app, causing no audio in Moonlight #5259

Description

@hauntek

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

This issue is present in the latest pre-release

Describe the Bug

When Sunshine.app is launched as a standalone application (double-click) on macOS, audio does NOT stream to Moonlight clients, even though all permissions are granted. However, when launched from terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine), audio works perfectly.

Expected Behavior

When Sunshine.app is launched as a standalone application (double-click) on macOS, it should:

When I double-click Sunshine.app to launch it, I expect Sunshine to automatically pop up a system dialog requesting microphone permission (just like it does for screen recording permission). After I click Allow, audio should stream to Moonlight clients normally, exactly the same way it does when I launch Sunshine from the terminal.

Additional Context

Environment:

macOS Version: 14.5 (23F79) - also reproducible on 15.0
Architecture: ARM64 (Apple Silicon M1 Pro)
BlackHole version: 0.6.1
Sunshine version: 2026.415.34134
What I have tried:

Granted all permissions manually in System Settings (Screen Recording, Microphone, Audio Capture) - no effect
Reinstalled BlackHole and rebooted macOS - no effect
Reinstalled Sunshine - no effect
Launched Sunshine via terminal (/Applications/Sunshine.app/Contents/MacOS/Sunshine) - audio works perfectly
Launched Sunshine by double-clicking Sunshine.app - no audio
The issue is not about missing permissions. The issue is that Sunshine.app never requests microphone permission at runtime, causing audio capture to silently fail when run as a standalone application.

Host Operating System

macOS

Operating System Version

macOS Tahoe 26.5 (25F71)

Architecture

arm64/aarch64

Package

macOS - dmg

GPU Type

Apple Silicon

GPU Model

Apple M2 Max

GPU Driver/Mesa Version

metal 4

Capture Method

AVCaptureScreen (macOS)

Apps

{
  "env": {
    "PATH": "$(PATH):$(HOME)/.local/bin"
  },
  "apps": [
    {
      "name": "Desktop",
      "image-path": "desktop.png"
    },
    {
      "name": "Steam Big Picture",
      "detached": [
        "open steam://open/bigpicture"
      ],
      "prep-cmd": [
        {
          "do": "",
          "undo": "open steam://close/bigpicture"
        }
      ],
      "image-path": "steam.png"
    }
  ]
}

Log output

[2026-06-06 22:25:59.498]: Info: Sunshine version: 2026.415.34134 commit: a16c070a8feb509a55a434393690cf76447e9423
[2026-06-06 22:25:59.498]: Info: Package Publisher: LizardByte
[2026-06-06 22:25:59.498]: Info: Publisher Website: https://app.lizardbyte.dev
[2026-06-06 22:25:59.498]: Info: Get support: https://app.lizardbyte.dev/support
[2026-06-06 22:25:59.498]: Info: config: 'av1_mode' = 1
[2026-06-06 22:25:59.498]: Info: config: 'stream_audio' = true
[2026-06-06 22:25:59.498]: Info: config: 'hevc_mode' = 1
[2026-06-06 22:25:59.498]: Info: config: 'locale' = zh
[2026-06-06 22:25:59.498]: Info: config: 'encoder' = software
[2026-06-06 22:25:59.498]: Info: config: 'audio_sink' = BlackHole 2ch
[2026-06-06 22:25:59.498]: Info: config: 'address_family' = both
[2026-06-06 22:25:59.498]: Info: config: 'min_threads' = 6
[2026-06-06 22:25:59.523]: Warning: No gamepad input is available
[2026-06-06 22:25:59.523]: Info: Trying encoder [software]
[2026-06-06 22:25:59.534]: Info: Detecting displays
[2026-06-06 22:25:59.534]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:25:59.534]: Info: Configuring selected display (2) to stream
[2026-06-06 22:25:59.538]: Info: Creating encoder [libx264]
[2026-06-06 22:25:59.538]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:25:59.538]: Info: Color depth: 8-bit
[2026-06-06 22:25:59.538]: Info: Color range: JPEG
[2026-06-06 22:25:59.538]: Info: Streaming bitrate is 1000000
[2026-06-06 22:25:59.539]: Info: [libx264 @ 0x14165f270] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:25:59.539]: Info: [libx264 @ 0x14165f270] profile High, level 4.2, 4:2:0, 8-bit
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] frame I:1     Avg QP:51.00  size:  1279
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] mb I  I16..4: 100.0%  0.0%  0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] 8x8 transform intra:0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] i16 v,h,dc,p: 91%  0%  9%  0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] i8c dc,h,v,p: 100%  0%  0%  0%
[2026-06-06 22:25:59.673]: Info: [libx264 @ 0x14165f270] kb/s:613.92
[2026-06-06 22:25:59.674]: Info: Creating encoder [libx264]
[2026-06-06 22:25:59.674]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:25:59.674]: Info: Color depth: 8-bit
[2026-06-06 22:25:59.674]: Info: Color range: JPEG
[2026-06-06 22:25:59.674]: Error: Unsupported Pixel Format.
[2026-06-06 22:25:59.674]: Info: Detecting displays
[2026-06-06 22:25:59.674]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:25:59.674]: Info: Configuring selected display (2) to stream
[2026-06-06 22:25:59.674]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2026-06-06 22:25:59.674]: Info: 
[2026-06-06 22:25:59.674]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2026-06-06 22:25:59.674]: Info: 
[2026-06-06 22:25:59.674]: Info: Found H.264 encoder: libx264 [software]
[2026-06-06 22:25:59.675]: Info: Starting system tray
[2026-06-06 22:25:59.676]: Info: Configuration UI available at [https://localhost:47990]
[2026-06-06 22:25:59.704]: Info: System tray created
[2026-06-06 22:25:59.704]: Info: Starting main loop
[2026-06-06 22:26:00.391]: Info: Successfully registered DNS service.
[2026-06-06 22:26:18.659]: Info: Trying encoder [software]
[2026-06-06 22:26:18.659]: Info: Detecting displays
[2026-06-06 22:26:18.659]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.659]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.659]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.659]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:26:18.659]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.659]: Info: Color range: JPEG
[2026-06-06 22:26:18.659]: Info: Streaming bitrate is 1000000
[2026-06-06 22:26:18.660]: Info: [libx264 @ 0x131a06580] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:26:18.661]: Info: [libx264 @ 0x131a06580] profile High, level 4.2, 4:2:0, 8-bit
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] frame I:1     Avg QP:51.00  size:  1279
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] mb I  I16..4: 100.0%  0.0%  0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] 8x8 transform intra:0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] coded y,uvDC,uvAC intra: 0.0% 0.0% 0.0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] i16 v,h,dc,p: 91%  0%  9%  0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] i8c dc,h,v,p: 100%  0%  0%  0%
[2026-06-06 22:26:18.757]: Info: [libx264 @ 0x131a06580] kb/s:613.92
[2026-06-06 22:26:18.757]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.757]: Info: Color coding: SDR (Rec. 601)
[2026-06-06 22:26:18.757]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.757]: Info: Color range: JPEG
[2026-06-06 22:26:18.757]: Error: Unsupported Pixel Format.
[2026-06-06 22:26:18.757]: Info: Detecting displays
[2026-06-06 22:26:18.757]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.757]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.757]: Info: // Testing for available encoders, this may generate errors. You can safely ignore those errors. //
[2026-06-06 22:26:18.757]: Info: 
[2026-06-06 22:26:18.757]: Info: // Ignore any errors mentioned above, they are not relevant. //
[2026-06-06 22:26:18.757]: Info: 
[2026-06-06 22:26:18.757]: Info: Found H.264 encoder: libx264 [software]
[2026-06-06 22:26:18.757]: Info: Executing [Desktop]
[2026-06-06 22:26:18.835]: Info: New streaming session started [active sessions: 1]
[2026-06-06 22:26:18.835]: Info: ::ffff:192.168.11.15: Ping Timeout
[2026-06-06 22:26:18.866]: Info: CLIENT CONNECTED
[2026-06-06 22:26:18.932]: Info: Detecting displays
[2026-06-06 22:26:18.932]: Info: Detected display: 28E850 (id: 2) connected: true
[2026-06-06 22:26:18.932]: Info: Configuring selected display (2) to stream
[2026-06-06 22:26:18.932]: Info: Creating encoder [libx264]
[2026-06-06 22:26:18.933]: Info: Color coding: SDR (Rec. 709)
[2026-06-06 22:26:18.933]: Info: Color depth: 8-bit
[2026-06-06 22:26:18.933]: Info: Color range: MPEG
[2026-06-06 22:26:18.933]: Info: Streaming bitrate is 30988000
[2026-06-06 22:26:18.934]: Info: [libx264 @ 0x131a05e70] using cpu capabilities: ARMv8 NEON DotProd I8MM
[2026-06-06 22:26:18.934]: Info: [libx264 @ 0x131a05e70] profile High, level 5.2, 4:2:0, 8-bit
[2026-06-06 22:26:18.943]: Info: Minimum FPS target set to ~15fps (66.6667ms)
[2026-06-06 22:26:19.309]: Warning: audio_control_t::set_sink() unimplemented: BlackHole 2ch
[2026-06-06 22:26:19.309]: Info: Using configured audio sink BlackHole 2ch for capture.
[2026-06-06 22:26:19.371]: Info: Found microphone: BlackHole 2ch
[2026-06-06 22:26:19.371]: Info: Setting up microphone: BlackHole 2ch with 48000Hz, 240 frames, 2 channels
[2026-06-06 22:26:19.610]: Info: Audio capture session started successfully
[2026-06-06 22:26:19.611]: Info: Opus initialized: 48 kHz, 2 channels, 512 kbps (total), LOWDELAY
[2026-06-06 22:27:29.607]: Info: CLIENT DISCONNECTED
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] frame I:2     Avg QP:34.49  size:178153
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] frame P:2120  Avg QP:14.79  size: 50888
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] mb I  I16..4: 38.6% 53.4%  8.0%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] mb P  I16..4:  1.3%  2.2%  0.7%  P16..4: 12.1%  0.0%  0.0%  0.0%  0.0%    skip:83.7%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] 8x8 transform intra:52.5% inter:34.2%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] coded y,uvDC,uvAC intra: 50.4% 48.1% 23.2% inter: 5.1% 4.7% 1.3%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i16 v,h,dc,p: 44% 34% 10% 13%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 13% 26% 20%  4%  7%  5%  9%  5% 10%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 19% 30% 15%  4%  8%  5%  7%  4%  8%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] i8c dc,h,v,p: 45% 27% 19%  9%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] Weighted P-Frames: Y:0.5% UV:0.0%
[2026-06-06 22:27:29.612]: Info: [libx264 @ 0x131a05e70] kb/s:24483.95
[2026-06-06 22:27:29.638]: Warning: audio_control_t::set_sink() unimplemented: BlackHole 2ch

Online logs

No response

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions