A Direct replacement for cirrus.
Wilbur is a small intermediary application that sits between streamers and other peers. It handles the initial connection negotiations and some other small ongoing control messages between peers as well as acting as a simple web server for serving the Frontend web application.
Differences of behaviour from the old cirrus are described here.
Building is handled by npm
and tsc
as a very basic typescript project. The easiest method is to invoke
npm run build
Which will output built files into the build
directory.
You can run with both node
directly or the npm start
script.
npm start -- [arguments]
or
node build/index.js [arguments]
Invoking npm start -- --help
or node build/index.js --help
will display the configuration options.
Usage: node build/index.js [options]
A basic signalling server application for Unreal Engine's Pixel Streaming applications.
Options:
-V, --version output the version number
--log_folder <path> Sets the path for the log files. (default: "logs")
--log_level_console <level> Sets the logging level for console messages. (choices: "debug", "info", "warning",
"error", default: "info")
--log_level_file <level> Sets the logging level for log files. (choices: "debug", "info", "warning",
"error", default: "info")
--console_messages [detail] Displays incoming and outgoing signalling messages on the console. (choices:
"basic", "verbose", "formatted", preset: "basic")
--streamer_port <port> Sets the listening port for streamer connections. (default: "8888")
--player_port <port> Sets the listening port for player connections. (default: "80")
--sfu_port <port> Sets the listening port for SFU connections. (default: "8889")
--serve Enables the webserver on player_port. (default: false)
--http_root <path> Sets the path for the webserver root. (default: "www")
--homepage <filename> The default html file to serve on the web server. (default: "player.html")
--https Enables the webserver on https_port and enabling SSL (default: false)
--https_port <port> Sets the listen port for the https server. (default: 443)
--ssl_key_path <path> Sets the path for the SSL key file. (default: "ssl/key.pem")
--ssl_cert_path <path> Sets the path for the SSL certificate file. (default: "ssl/cert.pem")
--https_redirect Enables the redirection of connection attempts on http to https. If this is not set
the webserver will only listen on https_port. Player websockets will still listen
on player_port. (default: false)
--rest_api Enables the rest API interface that can be accessed at
<server_url>/api/api-definition (default: false)
--peer_options <json-string> Additional JSON data to send in peerConnectionOptions of the config message.
--matchmaker Enable matchmaker connection. (default: false)
--matchmaker_address <address> Sets the matchmaker address to connect to. (default: "127.0.0.1")
--matchmaker_port <port> Sets the matchmaker port to connect to. (default: "9999")
--matchmaker_retry <seconds> Sets the delay before reconnecting to the matchmaker after a disconnect. (default:
"5")
--matchmaker_keepalive <seconds> Sets the delay between matchmaker pings. (default: "30")
--public_ip <ip address> The public IP address to be used to connect to this server. Only needed when using
matchmaker. (default: "127.0.0.1")
--log_config Will print the program configuration on startup. (default: false)
--stdin Allows stdin input while running. (default: false)
--no_config Skips the reading of the config file. Only CLI options will be used. (default:
false)
--config_file <path> Sets the path of the config file. (default: "config.json")
--no_save On startup the given configuration is resaved out to config.json. This switch will
prevent this behaviour allowing the config.json file to remain untouched while
running with new configurations. (default: false)
-h, --help Display this help text.
These CLI options can also be described in a config.json
(default config file overridable with --config_file) by specifying the command option name and value in a simple JSON object. eg.
{
"log_folder": "logs",
"log_level_console": "info",
"log_level_file": "info",
"streamer_port": "8888",
"player_port": "80",
"sfu_port": "8889",
"serve": true,
"http_root": "www",
"homepage": "player.html",
"log_config": false,
"stdin": false
}
Given these options, to start the server with the closest behaviour as the old cirrus, you would invoke,
npm start -- --console_messages verbose --serve --http_root Public --homepage player.html
Note that Public
being used as the http root assumes your Frontend is in that directory from the old behaviour of the scripts. The new convenience scripts (platform_scripts
directory) will now build the frontend into the www
directory.
This implementation is built on the Signalling library which is supplied as a library for developing signalling applications. Visit its documentation for more information.