Genvid SDK 1.22.0

Welcome to Genvid SDK 1.22.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 & Changes below for the list of new features in this release.

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

Major Fixes & Changes

Initial Azure Support

This release includes a new Terraform module you can use to create a cloud infrastructure on Azure to run a Genvid cluster. We also added support in the Toolbox to interact with an Azure environment.

At this time, we only support the basic cluster module on Azure. We will add support for the load balancer and Twitch sample in a future release.

Cluster ID via an Environment Variable

The cluster ID is usually supplied as a command-line argument or takes the default value of local in the toolbox. You can now set the value with the environment variable GENVID_CLUSTER_ID. You can also use a profile to set the environment variable.

Note: Some commands require specifying the cluster ID in the command line. In these cases, it will default to local if the cluster ID is missing.

Hashicorp Suite Version Upgrade

We upgraded the included Hashicorp Suite of programs to the following versions:

  • Nomad 0.10.0
  • Vault 1.2.3
  • Consul 1.6.1
  • Terraform 0.12.19

Note: Because we have upgraded the Genvid SDK version of Terraform from 0.11 to 0.12, you will also need to upgrade any custom Terraform modules used with the platform. See the upgrade notes for more information.

The Terraform upgrade also required us to change how we load the Bastion-UI/Terraform/Cluster/Settings page. Because the page now takes longer to load, we added a spinner to indicate the loading time.

NATS is Now a System Job

NATS now runs on all nodes once a cluster is set up, instead of being started by the services job. This makes it possible to balance the load better under high number of clients.

Note: This means the Cluster UI no longer displays NATS in the list of jobs and can only be accessed through the Hashi UI.

Minor Changes and Other Fixes

  • [bastion-ui] Error no longer displays when clicking the browser back-button while in Terraform settings.
  • [bastion-ui] UI fixed on resizing the window.
  • [cluster-ui] Users can now see a list of all the S3 images in Cluster-UI that are being used by a cluster.
  • [cluster-ui] Added a spinner to indicate loading while waiting for a stream to start.
  • [cluster-ui] UI fixed for Microsoft Edge.
  • [cluster-ui] Added an ‘Advanced Editor’ toggle button to the cluster settings form. Users can now see/edit the settings in JSON format.
  • [commandd] Fixed issue where empty strings were returned as error descriptions.
  • [composed] Fixed an issue where a stream can replace a previous stream with a different ID under some circumstances.
  • [general] Updated various third party libraries to more recent versions.
  • [general] Updated Python scripts to use proper string comparison operation. (Python 3.8 no longer silently accepts “is” and recommends using “==” by default.)
  • [genvid-ami] Fixed a bug in genvid-ami setup which would prevent a new cluster from being created to setup the AMIs if one didn’t already exist.
  • [gvencode] Fixed a non-monotone increase dts warning in gvencode encoding muxer.
  • [gvencode] Fixed latency issue when composed loses its connection with gvencode and comes back.
  • [leaf] Fixed a bug preventing the metric from being collected.
  • [nats] Upgraded the NATS Server to version 2.0.4.
  • [nats] The Genvid SDK is more resilient to eventual NATS failures.
  • [sdk] The composition data-stream bandwidth blueprint has been reduced by a factor of around 5, depending on the streaming context.
  • [sdk] Updated different elements of the communication protocol for future usage.
  • [sdk] The Streams format is now propagated from the SDK to the web client.
  • [sdk] Fixed an issue when the TCP & UDP socket was not properly closed, depending on the socket state.
  • [sdk] Fixed a problem where gamedata are not sent when sending an annotation with the same stream ID.
  • [sdk] Fixed an issue when calling the Genvid_Terminate() function that was taking too much time.
  • [sdk] Fixed the maximum number of in-flight annotations per stream (instead of globally).
  • [sdk] Fixed a problem where the game sends a huge number of Audio/Video/Data Streams when the RTMSP connection has been lost and restored.
  • [sdk] Fixed the swapchain sync-interval that specifies synchronizing the presentation of a frame with the vertical blank.
  • [sdk] Fixed a problem of submitted Audio/Video/Data streams accumulation when the SDK loses its connection with composed.
  • [statsd] The SDK services now connect to the local statsd service by default, rather than the first one found.
  • [statsd] Fixed an issue with the logs when statsd is not connected.
  • [studio] Transitions now queue instead of being discarded when busy.
  • [studio] Fixed the error message from audio-mixer when moving in and out of the editing dashboard.
  • [studio] Fixed Audio/Video desyncs when one source is stopped or crashes with Studio.
  • [studio] Fixed an issue where attempting to create a duplicate dashboard would issue a warning to user.
  • [studio] Added spinner which displays if steam is not yet started or if stream is not running and not paused.
  • [studio] Added string validation in the layout-creation dialog in Studio.
  • [studio] Added an error message to inform user that Studio lost connection with the backend service.
  • [studio] Added a reconnection algorithm when gvencode is disconnected from studio.
  • [studio] Added metric feedback about the web components.
  • [studio] Negative values as input for sliders are not supported in Video Mixer anymore.
  • [studio] Fixed an issue regarding the undo functionality not reverting properly.
  • [studio] Fixed issues regarding the scene selection not updating values properly.
  • [studio] Fixed a source-buffer quota issue on the frontend.
  • [studio] A default scene will be created if there are no scenes. The default scene will behave exactly like any other scene.
  • [studio] The delete icon will be disabled for the last scene left in the list to make sure that there is always at least one scene.
  • [studio] Fixed an issue when saving scenes that would save everything even if some sections were not selected to save.
  • [studio] Slider inputs won’t accept a value lower or higher than the min/max limits anymore.
  • [studio] Fixed the problem of auto streaming a scene if the delete/edit icon was clicked while Auto-cut is enabled.
  • [studio] The audio-follow button now works as intended.
  • [studio] Fixed various stability issues and increased responsiveness.
  • [terraform] Users can now initialize the cluster again by using INIT button on Terraform command page without having to re-import the module.
  • [terraform] Fixed support for boolean in Terraform settings.
  • [terraform] Fixed an issue about obtaining an empty command log when cloning a cluster.
  • [terraform] Tool-tips no longer get cropped when the description is too long.
  • [terraform] Fixed a bug where terraform destroy would fail to destroy a basic cluster.
  • [terraform] Fixed an issue where the variables were not loaded properly.
  • [tick] Upgraded telegraf from 1.3.5 to 1.13.1 to solve performance issues leading telegraf using a lot of CPU.
  • [tick] Added a telegraf task running on the game instance.
  • [toolbox] Reordered health check by severity.
  • [toolbox] Added filtering to genvid-clusters command line.
  • [toolbox] Added BastionAPI.terraform_regenerate_instance which allows regenerating the Terraform working-directory for a specific instance.
  • [toolbox] A UUID is now generated with every new cluster to be used in the backend configuration to create a unique path. This helps avoid name clashes when creating new clusters with the same name as previous clusters with backends like S3.
  • [toolbox] genvid-sdk upload-images no longer requires a cluster to be running to work.
  • [toolbox] upload_images* methods in now default to not updating the configuration in all cases for a more consistent behavior.
  • [toolbox] Added a update_images_config method in to update the images configuration of a cluster.
  • [toolbox] Introduced a new GENVID_VERBOSE_EXCEPTIONS` environment variable which makes the toolbox print the full stack-trace when an exception is raised.
  • [toolbox] Added genvid-sdk package command to Zip files and folders.
  • [toolbox] Added genvid-sdk docker-package command to package Docker images.
  • [toolbox] Improved stability of the toolbox genvid-bastion install command to prevent failover race conditions.
  • [toolbox] Fixed Terraform init function when loading for the first time on a cloned cluster.
  • [toolbox] genvid-sdk load-config now accepts a path to Nomad templates as argument. (Before it only supported a static configuration.)
  • [toolbox] Added a new genvid.toolbox.ConsulTemplate class which is a thin wrapper around consul-template. This new class is now used to reimplement the ConsulTemplateTool mixin for more stability.
  • [toolbox] Endpoint /content is now deprecated from the Bastion API.
  • [toolbox] Clarified various error messages by adding more context.
  • [toolbox] Extended functionality of genvid-sdk load-config to load the tutorial using the command.
  • [toolbox] Introduced an optional arguement --job-template-dir to the genvid-sdk load-config command to specify the path of directory to load the Nomad template jobs.
  • [toolbox] Added a --with-consul-template argument to genvid-sdk load-config to run consul-template on the configuration file prior to loading it.
  • [toolbox] Fixed a bug in genvid-sdk clean-config which prevented using the command to partially remove a configuration.
  • [toolbox] Fixed an issue where genvid-sdk failed silently when using an extra slash for a valid GENVID_BASTION_URL.
  • [toolbox] Updated most dependencies to latest stable version.
  • [toolbox] Replaced consulate with consul-python.
  • [toolbox] Added a cloud provider option to genvid-sdk upload-images and upload-images-sdk.
  • [toolbox] Updated versions of pyyaml and colorama in the Python Toolbox.
  • [ui] The log panel now shows the proper log for the selected log entry, including specific filenames.
  • [ue4] Saving the settings multiple times in a row will no longer open multiple success messages.
  • [ue4] Fixed a bad HTTP URL address used to communicate with Consul in UE 4.22+.
  • [ue4] Added UE4 4.23 and 4.24 compatibility.
  • [unity] Deprecated the SubmitGameData method of the Genvid Unity Plugin and provided a more explicit SubmitGameDataJSON.
  • [vault] Fixed Vault initialization when there is more than one Vault instance.
  • [web sdk] Improved the web SDK synchronization algorithm.
  • [web sdk] The web SDK now logs its version at intialization time.
  • [web sdk] At connection time, the web SDK and the leaf check their mutual compatibility.
  • [web sdk] Removed a warning in the web SDK happening when using non-UTF8 gamedata.
  • [web sdk] Fixed an annotation problem where frames were sometimes cleaned when they shouldn’t be.

Known Issues

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.

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).

The YouTube stream isn’t properly reset after a gvencode restart.

If you stop and quickly restart the services, the YouTube streaming service considers it part of the same streaming session. Although this may be desirable most of the time, this could lead to showing up as the previous session due to the long latency between the services and the actual view which can create some delay in the stream. A future version will provide a proper way to request a new stream. Until then, you can either reset your stream key from the YouTube dashboard or simply wait a little longer (about 5 minutes should be enough) before restarting the service.

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.

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.

Studio can not 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. Inputs from different windows to one control is not recommended until we resolve the issue.

Only one application not running with Nomad is supported for the Genvid SDK

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 simply 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 with a unique name. Otherwise, we recommend to use Nomad to launch your applications to avoid this issue until a fix is integrated into the Genvid SDK.

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.

Log definition limitation

If the value is different than stdout and stderr, than specific filenames need to be unique on the stack (2 jobs cannot have the same log filename, ex: default.out)

Load tester sample is not functionnal

The current version of the load tester sample is not usable due to errors in its script which prevent it from running as documented.

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, you can go to your Terraform Settings page and change the instance_game_type to Standard_NV6_Promo, then go to Commands page and try Plan apply -> Apply again.