Remote Play Switch

  

#Chiaki

Remote Play Together with Steam on Nintendo Switch Some games are designed with online play. For those that only have local multiplayer, you can use a feature on Steam called Steam Remote Play Together to play these games with a friend in another place as if they were sat next to you. Kind of a really fun way to have your friends log in and play Mario Kart / other games with you if they don't own a Switch! You can also use it for remote play of course! Nintendo Life reports that developer Andrew Sampson is bringing a new app called Rainway that will allow you to stream PC games to the Switch. Enjoy games like Overwatch on Nintendo Switch In fact, Sampson claims the app can stream any PC game via Remote Play to other devices. Sampson is the developer behind Steam Cleaner and Borderless Gaming.

Disclaimer: This project is not endorsed or certified by Sony Interactive Entertainment LLC.

Microsoft made Xbox One and Windows 10 PCs as one with all their exclusives available on it while Nintendo Switch opened up for Doom and Witcher 3. It’s now Sony’s turn to make PS4 Remote Play available for all major platforms and a recent survey hints at this implementation.

Chiaki is a Free and Open Source Software Client for PlayStation 4 and PlayStation 5 Remote Playfor Linux, FreeBSD, OpenBSD, Android, macOS, Windows, Nintendo Switch and potentially even more platforms.

#Project Status

As all relevant features are implemented, this project is considered to be finished and in maintenance mode only.No major updates are planned and contributions are only accepted in special cases.

#Installing

You can either download a pre-built release or build Chiaki from source.

#Downloading a Release

Builds are provided for Linux, Android, macOS, Nintendo Switch and Windows.

You can download them here.

  • Linux: The provided file is an AppImage. Simply make it executable (chmod +x <file>.AppImage) and run it.
  • Android: Install from Google Play, F-Droid or download the APK from Sourcehut.
  • macOS: Drag the application from the .dmg into your Applications folder.
  • Windows: Extract the .zip file and execute chiaki.exe.
  • Switch: Download the .nro file and copy it into the switch/ directory on your SD card.

#Building from Source

Dependencies are CMake, Qt 5 with QtMultimedia, QtOpenGL and QtSvg, FFMPEG (libavcodec with H264 is enough), libopus, OpenSSL 1.1, SDL 2,protoc and the protobuf Python library (only used during compilation for Nanopb). Then, Chiaki builds just like any other CMake project:

For more detailed platform-specific instructions, see doc/platform-build.md or switch/ for Nintendo Switch.

#Usage

If your Console is on your local network, is turned on or in standby mode and does not have Discovery explicitly disabled, Chiaki should find it.Otherwise, you can add it manually.To do so, click the '+' icon in the top right, and enter your Console's IP address.

You will then need to register your Console with Chiaki. You will need two more pieces of information to do this.

#Obtaining your PSN AccountID

Starting with PS4 7.0, it is necessary to use a so-called 'AccountID' as opposed to the 'Online-ID' for registration (streaming itself did not change).This ID seems to be a unique identifier for a PSN Account and it can be obtained from the PSN after logging in using OAuth.A Python 3 script which does this is provided in scripts/psn-account-id.py.Simply run it in a terminal and follow the instructions. Once you know your ID, write it down. You will likely never have to do this process again.

#Obtaining a Registration PIN

To register a Console with a PIN, it must be put into registration mode. To do this on a PS4, simply go to:Settings -> Remote Play -> Add Device, or on a PS5: Settings -> System -> Remote Play -> Link Device.

You can now double-click your Console in Chiaki's main window to start Remote Play.

#Acknowledgements

This project has only been made possible because of the following Open Source projects:Rizin,Cutter,Frida andx64dbg.

Also thanks to delroth for analyzing the registration and wakeup protocol,grill2010 for analyzing the PSN's OAuth Login,as well as a huge thank you to FioraAeterna for giving me someextremely helpful information about FEC and error correction.

#About

Created by Florian Märkl

This program is free software: you can redistribute it and/or modifyit under the terms of the GNU Affero General Public License version 3as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public Licensealong with this program. If not, see https://www.gnu.org/licenses/.

Additional permission under GNU AGPL version 3 section 7

If you modify this program, or any covered work, by linking orcombining it with the OpenSSL project's OpenSSL library (or amodified version of that library), containing parts covered by theterms of the OpenSSL or SSLeay licenses, the Free Software Foundationgrants you additional permission to convey the resulting work.Corresponding Source for a non-source form of such a combinationshall include the source code for the parts of OpenSSL used as wellas that of the covered work.

Let the switch remotely play PC games (similar to steam link or remote play).

This project is inspired by In-Home-Switching and SkyNX. The goal is to make a convenient streamer/client application to be used to remote play PC games on the switch.

In-Home-Switching and SkyNX already offer the ability to do so, however there were some convenience features missing that I wanted to add. I also recently was studying multi-threading and when I saw the code, I thought 'this is the perfect chance to try writing it in C++'.

Note

The video stream is CPU dependent as at the moment it uses the ffmpeg option of hwaccel auto which usually results in ffmpeg picking CPU for the screen capture process. In my initial prototyping phase I found choosing the AMD GPU option for ffmpeg led to inconsistent stream results. I will look at making the hwaccel option configurable in the future but for now just keep in mind CPU is important.

If you're playing a game that is CPU intensive then there's a high chance the stream will have skips or hiccups. If your CPU is weak, then it'll be hard for it to produce and push the frames quick enough.

For my PC, when I play Nier Automata there are no hiccups and I can get near 60 fps depending on the stream settings (1280 x 720 desktop res, and 5mb/s bitrate). But when I tried playing RE3 2020 at 30 or 56fps I was getting hiccups and skips. So please keep this in mind.

Features

Remote Play For Nintendo Switch

  • No system crashing when going to sleep (stream will disconnect though and application is closeable)
  • Desktop application to host remote connection stream
  • Stream input from the switch to remote connection
  • Stream audio from remote connection to the switch
  • Automatically connect switch and PC stream applications
  • Automatically mute PC when audio is streaming to the Switch
  • Allow manual configuration of switch to PC connection
  • Configure stream settings from switch
  • Disconnect / Reconnect stream at will
  • Toggle Input Mode to Mouse
  • Toggle Input Mode to DS4(PS4) controller
  • Toggle Input Mode to Xbox controller

Switch-Project

This project consists of an application written for the switch that will decode stream data received from FFMPEG and send its input to an application to emulate a controller. The rendering is done with SDL2 and the project is written in C++.

Tested on:

  • Atmosphere 0.14.1 - FW 10.1.0 (switch-remote-play 0.7.2)
  • Atmosphere 0.16.2 - FW 10.1.0 (switch-remote-play 0.7.2)

Windows-Project

This project consists of an application written for Windows that will launch an FFMPEG stream to encode and send data. The application, after launching the FFMPEG stream, will then listen to receive input data and emulate a controller via the ViGEm Client SDK. The ViGEm Client SDK expects the ViGEm Bus Kernel Driver to be installed on the machine in order to work. For more info on the kernel driver code see the ViGEmBus github page. For the driver installation, see the ViGEmBus Releases page.

The Windows project is also written in C++ and uses Winsock to do socket communication with the switch application.

Tested on:

  • Windows 10 64 bit
    • Ryzen 5 2600 3.4GHz
    • AMD Radeon RX 5600 XT 6GB
    • 16GB RAM

Known Issues

Stream Performance

The stream performance is heavily dependent on network connectivity and your PC CPU performance. Configuration settings will need to be played with the find what works well with your network + PC environment.

I recommend playing with the 'Encoder Preset' and 'Quality Control Factor' values while keeping bitrate at 8192 or less.

General tips

  • Preset value controls how the encoder should work: ultrafast means the encoder performs to get the image out as fast as possible ignoring quality, and veryslow means the encoder can take its time to preserve image quality.
  • Codec value can help performance however I have tested both the AMF and standard h264 and don't notice much of a difference.
  • Quality control factor is what controls how good the image should be. The lower the value the harder your PC must work to maintain quality. (this value and 'Preset' are what will dictate your CPU's workload)
  • For more info see the ffmpeg documentation.

Config examples

Play
  • Great image quality config:
    • Preset - veryslow
    • Quality control factor - less than 10 (0 = perfect image)
    • Bitrate - around 5000 - 8000
    • Vsync Mode - variable frame rate
  • Latency oriented config:
    • Preset - ultrafast
    • Quality control factor - 20+
    • Bitrate - around 5000
    • Vsync Mode - variable frame rate

Nintendo Switch Remote Play

I haven't tested all configuration combinations (and these are dependent on my PC specs), so if you find one that works great please feel free to send it to me with your PC specs and network environment configuration 🙂

Rare crash when opening some homebrew apps

The crash issue in v0.7.2 has been found and patched. (it was due to the network discovery feature not being shutdown correctly) The app still crashes however it is harder to reproduce now and I haven't found a proper 100% way to reproduce the crash yet. The current crashing issue is rare and only crashes hbloader/hbmenu when opening an app after streaming for a certain while. I can't reproduce it but it's gone for now. If anyone figures out how to reproduce the crash, please let me know.

Thanks

Remote Play Ps4 Switch

  • jakibaki for the original In-Home-Switching switch application
  • DevL0rd for the updated streaming application SkyNX
  • FFmpeg for an exhaustingly extensive library
  • nefarius for the ViGEm Client SDK. It's such a nice SDK/library to use
  • rdp for screen-capture-recorder. Made streaming audio via FFmpeg on PC very easy
  • SwitchBrew for libNX
  • devkitPro bloody legends for letting us have a toolchain to compile stuff for the Switch
  • SciresM, TuxSH, hexkyz, and fincs for Atmosphere. Absolute madlads these lot are. Also a shoutout to the champs that help contribute to the repo.
  • Jonathan Dearborn for SDL_FontCache
  • cucholix for the app icon 🙂

by Moehammered.

Remotely Play Switch

Que novedades incluye la versión 0.8.3

Released

Nintendo Switch Remote Play Ps4

PC Host Application Changes:

  • Controller Bug Fixes
    • Fixed an issue where controller gamepad data was not being streamed correctly on certain network cards.
      • Basically, needed to confirm the size of the gamepad data payload and if it wasn't as expected, keep reading the socket before proceeding.
    • Fixed the incorrect button mapping for the joycon's 'minus' button being mapped to the 'guide' button on the Xbox 360 controller.
      • Now 'minus' is mapped to 'back' on the 360 controller.
    • Fixed a potential overflow bug with the virtual controller analog sticks for the DS4 and X360 controller.
  • Diagnostic Output
    • Network configuration information is checked and displayed by the program.
      • This will help when users report networking issues as well as help users be able to easily determine the IP address of the PC without having to use ipconfig.
    • Monitor display information is displayed. This will be useful when users report clipped desktops coming through the Switch.
    • Virtual controller sanity checks are performed now. This is to make sure the virtual controller driver is installed and working.
    • The output from FFMPEG when encoding video and audio is now a configuration option. Users can choose to show the encoder logging data or not. This will mainly be useful for debugging odd situations where audio isn't coming through or video seems to fail.
      • This is in a configuration file called'config.ini'. It is located in the same place as'switch-remote-play-host.exe'.

Switch Application Changes:

Remote Play Switch Homebrew

  • Configuration Options
    • Broadcast Address added as a configuration option. The PC application will display the broadcast address to be added to the switch application's config file. Adding it will allow automatic network discovery to work when pressing the 'L' button.
      • Without this option being specified it will default to 192.168.0.255. If you do not specify your broadcast address in the config file then you will have to use Manual IP Mode.
    • Manual IP Mode Enabled option is now stored in the config file. This will allow users to now be able to just press 'R' once the application opens to connect without having to go to the manual IP mode screen and press 'enabled'.

Steam Remote Play Switch

This release is a stepping stone towards more diagnostic info. I had other plans for this release but I had a fair few issues reported, with the controller issue being very high priority.