Genvid SDK 1.25.0

Welcome to Genvid SDK 1.25.0. This release is ready and stable for integration and can be used for local development and limited cloud deployment. We are still missing some features for a complete production deployment which can be provided through other software. Please contact us at if you’re planning a production deployment.

We are still committed to a regular pace for our releases until we get all the features done for a comfortable production deployment. We always work to ensure a smooth upgrade between releases and provide as much backward compatibility support as possible. A complete list of our Known Issues and Workarounds is available to you in our Forum. Please contact us if you have any issues.

Current Functionalities

Here is a summary of our current functionalities. See Major Fixes and Changes below for the list of new features in this release.

  • Automatic synchronisation between video and game-data streams.
  • Video streaming to YouTube and Twitch.
  • JavaScript SDK for embedded webpage.
  • Multiple distributed sources of A/V and Data.
  • Streaming additional arbitrary game events and notifications.
  • Scalable event messaging system.
  • Windows C++ API with a C# wrapper.
  • Video encoding (H264 + AAC).
  • Unity3D integration (Game and Management).
  • Unreal Engine integration (Game and Management).
  • D3D11 or raw frame video capture.
  • WASAPI audio capture.
  • Tools and scripts for managing your local and remote clusters, with example scripts for AWS and Azure.
  • Live video editing and basic composition effects (beta).
  • RTMP Ingest server (beta).
  • REST API to control the services (beta).
  • Metrics feed (beta).
  • Load-testing library.
  • Multiple integration samples.
  • Extensive documentation.

Major Fixes and Changes

Azure Multi-AZ Load Balancing

We’ve added the ability to deploy in multiple availability zones (AZs). This introduces a new variable in the settings tab called azs and brings it on par with AWS support. For more details, see the Tags section of the Azure Cloud documentation.

Azure SSL-enabled clusters

The module azurerm_basic_cluster_alb_ssl allows the deployment of SSL-enabled clusters. This module allows you to manage certificates, DNS, and uses Application Gateway for your cluster. This is important for building Twitch Extensions and other platforms which require using SSL clusters.

Cube Samples Data Streams Refactoring

We refactored the Cube samples in accordance with best practices of Data Streams usage.

Data Submission is now split into multiple streams:

  • Names
  • Positions
  • Colors
  • Camera

In addition, we added the following improvements:

  • Popularity is now sent every second as notification.
  • RESET, SPEED, and DIRECTION events trigger notifications as a response to a change.
  • COLORS event triggers an annotation as a response to a change.
  • The Twitch Extension now shows a visual notification upon reception of color changes.
  • The Web sample now displays a countdown popup for color changes.
  • The Web sample now displays a green popup for responses to events.

Studio as a Service

We converted the Studio sample to a standard service, so the standalone Studio sample no longer exists. See the upgrade notes for details.

Minor Changes and Other Fixes

  • [documentation] Improved the documentation quicksearch results by scoring down the release notes pages.
  • [documentation] Improved Genvid_Initialize and Genvid_Terminate documentation.
  • [documentation] Added missing definitions for genvid.webgateway metrics.
  • [documentation] Fixed an issue where rtmspMessageQueueCount, outputbufferlimit_us, and writeframe metrics under the genvid.gvencode-compose prefix were of the wrong type.
  • [documentation] Added metrics for GCL missing frames.
  • [documentation] Updated the metrics for DLL calls.
  • [sdk] Added metrics for framemissed key to the Metrics documentation.
  • [sdk] Added GCL metrics to tick and composed.
  • [sdk] Added metrics for audio/video information. Also available in Remote GUI.
  • [sdk] Added metrics for time spent in Genvid DLL calls.
  • [sdk] Improved logs by only reporting the number of duplicated and dropped frames every 30s, rather than in real time.
  • [sdk] Fixed an issue where framesubmitted, framesizesubmitted, framesubmitteddropped, and framesizesubmittedropped metrics were not sent.
  • [sdk] Fixed an issue where audio-submit delta-metrics would not be sent.
  • [sdk] Fixed an issue where a crash can occur when using WASAPI audio capture.
  • [sdk] Fixed an issue where audio stream became choppy when A/V lags.
  • [sdk] Fixed an issue where annotations fail to submit after first one is sent.
  • [sdk] Fixed an issue where audio framerate uses the default value instead of the configured one.
  • [sdk] Fixed an issue where the system over compensates for frames already in the submit list.
  • [sdk] Fixed an issue where missing submits would not be compensated.
  • [sdk] Fixed an issue where the FPS in the Remote GUI was miscomputed.
  • [sdk] Added logs showing Audio/Video frame statistics between Game and GVEncode.
  • [sdk] Fixed a bug where the output buffer size of an HTTP response would appear as too big.
  • [sdk] Fixed a bug preventing the game data from synchronizing.
  • [sdk} Fixed an issue where games streaming with a framerate lower than 1 FPS was locking the stream.
  • [sdk] Fixed missing exception handling not activated in libraries.
  • [web-sdk] Added missing TypeScript description files to Web SDK.
  • [studio] Fixed an issue where Studio crashed the browser if the user didn’t press play.
  • [studio] Fixed an issue where Studio wasn’t starting when using the UT4 sample.
  • [studio] Fixed an issue where the stream stops when using CUT.
  • [studio] Fixed an issue where streaming fails when disabling Studio after it was enabled once.
  • [studio] Fixed an issue where Studio was not opening in the monitor tab when opening it for the first time.
  • [studio] Fixed an issue where the chosen settings would not be remembered properly.
  • [studio] Fixed an issue where audio settings would not get applied.
  • [composed] Improved composeD backend composition state preventing mismatch between backend and Studio UI by storing state in binsD.
  • [composed] Fixed an issue where composeD cannot reconnect after an exception occurs.
  • [composed] Fixed an issue where the data stream bandwidth abnormally increases.
  • [composed] Fixed an issue where composeD will not reconnect after a crash.
  • [composed] Fixed an issue where memory grows when the connection between composeD and GVEncode is lost.
  • [composed] Fixed an issue where the frontend fails to send game-data metrics.
  • [composed] Added compose-backend frame-discarded metrics.
  • [composed] Fixed an issue where streams would not always be recognized.
  • [composed] Fixed an issue where composeD would not send game data when connection with GVEncode is offline.
  • [gvencode] Fixed an issue where GVEncode would crash on initialization.
  • [gvencode] Fixed an issue where disabling audio stream in Genvid Settings resulted in Audio/Video/Data desynchronization.
  • [gvencode] Fixed an issue causing rtmspMessageQueueCount metric to not contain separate Audio and Video fields.
  • [gvencode] Fixed an issue where the service crashes when resources are not flushed during a connection error.
  • [gvencode] All filters metrics are now activated by default in local and cloud templates.
  • [gvencode] Fixed a bug with composition commands that could lead to a crash in gvencode.
  • [gvencode] Fixed a bug that would lead gvencode to run out of memory when ingest was receiving a stream.
  • [rootd] Changed log level of Session: read error: read tcp : i/o timeout from error to warning.
  • [rootd] Fixed a bug where data frames were emitted with an invalid timestamp.
  • [leafd/rootd] Fixed an issue where rootD and leafD can crash when no annotation is submitted for a stream.
  • [cube sample] Fixed an issue where the cube halo would not switch color when the cube changed color.
  • [cube sample] Fixed an issue where the reset notification sent by the UE4. Cube sample would say it was triggered by admin even if it wasn’t.
  • [cube sample] Fixed an issue where resetting a cube in the UE4 Cube sample would make it change direction, orientation, velocity, and color instead of location only.
  • [cube sample] Removed an unused configuration file from Cube DirectX sample.
  • [cube sample] Fixed an issue where cube positions and color format couldn’t be set when the region setting on the instance was not set to US/English.
  • [unity plugin] Fixed an issue where the stream FPS parameter was ignored.
  • [unity plugin] Fixed an issue where data fails to be submitted.
  • [unity plugin] Fixed an issue where the audio stream parameters are set every time audio is submitted.
  • [unity plugin] Updated Genvid Video Prefab with a new field in the Unity UI letting users set the video framerate.
  • [unity plugin] Fixed Audio/Video/Data Streams destroy function that was not called correctly.
  • [ue4 plugin] Updated the plugin to be compatible with the current Unreal LTS version 4.25.4.
  • [ue4 plugin] Added support for UE 4.22 version build when it is installed with both -v (--version) and -e (--envpath) flags.
  • [ue4 plugin] Fixed an issue where GenvidStreams crashed when using the SubmitNotification function.
  • [ue4 sample] Fixed an issue where logs cannot be accessed in Cluster UI.
  • [ue4 sample] Moved the manifest file for transfered UE4 plugin files to the application folder. See the GenvidPlugin installation documentation for more information.
  • [ue4 sample] Fixed an issue where modified files are deleted when calling prepare.
  • [ue4 sample] Added --quiet and --progress options to the prepare command.
  • [ue4 sample] Fixed an issue where UE4 cube script ignores the environment command.
  • [ue4 sample] Fixed an issue where UE4 cube script sets default empty environment variables.
  • [ue4 sample] Fixed an issue where Blueprints using SubmitNotification are missing notification data link.
  • [ut4 sample] Added support for SSL streaming.
  • [ut4 sample] Updated BP_GenvidStreams to reflect the new SubmitNotification function location.
  • [youtube] Fixed an issue where the embedded YouTube player won’t connect when using channel name. Connections now use the video ID.
  • [toolbox] Fixed an issue where -c option in genvid-clusters command would be ignored and apply to all clusters.
  • [toolbox] Removed requirement for a fixed version of the requests library.
  • [toolbox] Upgraded default Python version from 3.5 to 3.8.6.
  • [bastion-api] Added /isIPinCidr API endpoint to Bastion API.
  • [bastion-ui] Fixed an issue where the DELETE confirm dialog was disappearing.
  • [bastion-ui] Added a visual flag on the Terraform configuration page to let the user know if current Bastion IP is not a part of trusted CIDR(s).
  • [bastion-ui] Added missing caret icon to the menu dropdown item called Monitor.
  • [bastion-ui] Added new setting web_health_check_path to basic_cluster_alb_ssl, minimal_cluster_alb_ssl, and azurerm_basic_cluster_alb_ssl.
  • [bastion-ui] Improved UI by showing the correct status while dealing with the module import on multiple clusters.
  • [bastion-ui] Improved display of Terraform settings with very long values.
  • [bastion-ui] Fixed an issue where an Unsaved changes dialog on the Terraform settings page appeared when values haven’t been modified.
  • [cluster-ui] Fixed an issue where the broadcast settings section was disappearing when using Edge and Chrome.
  • [aws] Removed variables private_subnets and public_subnets from AWS cluster basic_cluster_alb_ssl.
  • [aws] Added support for default AWS authentication provider which enables the use of Organizational Units (OUs).
  • [aws] Added support for S3 bucket creation for regions outside of us-east-1.
  • [aws] Added support of encrypted local storage for new clusters. (Can be disabled for upgrades.)
  • [aws] Upgraded server instances from Debian version 9 to version 10.
  • [aws] Renamed some Terraform variables and outputs and removed others from AWS clusters. See the upgrade notes for more information.
  • [aws] Added support for changing the subdomain in AWS after creating a cluster. The NS record needs to be manually deleted.
  • [aws] Fixed an issue where Terraform picks an AMI with a version suffix when the suffix is unspecified in the ami_version variable.
  • [aws] Fixed an issue where user cannot switch to another leaf connection when variables leaf_tg_stickiness_enabled, leaf_stickiness_ttl, web_tg_stickiness_enabled and web_stickiness_ttl are used in minimal_cluster_alb_ssl and basic_cluster_alb_ssl.
  • [aws] Added variables server_instance_profile_name, game_instance_profile_name, key_pair_private and key_pair_public in minimal_cluster_alb_ssl to be consistent with other minimal_* cluster modules.
  • [azure, aws] Disabled Windows Defender SmartScreen when creating wingame images to reduce CPU usage for non required processes.
  • [consul] Upgraded Consul to version 1.8.6
  • [consul] Added support for auto-join in Azure cluster.
  • [nomad] Upgraded Nomad Server and Client to version 0.12.1.
  • [tick] Added a dashboard for monitoring the Genvid Connect Library (GCL).

Known Issues

AWS reports errors when upgrading cluster from 1.24.0 to 1.25.0.

When upgrading an AWS cluster from Genvid SDK version 1.24.0 to 1.25.0, you may see the same error reported twice when you select Plan apply -> Apply on the Commands page:

Error creating IAM instance profile [cluster-name]-xxxx-xxxx: EntityAlreadyExists:
Instance Profile [cluster-name]-xxxx-xxxx already exists.

This is due to a bug in Terraform. As a workaround, try running Plan apply -> Apply a second time.

Compose window isn’t available if behind a proxy.

Future versions of Bastion will have a remote server to allow access from different machines. The current version has limited support for this and is likely to encounter some problems if the Bastion host lives behind a cluster firewall (like on a Amazon EC2 machine).

As a workaround, you can create VPN connections to the Bastion machine so the local IP of the machine is accessible from the client machine.

Standalone player with Firefox not working.

The readable streams must be enabled in Firefox for the standalone player to work properly. You must set dom.streams.enabled and javascript.options.streams preferences to true from the about:config URL.

Auto-cut checkbox state is stored locally only.

In Studio, the state of the auto-cut checkbox in Scene Widget is only stored in local storage. (Clearing the browser cache will also clear user input.) Also, if auto-cut is turned “on” before the Studio session ends, it will be set back to “off” by default when you start the Studio session again.

Audio captures microphone or infinitely loops.

When using the WASAPI audio auto-capture mode, every sound going through the machine’s default audio-device gets captured. This includes system alerts and microphone input, as well as your web browser. When test-viewing your game stream using the same local machine running the game, the game will also capture its own audio stream with ~10s of latency. This yields some echo with progressively worse sound quality since it is compressed every time it is streamed.

You can disable audio in 2 ways:

  • Set settings.encode.input.silent to true in your configuration. (The default setting.)
  • Use our raw audio-capture, which is now the default setting in Unity.

Only one application with the Genvid SDK integrated may run at a time if not launched using Nomad.

If an application using the Genvid SDK is launched without Nomad, a default session name is assigned to it. This is useful when testing your application in the Unity engine, Unreal engine, or booting your application manually.

Currently, the Genvid SDK is unable to support multiple applications launched this way unless you change the environment variable GENVID_SESSION_NAME to a unique name. You can also launch your applications via Nomad to avoid this issue.

We will fix this in a future release.

Twitch and YouTube Synchronization Advisory

During testing, we’ve found some synchronization issues when broadcasting via both Twitch and YouTube. See the Twitch and YouTube sections for details and workarounds for each.

Azure reports requested instance size not available.

On Azure, we are using a compute instance type Standard_NV6 for the game machine. For some accounts, only the promo version of this instance type is available (Standard_NV6_Promo).

When doing the Terraform setup on the Azure module, you may encounter the error:

The requested size for resource 'XXXX-game-1' is currently not available in location 'XXXX'

As a workaround, go to your Terraform Settings page and change the instance_game_type to Standard_NV6_Promo, then go to the Commands page and try Plan apply -> Apply again.

iPhone issues with Twitch

Since the Twitch API doesn’t return any values for the attributes of the getPlaybackStats() call on iOS devices, you will encounter imprecise or inconsistent synchronization performance.

Internet connection slowdown can cause the game data to desynchronize when Ingest is running.

When running Studio with Ingest, the game data may desynchronize from the video stream when the Internet connection experiences a slowdown. Once the slowdown clears up, the game data will resynchronize with the video stream.

Azure doesn’t allow bastion names that have more than 5 characters.

While working with Azure, you need to choose a compact name for your bastion because there is a maximum limit of 5 characters.

Azure: When changing Availability Zones, resources need to be destroyed and rebuilt.

It is possible during this step for deleting the Public IP to fail due to it not being detached from the virtual machine. This is a bug in the Terraform provider (see this issue for more information). As a workaround, manually detach the offending Public IPs from the virtual machines in the Azure portal.


Loading Configurations in incorrect order can overwrite values.

Whether you’re using SSL on a cloud or a local cluster, if you load youtube.sample.hcl before loading the web sample, the web sample will overwrite the value associated with the embed_ssl from the web.hcl file.

Large NTP time offsets will prevent the stream from playing.

If you encounter large NTP time offsets, your stream may stop playing. As a workaround, make sure that the game machine is configured to update its clock automatically. For local configurations, replace the AWS IP address with

See the AWS configuration section for more information.

Studio can’t take inputs of the same control from multiple windows.

If Studio is opened in more than one browser window and inputs are received from different sources to one control, the final value will then bounce between the different inputs instead of updating it to the latest one. For example, in Audio Mixer Widget, if a user changes the slider of Master Gain to 20 db and another user then changes it to 0 db, the slider handle will bounce between 20 db and 0 db instead of being set to 0 db.

Sending input from multiple Studio windows to one control is not recommended until we resolve the issue.

The application doesn’t work properly after Windows comes back from sleep.

Nomad has some difficulties with sleeping jobs, including itself. This is unlikely to get fixed in Nomad, but shouldn’t happen in a production environment. The best workaround at present is to not allow Windows to go to sleep when you are running the service, or simply to restart the service with a genvid-bastion reinstall. (Unfortunately, genvid-bastion restart is not sufficient).

AWS: Manually remove the subdomain NS record when updating the subdomain on an existing cluster.

When creating an AWS cluster using basic_cluster_alb_ssl or minimal_cluster_alb_ssl, the domain and subdomain are provided. When updating an existing cluster’s subdomain, the Route 53 NS record for the previous subdomain needs to be removed manually from the main domain. This is due to how the NS record is handled within our Terraform.

The SDK clamps framerates under 1.0.

To prevent issues, we raised the lower limit for the framerate to 1.0 for any stream. The SDK will clamp the value to 1.0 FPS if it’s less than 1.0.