moonlight-tv
Lightweight NVIDIA GameStream Client, for LG webOS TV and embedded devices like Raspberry Pi
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
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:
- Ensure your host PC has an NVIDIA GPU and GeForce Experience installed.
- Enable GameStream in the NVIDIA GeForce Experience settings.
- Download the appropriate Moonlight-TV app for your TV or set-top box platform.
- Install the app on your device following the platform-specific instructions.
- Launch Moonlight-TV and follow the on-screen instructions to pair with your host PC.
- 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.
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
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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.
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
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
- moonlight-embedded, for original libgamestream and decoder components
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
Linux application sandboxing and distribution framework
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot