The configuration properties are applied in the following order (from higher to lower precedence):

  • arguments passed to the executable in kebab case (e.g. --url-query);
  • environment variables in uppercase snake format (e.g. URL_QUERY);
  • config.json configuration file;
  • default values.

The page url to load.

Type: string

Default: ""

The query string to append to the page url; the following template variables are replaced: $p the process pid, $s the session index, $S the total sessions, $t the tab index, $T the total tabs per session, $i the tab absolute index.

Type: string

Default: ""

This argument specifies the file path for the custom page URL handler that will be exported by default. The custom page URL handler allows you to define custom URLs that can be used to open your application, and provides the following variables for customization: $p: the process pid, $s: the session index, $S: the total sessions, $t: the tab index, $T: the total tabs per session, $i: the tab absolute index. You can use these variables to create custom URL schemes that suit your application's needs.

Type: string

Default: ""

The fake video path; if set, the video will be used as fake media source. It accepts a single path or a comma-separated list of videos paths that will be used in round-robin by the started sessions. The docker pre-built image contains a 2 minutes video sequence stored at /app/video.mp4. It accepts a local file, an http endpoint or a string starting with generate: (example: generate:null will generate a black video with silent audio). The temporary files containing the raw video and audio will be stored at ${VIDEO_CACHE_PATH}/video.${VIDEO_FORMAT} and ${VIDEO_CACHE_PATH}/audio.wav.

Type: string

Default: "https://github.com/vpalmisano/webrtcperf/releases/download/v2.0.4/video.mp4"

The fake video resize width.

Type: positive int

Default: 1280

The fake video resize height.

Type: positive int

Default: 720

The fake video framerate.

Type: positive int

Default: 25

The fake audio/video seek position in seconds.

Type: positive int

Default: 0

The fake audio/video duration in seconds.

Type: positive int

Default: 120

If the temporary video and audio raw files can be reused across multiple runs.

Type: boolean

Default: true

The path where the video and audio raw files are stored.

Type: string

Default: "/home/runner/.webrtcperf/cache"

The fake video file format presented to the browser.

Type: [ "y4m", "mjpeg" ]

Default: "y4m"

If greater than 0, the test will stop after the provided number of seconds.

Type: positive int

Default: 0

A JSON5 string with a valid throtter configuration (https://github.com/vpalmisano/throttler).

Type: string

Default: ""

If not zero, it specifies the maximum period in seconds after which a new random active tab is selected, enabling the getUserMedia audio tracks in that tab and disabling all of the other tabs.

Type: positive int

Default: 0

When using random audio period, it defines the probability % that the selected audio will be activated (value: 0-100).

Type: positive int

Default: 100

When using random audio period, it defines the number of pages to be included into the random selection.

Type: positive int

Default: 0

The Chromium executable path.

Type: string

Default: ""

The Chromium version. It will be downloaded if the chromium path is not provided.

Type: string

Default: "131.0.6778.204"

The remote Chromium URL (http://HOST:PORT). If provided, the remote instance will be used instead of running a local chromium process.

Type: string

Default: ""

Chromium additional field trials.

Type: string

Default: ""

The browser window width.

Type: positive int

Default: 1920

The browser window height.

Type: positive int

Default: 1080

The browser device scale factor.

Type: float

Default: 1

Specifies the maximum number of concurrent WebRTC video decoder instances that can be created on the same host. If set it will disable the received video resolution and jitter buffer stats. This option is supported only when using the custom chromium build. The total decoders count is stored into the virtual file /dev/shm/chromium-video-decoders

Type: number

Default: -1

Applies the maxVideoDecoders option starting from this session ID.

Type: number

Default: -1

Runs the browser in incognito mode.

Type: boolean

Default: false

If unset, the browser will run in headless mode. When running on MacOS or Windows, set it to any not-empty string. On Linux, set it to a valid X server DISPLAY string (e.g. :0).

Type: string

Default: ""

The number of browser sessions to start.

Type: positive int

Default: 1

The number of tabs to open in each browser session.

Type: positive int

Default: 1

The starting ID assigned to sessions.

Type: positive int

Default: 0

The start timestamp (in milliseconds). If 0, the value will be calculated using Date.now()

Type: positive int

Default: 0

If detailed participant metrics values should be collected.

Type: index

Default: ""

The pages spawn rate (pages/s).

Type: float

Default: 1

If true, the pages console logs will be shown on console.

Type: boolean

Default: true

If set, only the logs with the matching text will be printed on console. Regexp string allowed.

Type: string

Default: ""

If set, page console logs will be saved on the selected file path.

Type: string

Default: ""

The user agent override.

Type: string

Default: ""

One or more JavaScript file paths (comma-separated). If set, the files contents will be executed inside each opened tab page; the following global variables will be attached to the window object: WEBRTC_PERF_SESSION the session number (0-indexed); WEBRTC_PERF_TAB the tab number inside the same session (0-indexed); WEBRTC_PERF_INDEX the page absolute index (0-indexed).

Type: string

Default: ""

Additional parameters (in JSON format) that will be exposed into the page context as window.PARAMS.

Type: string

Default: ""

A JSON string with the getUserMedia constraints to override for each tab in each session; e.g. {"video": {"width": 360, "height": 640}}

Type: string

Default: ""

A JSON string with the getDisplayMedia constraints to override for each tab in each session; e.g. {"video": {"width": 360, "height": 640}}

Type: string

Default: ""

A string with the video codecs to disable (comma-separated); e.g. vp9,av1

Type: string

Default: ""

The fake display type to use for getDisplayMedia. It could be monitor, window or browser,

Type: string

Default: "monitor"

A JSON string with the localStorage object to be set on page load.

Type: string

Default: ""

If true, all the page cookies are cleared.

Type: boolean

Default: false

It enables the GPU acceleration (experimental). Set to "desktop" to use the host X server instance.

Type: string

Default: ""

It enables the Chromium browser logging for the specified session indexes.

Type: index

Default: ""

A comma-separated list of request URLs that will be automatically blocked.

Type: string

Default: ""

A dictionary of headers keyed by the url in JSON5 format (e.g. { "https://url.com/*": { "header-name": "value" } }).

Type: string

Default: ""

A dictionary of content replacements keyed by the url in JSON5 format. Examples:

  • replace strings using a regular expression: { "https://url.com/*": [{ search: "searchString": replace: "anotherString" }] }
  • completely replace the content: { "https://url.com/file.js": [{ file: "path/to/newFile.js" }] }

Type: string

Default: ""

An array of url responses that will be saved to the disk, keyed by the url in JSON5 format. Example: [{ urlPattern: "https://url.com/*", output: "save/directory" }]

Type: string

Default: ""

A string with a CSS styles to inject into each page. Rules containing "important" will be replaced with "!important".

Type: string

Default: ""

A string with an array of CookieParam to set into each page in JSON5 format.

Type: string

Default: ""

A comma-separated list of permissions to grant to the opened url.

Type: string

Default: ""

The chrome debugging port. If this value != 0, the chrome instance will listen on the provided port + the start-session-id value.

Type: positive int

Default: 0

The chrome debugging listening address. If unset, the network default interface address will be used.

Type: string

Default: "127.0.0.1"

If the statistics should be displayed on the console output.

Type: boolean

Default: true

The log file path; if set, the stats will be written in a .csv file inside that file.

Type: string

Default: ""

The log file path; if set, the detailed stats will be written in a .csv file inside that file.

Type: string

Default: ""

The stats collect interval in seconds. It should be lower than the Prometheus scraping interval.

Type: positive int

Default: 15

The timeout in seconds after which the RTC stats coming from inactive hosts are removed. It should be higher than the statsInterval value.

Type: positive int

Default: 60

A dictionary of custom metrics keys in JSON5 format (e.g. '{ statName1: { labels: ["label1"] } }').

Type: string

Default: ""

If set, logs are sent to the specified Prometheus Pushgateway service (example: "http://127.0.0.1:9091").

Type: string

Default: ""

The Prometheus Pushgateway job name.

Type: string

Default: "default"

The Prometheus Pushgateway basic auth (username:password).

Type: string

Default: ""

Allows to use gzip encoded pushgateway requests.

Type: boolean

Default: true

Alert rules definition (in JSON format).

Type: string

Default: ""

The alert rules report output filename.

Type: string

Default: ""

The alert rules report fails percentile (0-100). With the default value the alert will be successful only when at least 95% of the checks pass.

Type: positive int

Default: 95

The URL to push the collected stats.

Type: string

Default: ""

The ID of the collected stats to push.

Type: string

Default: "default"

The HTTP server listening port.

Type: positive int

Default: 0

The HTTP server basic auth secret. The auth user name is set to admin by default.

Type: string

Default: "secret"

If true, the server will use the HTTPS protocol.

Type: boolean

Default: false

An optional path that the HTTP server will expose with the /data endpoint.

Type: string

Default: ""

When set, it runs the VMAF calculator for the video files saved under the provided directory path.

Type: string

Default: ""

If true, for each VMAF comparison it creates a side-by-side video with the reference and degraded versions.

Type: boolean

Default: false

If true, the VMAF intermediate files will not be deleted.

Type: boolean

Default: false

If true, the VMAF source files will not be deleted.

Type: boolean

Default: true

If set, the reference and degraded videos will be cropped using the specified configuration in JSON5 format. Crop configuration should be expressed using the ffmpeg crop filter syntax (https://ffmpeg.org/ffmpeg-filters.html#crop). E.g. { "Participant-000001_recv-by_Participant-000000': { ref: { w: "iw-10", h: "ih-5" }, deg: { w: "200", h: "200" } } }

Type: string

Default: ""

When set, it prepares the selected video applying a timestamp overlay on top of it. The filename must be provided in the format <video path>,<ID>, where the selected ID will be used unique video identifier in the overlay.

Type: string

Default: ""

When set, it runs the VMAF video preprocessor, that converts a video file into the IVF format with timestamps matching the overlay recognition. The filename must contain a recv or send string to identify if the video was a reference (send) or a degraded version (recv), e.g. Participant1_recv.mp4.

Type: string

Default: ""

If set, the vmaf prepared/processed video will be cropped using the specified configuration in JSON5 format. Crop configuration should be expressed using the ffmpeg crop filter syntax (https://ffmpeg.org/ffmpeg-filters.html#crop). E.g. { w: "iw-10", h: "ih-5", x: "10", y: '5' }

Type: string

Default: ""

When set, it runs the visqol calculator for the audio files saved under the provided directory path.

Type: string

Default: ""

If true, the visqol source files will not be deleted.

Type: boolean

Default: true