Convert Figma logo to code with AI

moonlight-stream logomoonlight-ios

GameStream client for iOS/tvOS

1,118
286
1,118
120

Top Related Projects

Host for Moonlight Streaming Client

Gamestream client for embedded systems

GameStream client for PCs (Windows, Mac, Linux, and Steam Link)

Gamestream client for embedded systems

Quick Overview

Moonlight-iOS is an open-source iOS client for NVIDIA GameStream and Sunshine, allowing users to stream games from their PC to their iOS devices. It leverages the Moonlight streaming protocol to provide low-latency, high-quality game streaming on iPhones and iPads.

Pros

  • Enables PC gaming on iOS devices with minimal latency
  • Supports both NVIDIA GameStream and Sunshine streaming protocols
  • Free and open-source software
  • Regular updates and active community support

Cons

  • Requires a compatible gaming PC with NVIDIA GPU or Sunshine setup
  • Performance may vary depending on network conditions
  • Limited to iOS devices, not available for other mobile platforms
  • Some advanced features may require jailbreaking (e.g., controller support for older iOS versions)

Getting Started

To get started with Moonlight-iOS:

  1. Ensure your gaming PC meets the requirements (NVIDIA GPU for GameStream or Sunshine setup).
  2. Download and install the Moonlight app from the App Store.
  3. Launch the app and follow the on-screen instructions to pair with your PC.
  4. Select a game from the list of available games on your PC.
  5. Enjoy gaming on your iOS device!

Note: For the best experience, use a 5GHz Wi-Fi network or wired Ethernet connection for your iOS device and gaming PC.

Competitor Comparisons

Host for Moonlight Streaming Client

Pros of Sunshine

  • Cross-platform support for Windows, Linux, and macOS
  • Open-source and self-hosted solution for game streaming
  • Customizable streaming settings and advanced features

Cons of Sunshine

  • Requires more setup and configuration compared to Moonlight iOS
  • May have less optimized performance on iOS devices
  • Smaller community and potentially slower development cycle

Code Comparison

Sunshine (C++):

void Stream::sendAudioFrame(const int16_t *pcm_data, int sample_count) {
    std::vector<uint8_t> opus_packet(1024);
    opus_int32 opus_length = opus_encode(_audio_encoder, pcm_data, sample_count, opus_packet.data(), opus_packet.size());
    // ... (sending audio data)
}

Moonlight iOS (Objective-C):

- (void)connectionStarted {
    [self.streamManager startAudioRendering];
    [self.streamManager startVideoDecoderWithVideoFormat:self.streamConfig.videoFormat];
    // ... (starting stream components)
}

The code snippets show different approaches to handling audio streaming and connection initialization, reflecting the distinct architectures and platforms of the two projects.

Gamestream client for embedded systems

Pros of moonlight-embedded

  • Supports a wider range of platforms, including Linux, Raspberry Pi, and embedded devices
  • More customizable and flexible for advanced users
  • Potentially lower resource usage on supported devices

Cons of moonlight-embedded

  • Requires more technical knowledge to set up and configure
  • May have a less polished user interface compared to the iOS version
  • Limited to devices that can run the embedded software

Code Comparison

moonlight-embedded:

int main(int argc, char* argv[]) {
  CONFIGURATION config;
  config_parse(argc, argv, &config);
  connection_init(&config);
  // ... (additional setup and main loop)
}

moonlight-ios:

@main
struct MoonlightApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

The moonlight-embedded project uses C for low-level system access and performance, while moonlight-ios uses Swift for iOS app development. The embedded version requires manual configuration and initialization, whereas the iOS app leverages the SwiftUI framework for a more streamlined setup.

Both projects aim to provide game streaming capabilities using the Moonlight protocol, but they target different platforms and use cases. moonlight-embedded is better suited for DIY and embedded projects, while moonlight-ios offers a more user-friendly experience for iOS devices.

GameStream client for PCs (Windows, Mac, Linux, and Steam Link)

Pros of moonlight-qt

  • Cross-platform support (Windows, macOS, Linux) vs. iOS-only
  • More customizable settings and advanced features
  • Supports keyboard and mouse input for a wider range of games

Cons of moonlight-qt

  • Requires more setup and configuration compared to the iOS app
  • May have higher system requirements for optimal performance
  • Less optimized for touch input compared to the iOS version

Code Comparison

moonlight-qt:

void StreamingPreferences::retranslate()
{
    m_Ui.bitrateLabel->setText(tr("Video bitrate:"));
    m_Ui.framerateLabel->setText(tr("Preferred FPS:"));
    m_Ui.resolutionLabel->setText(tr("Resolution:"));
}

moonlight-ios:

func updateStreamConfig() {
    streamConfig.bitRate = Int32(bitRate)
    streamConfig.frameRate = Int32(frameRate)
    streamConfig.width = Int32(resolution.width)
    streamConfig.height = Int32(resolution.height)
}

The code snippets show differences in language (C++ vs. Swift) and approach to handling stream configuration. moonlight-qt focuses on UI translation, while moonlight-ios directly updates stream settings.

Gamestream client for embedded systems

Pros of moonlight-embedded

  • Supports a wider range of platforms, including Linux, Raspberry Pi, and embedded devices
  • More customizable and flexible for advanced users
  • Potentially lower resource usage on supported devices

Cons of moonlight-embedded

  • Requires more technical knowledge to set up and configure
  • May have a less polished user interface compared to the iOS version
  • Limited to devices that can run the embedded software

Code Comparison

moonlight-embedded:

int main(int argc, char* argv[]) {
  CONFIGURATION config;
  config_parse(argc, argv, &config);
  connection_init(&config);
  // ... (additional setup and main loop)
}

moonlight-ios:

@main
struct MoonlightApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

The moonlight-embedded project uses C for low-level system access and performance, while moonlight-ios uses Swift for iOS app development. The embedded version requires manual configuration and initialization, whereas the iOS app leverages the SwiftUI framework for a more streamlined setup.

Both projects aim to provide game streaming capabilities using the Moonlight protocol, but they target different platforms and use cases. moonlight-embedded is better suited for DIY and embedded projects, while moonlight-ios offers a more user-friendly experience for iOS devices.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Moonlight iOS/tvOS

AppVeyor Build Status

Moonlight for iOS/tvOS is an open source client for Sunshine and NVIDIA GameStream. Moonlight for iOS/tvOS allows you to stream your full collection of games and apps from your powerful desktop computer to your iOS device or Apple TV.

Moonlight also has a PC client and Android client.

Check out the Moonlight wiki for more detailed project information, setup guide, or troubleshooting steps.

Moonlight for iOS and tvOS

Building

  • Install Xcode from the App Store page
  • Run git clone --recursive https://github.com/moonlight-stream/moonlight-ios.git
    • If you've already clone the repo without --recursive, run git submodule update --init --recursive
  • Open Moonlight.xcodeproj in Xcode
  • To run on a real device, you will need to locally modify the signing options:
    • Click on "Moonlight" at the top of the left sidebar
    • Click on the "Signing & Capabilities" tab
    • Under "Targets", select "Moonlight" (for iOS/iPadOS) or "Moonlight TV" (for tvOS)
    • In the "Team" dropdown, select your name. If your name doesn't appear, you may need to sign into Xcode with your Apple account.
    • Change the "Bundle Identifier" to something different. You can add your name or some random letters to make it unique.
    • Now you can select your Apple device in the top bar as a target and click the Play button to run.