Pixel Streaming Reference

Supported browsers, networking ports, and configuration options for the components of the Pixel Streaming system.

Windows
MacOS
Linux

This page describes options, settings, and command-line parameters exposed by the various parts of the Pixel Streaming system.

Supported Graphics Hardware

The computer that runs the Unreal Engine application with the Pixel Streaming Plugin must have one of the following types of graphics hardware:

If you receive the error message No compatible GPU found, or failed to load their respective encoder libraries when you try to use the Pixel Streaming Plugin, it is very likely that your GPU does not support NVENC or AMF.

Supported Operating Systems

The Pixel Streaming Plugin supports Windows and Linux platforms. OSX is not supported.

However, the Pixel Streaming Plugin and the accompanying Signalling and Web Server have only been tested on Windows 10 and Ubuntu 18.04/20.04. They have not been tested on any other operating systems, including Windows 7 or 8.

Supported Client Browsers

Pixel Streaming playback works on any modern browser that supports the WebRTC protocol. For example, it has been tested and is known to work in recent versions of the following browsers without additional configuration:

  • Google Chrome (desktop and mobile)

  • Microsoft Edge (desktop)

  • Mozilla Firefox (desktop and mobile)

  • Apple Safari (desktop and mobile)

Other browsers such as Microsoft Edge and Opera may require add-ons or plugins, and may not work on all systems.

Default Network Ports

The components of the Pixel Streaming system communicate using the default ports specified below. You'll need to make sure that these ports are open on the host that runs each of these components.

Component

Ports

Signaling Server host

  • 80 - for all HTTP requests coming from clients.
    To change this value, set the --httpPort parameter for the Signaling Server.

  • 443 - for all HTTPS requests coming from clients, when the Signaling Server is running in HTTPS mode.
    To change this value, set the --httpsPort parameter for the Signaling Server.

  • 8888 - for all incoming connection requests from the Unreal Engine application.
    To change this value, set both the --streamerPort parameter for the Signaling Server and the -PixelStreamingPort parameter for the UE4 application.

Matchmaker Server host

  • 90 - for all HTTP requests coming from clients.
    To change this value, use the --httpPort parameter for the Matchmaker Server.

  • 9999 - for all messages sent by the Signaling Server.
    To change this value, set both the --matchmakerPort parameter for the Matchmaker Server and the --matchmakerPort parameter for the Signaling Server.

Pixel Streaming Console Commands and Launch Arguments

This section contains console commands and launch arguments that are useful for applications that use Pixel Streaming.

Required Launch Arguments

The following launch arguments must be specified when launching an Unreal Engine application that uses Pixel Streaming:\

Command Line Argument

Description

-PixelStreamingIP=<value> or <domain>

Specifies the IP address or domain name of the computer running the Signaling and Web Server.

-PixelStreamingPort=<value>

Specifies the port that the Signaling and Web Server is listening on for incoming communications from the Unreal Engine application. The Signaling and Web Server uses the default value of 8888.

-PixelStreamingURL=<value>

Only required if -PixelStreamingIP and -PixelStreamingPort are not present. If used replaces both -PixelStreamingIP and -PixelStreamingPort.

This must include the websocket protocol too. For example: ws://127.0.0.1:8888 or wss://127.0.0.1:8888.

A typical Pixel Streaming application launch is as follows:

MyPixelStreamingApplication.exe -PixelStreamingIP=127.0.0.1 -PixelStreamingPort=8888

Or:

MyPixelStreamingApplication.exe -PixelStreamingURL="ws://127.0.0.1:8888"

Unreal Engine Launch Arguments

The following arguments are not specific to Pixel Streaming. However, many Pixel Streaming applications may find them useful, particularly in cloud deployments.

Command Line Argument

Description

-RenderOffscreen

Run the Unreal Engine application headless, without any visible rendering at all on the local computer. The application will not display any windows, and will not render in full screen. You can use this parameter in conjunction with -ForceRes to stop the Unreal Engine from automatically adjusting resolution based on the resolution of the primary display.

If you omit this parameter, the Unreal Engine application window will be rendered normally. If this application window is ever minimized, the Pixel Streaming video and input capture will stop working. We therefore recommend always including this parameter, unless you need to be able to see the rendered output from the Unreal Engine application locally on the same computer while it is running.

-ForceRes

When combined with -ResX and -ResY this will force the Unreal Engine to a specified resolution. This is useful in a cloud deployment where there typically is no display resolution.

-ResX <value>

Sets the width component of the resolution that the Unreal Engine application should launch with.

-ResY <value>

Sets the height component of the resolution that the Unreal Engine application should launch with.

-AudioMixer

Forces the Unreal Engine to use software mixing for audio, so that the Pixel Streaming Plugin can capture audio.

This parameter is required in order to capture audio from the application and stream it to the browser when there is no audio device, such as in a cloud deployment.

-Unattended

Suppresses the generation of dialog boxes in the event that an error is encountered. This is helpful when running Unreal Engine offscreen or in a container as messages boxes can hang indefinitely in those scenarios.

-StdOut and -FullStdOutLogOutput

The combination of these two flags produces the maximum logging output, which is useful when debugging or viewing live logs in an SSH terminal.

Optional Console Command Launch Arguments

You can specify the following settings at runtime as console variables or at launch as program arguments.

The system provides defaults for each setting that will be used when these settings are not specified. Most users will have no need to change these settings. In fact, many of these values are controlled by WebRTC internally and overriding them will likely result in worse performance.

Pixel Streaming Plugin Configuration

Changing the following settings will configure the Pixel Streaming Plugin.

Console Variable

Command Line Argument

Default Value

Description

PixelStreaming.HUDStats

-PixelStreamingHudStats

false

Whether to show PixelStreaming stats on the in-game HUD.

PixelStreaming.DisableLatencyTester

-PixelStreamingDisableLatencyTester

false

Disables the ability to trigger latency tests that pass through the Pixel Streaming Plugin pipeline.

PixelStreaming.KeyFilter

-PixelStreamingKeyFilter=<values>

""

A comma separated list of keys to ignore from streaming clients. For example, "W,A,S,D" might be used to filter out the default movement keys.

N/A

-AllowPixelStreamingCommands

false

Whether the user should be able to send console commands via the emitConsoleCommand javascript.

N/A

-PixelStreamingHideCursor

false

Whether to hide the UE application cursor.

Encoder Configuration

Changing the following settings will configure the underlying video encoders that the Pixel Streaming Plugin uses.

Console Variable

Command Line Argument

Default Value

Description

PixelStreaming.Encoder.TargetBitrate

-PixelStreamingEncoderTargetBitrate=<value>

-1

Target bitrate (bps). Setting this ignores the bitrate WebRTC wants (not recommended). Set to -1 to disable.

PixelStreaming.Encoder.MaxBitrateVBR

-PixelStreamingEncoderMaxBitrate=<value>

20000000

Max bitrate (bps).

Does not work in CBR rate control mode with NVENC.

PixelStreaming.Encoder.DumpDebugFrames

-PixelStreamingDebugDumpFrame=<value>

false

Dumps frames from the encoder to a file on disk for debugging purposes.

PixelStreaming.Encoder.MinQP

-PixelStreamingEncoderMinQP=<value>

-1

0-51, lower values result in better quality but higher bitrate. Note: -1 will disable any hard limit on a minimum QP.

PixelStreaming.Encoder.MaxQP

-PixelStreamingEncoderMaxQP=<value>

-1

0-51, lower values result in better quality but higher bitrate. Note: -1 will disable any hard limit on a maximum QP.

PixelStreaming.Encoder.RateControl

-PixelStreamingEncoderRateControl=<value>

"CBR"

PixelStreaming video encoder RateControl mode. Supported modes are "ConstQP", "VBR", "CBR". Note: CBR is the only one we recommend.

PixelStreaming.Encoder.EnableFillerData

-PixelStreamingEnableFillerData=<value>

false

Maintains constant bitrate by filling with junk data. Note: Not required with CBR and MinQP = -1.

PixelStreaming.Encoder.Multipass

-PixelStreamingEncoderMultipass=<value>

"FULL"

How many passes the encoder does per frame. See the NVENC docs for more details. Supported modes are "DISABLED", "QUARTER", "FULL"

PixelStreaming.Encoder.H264Profile

-PixelStreamingH264Profile=<value>

"BASELINE"

H264 profile used by the encoder. Supported modes are "AUTO", "BASELINE", "MAIN", "HIGH", "HIGH444", STEREO, SVC_TEMPORAL_SCALABILITY, PROGRESSIVE_HIGH, CONSTRAINED_HIGH.

Baseline is the only profile guaranteed to be supported by WebRTC capable devices on the receiving side.

Backbuffer Capture Configuration

Changing the following settings will configure how Pixel Streaming Plugin captures rendered frames from the backbuffer.

Console Variable

Command Line Argument

Default Value

Description

PixelStreaming.Capturer.UseBackBufferSize

-PixelStreamingUseBackBufferSize

true

Whether to use back buffer size or a custom size specified by PixelStreaming.Capturer.CaptureSize

PixelStreaming.Capturer.CaptureSize

-PixelStreamingCaptureSize=<value>

1920x1080

Custom capture size to use if PixelStreaming.Capturer.UseBackBufferSize is false.

PixelStreaming.Capturer.MaxNumBackBuffers

-PixelStreamingMaxNumBackBuffers=<value>

8

Maximum number of back buffers to use. A value of 0 will not limit the number of back buffers.

WebRTC Configuration

Changing the following settings will configure the WebRTC library that the Pixel Streaming Plugin uses internally.

Console Variable

Command line argument

Default

Description

N/A

-LogCmds=PixelStreamingWebRTC <LogLevel> Where helpful log levels are: Log, Verbose, VeryVerbose

Log

Specifies the log level of WebRTC. This is useful for debugging WebRTC.

PixelStreaming.WebRTC.DegradationPreference

-PixelStreamingWebRTCDegradationPreference=<value>

"MAINTAIN_FRAMERATE"

[INCLUDE:#DegredationPreferenceInfo]

PixelStreaming.WebRTC.MaxFps

-PixelStreamingWebRTCMaxFps=<value>

60

The maximum FPS WebRTC will try to capture/encode/transmit.

PixelStreaming.WebRTC.StartBitrate

-PixelStreamingWebRTCStartBitrate=<value>

10000000

Start bitrate (bps) that WebRTC will try to begin the stream with.

Value must be between Min and Max bitrates.

PixelStreaming.WebRTC.MinBitrate

-PixelStreamingWebRTCMinBitrate=<value>

100000

Minimum bitrate (bps) that WebRTC will not request below.

Be careful not to set this value too high, otherwise WebRTC will just drop frames.

PixelStreaming.WebRTC.MaxBitrate

-PixelStreamingWebRTCMaxBitrate=<value>

20000000

Maximum bitrate (bps) that WebRTC will not request above.

Be careful not to set this value too high, as a local (ideal) network will actually attempt to reach this value.

PixelStreaming.WebRTC.LowQpThreshold

-PixelStreamingWebRTCLowQpThreshold=<value>

25

Only used when PixelStreaming.Encoder.LowQP=-1. Value between 1 and 51. If WebRTC is getting frames below this QP, it will try to make an adaptation decision.

PixelStreaming.WebRTC.HighQpThreshold

-PixelStreamingWebRTCHighQpThreshold=<value>

37

[INCLUDE:#HighQpTrhesholdInfo]

PixelStreaming.WebRTC.DisableReceiveAudio

-PixelStreamingWebRTCDisableReceiveAudio

false

Disables receiving audio from the browser into UE.

If audio is not required can improve latency in some cases.

PixelStreaming.WebRTC.DisableTransmitAudio

-PixelStreamingWebRTCDisableTransmitAudio

false

Disables transmission of UE audio to the browser.

If audio is not required can improve latency in some cases.

PixelStreaming.WebRTC.DisableAudioSync

-PixelStreamingWebRTCDisableAudioSync

true

Disables the synchronization of audio and video tracks in WebRTC.

This improves latency if synchronization is not required.

Signalling Server Configuration Parameters

There are two ways you can set these parameters:

  • On the command line, when you start the Signaling and Web Server by running Start_SignallingServer.ps1 or node cirrus.js. In this case, prefix each parameter name with -- (two dashes), then follow it with a space, then the value you want to set. For example: --httpPort 81.

  • In a configuration file. By default, the Signaling and Web Server (cirrus.js) looks for a file named config.json in the same folder. In this case, set each parameter and the value you want to set for it as a key-value pair in the JSON object defined in the file. If you've already started the Signaling and Web Server at least once, see the parameters that are already listed in the /Samples/PixelStreaming/WebServers/SignallingWebServer/config.json file for an example.

Parameter

Description

--publicIp <value>

The public IP of the computer running the Signaling and Web Server.

--httpPort <value>

The port that the Signaling and Web Server uses for HTTP connections with client browsers.

--streamerPort <value>

The port that the Signaling and Web Server listens to for incoming connections from the Unreal Engine application.

--peerConnectionOptions <value>

Specifies the hostnames or IP addresses of any STUN and TURN servers you want the Unreal Engine application and browser to query when they need to discover their own external IP addresses.
For more information on STUN and TURN servers, see the Hosting and Networking Guide.
This parameter must be a string that lists the server URLs in the order you want them to be contacted. It must have the following format:
"{ \"iceServers\": [{\"urls\": [<url1>,<url2>,<url3>,...]}] }"
For example:
"{ \"iceServers\": [{\"urls\": [\"stun:34.250.222.95:19302\"]}] }"
or
"{ \"iceServers\": [{\"urls\": [\"stun:34.250.222.95:19302\",\"turn:34.250.222.95:19312\"]}] }"
The TURN server implementation that ships with the Unreal Engine requires a user name and password, as follows:
"{\"iceServers\":[{\"urls\":[\"stun: 34.250.222.95:19302\",\"turn: 34.250.222.95:19312\"],\"username\":\"<TURN_Username>\",\"credential\":\"<TURN_Password>\"}]}"
Other STUN and TURN implemetations may have different requirements for their credentials.

The value must be formatted as a string, even if you use a JSON configuration file to provide the parameter. Always surround it in double-quotes, and use backslashes to escape any quotes inside the string, as shown above.

--HomepageFile <value>

The filename of the default page the server will provide to connecting client browsers that do not request a specific URL.
The default value is player.htm.

--AdditionalRoutes <value>

Specifies additional folders that the Signaling and Web Server should serve.
This parameter must be a JSON object, which means you can only provide it in the JSON configuration file, not on the command line.
It must be an object in which each key is a part of a URL, and the value of each key is a local path that the server should serve to requesting clients. For example, if you set:
"AdditionalRoutes" = { "/myfolder", "C:\some_local_path" }
then when a client requests http://server-name/myfolder/index.html the server will provide the file named C:\some_local_path\index.html.

--LogToFile <value>

Determines whether the Signaling and Web Server writes log messages to files in the ./logs folder.
The default value is true.

--UseHttps <value>

Set this parameter to true in order to make the Signaling Server accept only HTTPS connections on the httpsPort.
You will also need to put your client-key.pem and client-cert.pem files into the certificates folder under the Signaling and Web Server's root folder.

--httpsPort <value>

The port to listen to for HTTPS connections. Only used when UseHttps is enabled.
The default value is 443.

--UseMatchmaker <value>

Determines whether the Signaling and Web Server sends its current status to a Matchmaker Server, in order to help client browsers find a Signaling Server and Unreal Engine application that are not currently in use.

--matchmakerAddress <value>

The IP address of the Matchmaker Server that the Signaling and Web Server should contact.

--matchmakerPort <value>

The port that the Matchmaker Server listens to for incoming messages from Signaling and Web Servers.

--configFile <value>

Specifies the path and file name of the configuration file that the Signaling Server should use to retrieve the values of the properties above. Can only be set on the command line.

Matchmaker Server Command-Line Parameters

Provide these parameters on the command line when you start the Matchmaker Server by running its run.bat file, or when you start it by running node.exe matchmaker.js.

Parameter

Description

--httpPort <value>

Sets the port number that the Matchmaker listens to for HTTP connections from clients.
The default value is 90.

--matchmakerPort <value>

Sets the port number that the Matchmaker listens to for incoming messages from Cirrus signaling servers.
The default value is 9999.

Help shape the future of Unreal Engine documentation! Tell us how we're doing so we can serve you better.
Take our survey
Dismiss