[Shield General] Moerf:
How to modify Splashtop Stream Quality

Hello guys,

I wanted to share some knowledge with you that I found out using the Process Monitor from Sysinternals. Basically it showed to me which registry values the Splashtop Server is reading from to decide which quality the stream is going to have.

These can be modified to some extent. I have not yet come around to try too many of them but maybe someone else will be happy anyway.

For the record, Splashtop THD and the newer versions of Splashtop (since around mid of 2013) have the same internal engines according to their forums. So their should not be any performance differences.

I will now quote myself from another post at another forum if you don't mind.

I use a Nexus5 with 1080p to stream the game to a Durovis Dive Headmount to have a cheap man's Rift :D That is why I wanted maximum image quality.

You can have a look at the SPlog.txt inside the Program Files(x86)/Splashtop Remote/Server/ directory to see some of what the registry values are changing for the stream.

After that I wanted to get better image quality. I started to investigate how Limelight and Nvidia Gamestream are working by looking at forums, the registry and finally using wireshark and the ProcessMonitor. I strongly suspect that other than using 30/60fps and 720p/1080p no other parameter for the x264-encoder can be altered by the user to enhance bandwidth use and thus image quality. It seems that these settings are hidden and obfuscated by Nvidia somewhere in the Driver itself and/or the configuration files for this Gamestream service.

So I turned back to Splashtop and analyzed it the same way.

2. Splashtop out of the box over USB 2.0 tethering:

Low lag

Stable, less smooth frame rate

Gigantic strain on the CPU (i have an i5, clocked to 3.8 GHz) even with hardware encoder enabled it shows 100% in nearly every title and some games feel kind of not-smooth once in every 10 seconds

No fullscreen or fullscreen is hard to achieve

1080p looks like 720p or less

Bandwidth is limited to around 15 Megabit/s in USB 2.0 use. Thus the problems with 1080p.

Minor color banding, lots of compression artifacts.

OK now to the process explorer. It seems that Splashtop is accessing the registry to get some of its encoding and connection settings. It tries to read some settings and if they cannot be found just uses a default value. This can be used to alter - inside some limits - image quality and bandwidth use. The list of settings can be found at the bottom, as it is quite large.

Important to note, the quality of the stream can be influenced by the user! For me those settings in the registry worked easily:

x264UseRegSettings - 1

x264RFConst - 0 to 40 see here for information on this parameter: http://slhck.info/crf.html , https://trac.handbrake.fr/wiki/ConstantQuality

ForceFPS - 15 to 30

3. Splashtop with kind of smooth RFConst setting (currently 25-30, have to do further work on it) USB 2.0 tethering:

Low lag

Stable, no smooth frame rate

Same gigantic strain on the CPU (i have an i5, clocked to 3.8 GHz) even with hardware encoder enabled it shows 100% in nearly every title and some games feel kind of not-smooth once in every 10 seconds

No fullscreen or fullscreen is hard to achieve

1080p looks like 1080p or less

Bandwidth is limited to around 25 Megabit/s in USB 2.0 use. Nearly enough for 1080p/30fps.

Minor color banding, nearly no compression artifacts.

Now to test what is possible concerning image quality.

4. Splashtop with min RFConst setting of 0 used other PC to test bandwidth:

Low lag

Stable, smooth frame rate

Same gigantic strain on the CPU (i have an i5, clocked to 3.8 GHz) even with hardware encoder enabled it shows 100% in nearly every title and some games feel kind of not-smooth once in every 10 seconds

No fullscreen or fullscreen is hard to achieve

1080p looks like 1080p original

Bandwidth is around 100 Megabit/s in 100MBit LAN. Enough for 1080p/30fps.

No color banding, no compression artifacts.

After that I wondered why I cannot achieve more than 10-15 Mbit over wireless (G) to my phone and why the connection was sometimes jerky/jacking. Maybe it has to do with TCP over WLAN instead of using UDP as NVidia does. I am not sure about that but I will try to do some tests there as well.

OK, I hope that helps and "inspires" some of you and I will return when I know more!

-----------

Compendium of current Splashtop Registry Values:

HKCU\Software\Splashtop Inc.\Splashtop Remote Server\

ReqPassword - Request oder Require Password ?

SharpFPS - Desired Capture FPS in sharp mode

SmoothFPS - Desired Capture FPS in smooth mode

ForceFPS - overwrite both of the above ? - Tested, works

ForceCapBlt - ???

EnableClipboard - Self explanatory

NoAudioToClient - Self explanatory

AutoMute - ???

LockKBMS - Lock Keyboard and Mouse ???

AutoPopKBMode - Auto Open Keyboard Mode ???

AutoFoldKB - Auto Close Keyboard ???

SRServerMode - ???

DisableScreenFixedRation - Self explanatory

AudioResampling - Self explanatory

EnableWindowedMode - Self explanatory

HookAtStart - ???

AeroEnable - Self explanatory

ReqPasswort - Requires Passwort ???

Port - Self explanatory

CloudUserAccount - Self explanatory

CloudUserPWD - Self explanatory

CloudComputerName - Self explanatory

FirstSPLogin - ???

AbwLogLevel - ???

EnableFeedback - Self explanatory

HideBubbleWnd - Hide Bubble Window ???

TouchOffsetX - Self explanatory

TouchOffsetY - Self explanatory

TouchOffsetX_neg - Self explanatory

TouchOffsetY_neg - Self explanatory

AutoStart - Self explanatory

ScreenLock - Self explanatory

EnableOverlappingAcks - ???

EnableVideoPreCompare - ???

EnableGesture - Self explanatory

XDisplayDirection - Self explanatory

ForceUsingVD - ???

BlankScreen - ???

Different Capture Methods (Probably):

EnableIQSV - Enable Intel Quick Sync V… ???

EnableD3D9 - ???

EnableD3D9Ex - ???

EnableNvFBC - Enable Nvidia Front Buffer Copy ??? - Tested, works, heavy CPU load

EnableNvEnc - Enable Nvidia Encoder, NvEnc is the same abbreviation as the new Nvidia hardware x264/opus encoder used in the shield/stem streaming module, would use nearly no CPU - Tested, does not work

EnableCuda - Self explanatory - Tested, does not work

EnableSTVD - ???

EnableDXGI - ???

EnabeDXGIEx - ???

EnableADEM - ???

EnableSCEX - ???

EnableMMReset - ???

NVFbcToSysFlag - ???

Streaming / Codec Settings:

x264UseRegSettings - The most important one to tweak the stream

x264RFConst - Set Constant Picture Quality, 0 - lossless, 22 - BluRay, 20 - DVD http://slhck.info/crf.html , https://trac.handbrake.fr/wiki/ConstantQuality - Tested, works as it should! 1:1 image from pc display achievable with around 100Mbit/s used (tested with other PC as splashtop client)

x264VBVBitrate - Set Variable Bitrate if not RFConst - just from 200?? to 1200 Kbit possible ???, Tested, works within limits

x264VBVBufSize - Set Variable Bitrate Buffer Size if not RFConst - change from 0 to 200 or so ???, Tested, works within limits

x264IntraRefresh - http://x264dev.multimedia.cx/archives/249

x264Deblocking - ???

x264BitrateLow - Streaming bitrate for slow (ping over ping limit) connections ?

x264BitrateHigh - Streaming bitrate for fast (ping under ping limit) connections ?

1stFrameEnable - ???

1stFrameThresholdFPS - ???

1stFrameThresholdInterval ???

SmallPkgPingAvgInterval - If ping higher than this average, small packages are used --> x264BitRateLow is active

SmallPkgPingEnableThreshold - If ping higher than this, small packages are used --> x264BitRateLow is active

SmallPkgPingDisableThreshold If ping lower than this, big packages are used --> x264BitRateHigh is active

DumpBitstream - Starts Video Streaming ???

HKCU\Software\Splashtop Inc.\Splashtop Remote Server\ClientInfo\

DeviceName - Self explanatory

DeviceID - Self explanatory

UDID - ???

Update - ???

BundleID - ???

UserAccount - Self explanatory

OEMID - ???

ExtraID - ???

UpsellInfo - ???

AppVersion - Self explanatory

AbwMode - ???

AbwConnType - ???

AbwProfiles - ???