Convert Figma logo to code with AI

mariotaku logomoonlight-tv

Lightweight NVIDIA GameStream Client, for LG webOS TV and embedded devices like Raspberry Pi

1,010
38
1,010
44

Top Related Projects

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

GameStream client for Android

Gamestream client for embedded systems

Helper application for Linux distributions serving as a kind of "entry point" for running and integrating AppImages

4,407

Linux application sandboxing and distribution framework

Quick Overview

Moonlight-TV is an open-source implementation of NVIDIA GameStream client for Smart TVs and set-top boxes. It allows users to stream games from their NVIDIA GPU-equipped PC to their TV or set-top box, providing a console-like gaming experience on these devices.

Pros

  • Enables game streaming to Smart TVs and set-top boxes without additional hardware
  • Open-source, allowing for community contributions and customizations
  • Supports various platforms, including WebOS, Tizen, and Android TV
  • Provides a native TV interface for a seamless user experience

Cons

  • Requires an NVIDIA GPU-equipped PC as the host machine
  • May have higher latency compared to dedicated streaming devices
  • Limited to the features and performance of the TV or set-top box hardware
  • Might not support all games or have full feature parity with official NVIDIA GameStream clients

Getting Started

To get started with Moonlight-TV:

  1. Ensure your host PC has an NVIDIA GPU and GeForce Experience installed.
  2. Enable GameStream in the NVIDIA GeForce Experience settings.
  3. Download the appropriate Moonlight-TV app for your TV or set-top box platform.
  4. Install the app on your device following the platform-specific instructions.
  5. Launch Moonlight-TV and follow the on-screen instructions to pair with your host PC.
  6. Once paired, select a game from the list to start streaming.

Note: Specific installation steps may vary depending on your TV or set-top box platform. Refer to the project's GitHub repository for detailed, platform-specific instructions.

Competitor Comparisons

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

Pros of Moonlight-qt

  • More mature and actively maintained project with regular updates
  • Supports a wider range of platforms, including Windows, macOS, and Linux
  • Has a larger community and more extensive documentation

Cons of Moonlight-qt

  • Heavier resource usage due to Qt framework
  • May have a steeper learning curve for contributors unfamiliar with Qt

Code Comparison

Moonlight-qt (C++ with Qt):

void StreamSegue::startStream(NvComputer* computer, NvApp& app)
{
    m_Computer = computer;
    m_App = app;
    m_StreamConfig.width = m_StreamWidth;
    m_StreamConfig.height = m_StreamHeight;
    m_StreamConfig.fps = m_StreamFps;
    LiStartConnection(&m_StreamConfig.stream, m_Computer->activeAddress,
                      &m_StreamConfig.serverInfo, &k_ConnCallbacks,
                      &m_StreamConfig.videoCallbacks, &m_StreamConfig.audioCallbacks,
                      NULL, 0, NULL, 0);
}

Moonlight-tv (C):

static void start_stream(PSERVER_DATA server, PAPP_LIST app) {
    STREAM_CONFIGURATION config;
    config.width = streamconfig.width;
    config.height = streamconfig.height;
    config.fps = streamconfig.fps;
    config.bitrate = streamconfig.bitrate;
    LiStartConnection(&server->serverInfo, &config, &connection_callbacks,
                      &decoder_callbacks, &audio_callbacks, NULL, 0, NULL, 0);
}

Both projects use similar APIs for stream initialization, but Moonlight-qt leverages Qt's object-oriented approach, while Moonlight-tv uses a more traditional C-style implementation.

GameStream client for Android

Pros of Moonlight-Android

  • More mature and actively maintained project with frequent updates
  • Larger user base and community support
  • Optimized for Android devices with touch controls and mobile-specific features

Cons of Moonlight-Android

  • Limited to Android platform, not suitable for other devices or TVs
  • May require more system resources compared to TV-oriented clients
  • Potentially more complex user interface due to mobile design paradigms

Code Comparison

Moonlight-Android (Java):

@Override
protected void onResume() {
    super.onResume();
    CacheHelper.startCacheThread();
    bindService(new Intent(this, ComputerManagerService.class), serviceConnection, Service.BIND_AUTO_CREATE);
}

Moonlight-TV (C):

static void app_init(void)
{
    NKLOG("Initializing application");
    settings_initialize();
    config_parse(0, NULL);
    streaming_init();
}

Summary

Moonlight-Android is a well-established Android-specific client for game streaming, offering robust features and community support. Moonlight-TV, on the other hand, is designed for TV platforms, potentially providing a more streamlined experience for big-screen devices. The code comparison shows different languages and approaches, with Moonlight-Android using Java and Android-specific components, while Moonlight-TV uses C for a more low-level implementation suitable for TV devices.

Gamestream client for embedded systems

Pros of moonlight-embedded

  • More mature and established project with a larger community
  • Supports a wider range of platforms, including Raspberry Pi and other embedded systems
  • Better performance optimization for low-power devices

Cons of moonlight-embedded

  • Less user-friendly interface, primarily command-line based
  • Fewer built-in features for TV-specific use cases
  • May require more technical knowledge to set up and configure

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-tv:

const app = new Application({
  width: 1280,
  height: 720,
});

app.stage.addChild(new MainMenu());
app.start();

moonlight-embedded uses C for low-level system access and performance, while moonlight-tv uses JavaScript with a framework for easier UI development and cross-platform compatibility on smart TVs and streaming devices.

moonlight-tv focuses on providing a TV-friendly interface and experience, making it more suitable for users who want a plug-and-play solution for their smart TV or streaming device. moonlight-embedded, on the other hand, offers more flexibility and broader device support, making it ideal for users who need to run Moonlight on various embedded systems or prefer command-line control.

Helper application for Linux distributions serving as a kind of "entry point" for running and integrating AppImages

Pros of AppImageLauncher

  • Focuses on managing and integrating AppImage applications into the system
  • Provides a user-friendly interface for handling AppImage files
  • Supports a wide range of Linux distributions

Cons of AppImageLauncher

  • Limited to AppImage format, while Moonlight-TV supports game streaming
  • Lacks gaming-specific features and optimizations
  • May not provide the same level of performance for gaming applications

Code Comparison

AppImageLauncher (C++):

bool AppImageLauncher::integrateAppImage(const QString& pathToAppImage, const QString& installationDirectory) {
    // Integration logic
}

Moonlight-TV (C):

int moonlight_init(int argc, char* argv[]) {
    // Initialization logic for game streaming
}

Summary

AppImageLauncher is a tool for managing AppImage applications on Linux systems, providing integration and user-friendly handling. Moonlight-TV, on the other hand, is specifically designed for game streaming using the Moonlight protocol. While AppImageLauncher offers broader application support, Moonlight-TV focuses on optimizing the gaming experience. The code comparison shows the different approaches: AppImageLauncher deals with AppImage integration, while Moonlight-TV initializes game streaming functionality.

4,407

Linux application sandboxing and distribution framework

Pros of Flatpak

  • Broader application: Flatpak is a universal packaging system for Linux, while Moonlight-TV is specific to game streaming
  • Larger community and more contributors: Flatpak has over 400 contributors compared to Moonlight-TV's 20+
  • More comprehensive documentation and guides for users and developers

Cons of Flatpak

  • More complex setup and usage compared to Moonlight-TV's focused functionality
  • Larger footprint and resource requirements due to its comprehensive nature
  • May introduce additional layers of abstraction, potentially impacting performance

Code Comparison

Moonlight-TV (C):

static int moonlight_init(void) {
    int ret;
    ret = config_init();
    if (ret != 0)
        return ret;
    return 0;
}

Flatpak (C):

gboolean
flatpak_dir_deploy_appstream (FlatpakDir   *self,
                              const char   *remote,
                              const char   *arch,
                              gboolean     *out_changed,
                              GCancellable *cancellable,
                              GError      **error)

The code snippets highlight the different focus areas: Moonlight-TV deals with game streaming initialization, while Flatpak handles application deployment and management.

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 TV

Moonlight TV is a community version of Moonlight GameStream Client, made for large screens. It works on LG webOS powered TVs, and Raspberry Pi running Raspbian.

Download Stats

Features

  • High performance streaming for webOS
  • UI optimized for large screen and remote controller
  • Supports up to 4 controllers
  • Easy to port to other OSes (Now runs on macOS, Arch, Debian, Raspbian and Windows)

Screenshots

Launcher

Settings

In-game Overlay Screenshot performed on TV has lower picture quality. Actual picture quality is better.

Download

For webOS

Easy installation with dev-manager-desktop (recommended)

Or download IPK from Latest release

For Raspbian

Download DEB from Latest release

Documentations

Credits