Genvid SDK 1.23.0

Welcome to Genvid SDK 1.23.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

New Shared Web Sample

We refactored our engine integration samples to use a single shared web sample. This JavaScript web sample requires much less code, making it easier to understand and debug. See the 1.23.0 Upgrade Notes for more information.

Unreal and Unity Integration Changes

We moved the generic code for integrating the Genvid SDK with Unreal Engine and Unity to a dedicated folder in engine-integration. See the 1.23.0 Upgrade Notes for more information on upgrading your game.

Minor Changes and Other Fixes

  • [documentation] Added Terraform Modules section to the References section.
  • [documentation] Added instructions on creating and using a Python Virtual Environment for running Genvid Toolbox.
  • [sdk, composed, gvencode] framesizesent metrics are now gauges instead of counters.
  • [sdk, gvencode] Fixed an Audio/Video and Data offset problem when silent mode is enabled.
  • [sdk] Fixed issue where the stream fails to resume on Twitch after closing the game and restarting it.
  • [eventsd] Fixed a crash in eventsd which happened during restart that could lead to a loss of events subscriptions.
  • [eventsd] Fixed the stream freezing when eventsd is restarted.
  • [web-sdk] Fixed obsolete data being present in the web client after the game has closed the stream.
  • [web-sdk] Fixed buffer latency of the Standalone player.
  • [web-sdk] The es5 version of our library is now distributed to our clients.
  • [web-sdk] Fixed a reconnection issue between NATS and the events service.
  • [web-sdk] Fixed a reconnection issue with leafd.
  • [web-sdk] Chroma key compositions will no longer hide game data.
  • [web sample] Added the volume icon to the Web Sample.
  • [toolbox] Polished ROOTDIR auto-discovery for genvid.toolbox.BaseTool.
  • [toolbox] genvid-sdk show-config can now run properly even when no secrets are present.
  • [toolbox] upload-images-sdk now creates the NATS-window package.
  • [toolbox] Added new Job API /jobs/jobID/settaskgroupcount which allows directly setting the group count.
  • [toolbox] Improved the error messages when rendering job templates.
  • [toolbox] Fixed Python dependencies that break using Docker for Windows with the Genvid Toolbox.
  • [toolbox] The Toolbox now uses Azure CLI calls to avoid dependency conflicts between Azure Python API and Azure CLI.
  • [toolbox] Added debug-level logs to the Azure code base.
  • [genvid-ami] Added a new --region argument to the setup command. You can use this option to override the region used by your Terraform configuration for deploying the game instance.
  • [game image] Fixed the shortcut to the documentation on the Windows game image.
  • [openapi] Added the /consultemplate endpoint definition in the OpenAPI definition file.
  • [bastion-ui] Terraform Variable editor now supports variables of type Map.
  • [bastion-ui] The Bastion-UI Terraform page now shows the number of resources allocated by Terraform next to the status. See the Terraform section for more information.
  • [bastion-ui, cluster-ui] ID for jobs and links of Cluster UI and Bastion UI are no longer editable after they’re created.
  • [bastion-ui, cluster-ui] Improved the error message for cluster name creation.
  • [gvencode] Fixed a memory allocation problem when trying to add audio silences.
  • [gvencode] Improved Audio/Video stream stability.
  • [gvencode] Improved gvencode blitting performance and image quality when the input and output format are identical.
  • [gvencode] Fixed Wipe support in local streaming.
  • [gvencode] Pointed the data directory for gvencode to the correct folder for local streaming.
  • [terraform] Renamed all the main files in our Terraform modules to for better consistency with the Terraform standard.
  • [terraform] Renamed the new alb_ssl_cluster to match the basic_cluster convention. See the 1.23.0 upgrade notes for more information.
  • [terraform] Added a way to create minimal_alb_ssl cluster on VPC with multiple subnets per availability zone. A list of allowed subnets to use is now available but optional.
  • [composed] Improved RTMSP connection/reconnection.
  • [composed] Fixed a termination when a game connection is lost, preventing the A/V stream from recovering quickly.
  • [composed] Fixed a SIGSEGV error due to a concurrency problem when a source disconnects.
  • [rootd] Improved stability when used with heavy data streams.
  • [rootd/eventsd] Increased the memory limit in the cloud.
  • [commandd/webgateway] We renamed the command service to webgateway. This also applies to the executable and Docker image.
  • [commandd/webgateway] Added a Consul key configuration to activate the command legacy-mode where the service is exposed as commandd instead of webgateway.
  • [webgateway] The Webgateway service now exposes an /events endpoint, allowing the sending of event batches.
  • [samples] Game data no longer persists when changing the primary source.
  • [studio] Fixed an audio crackling noise issue in Studio.
  • [studio] In Studio, the UI of source 1 reflects the state of source 1 audio. If the UI is grayed, there is no audio. If the UI looks activated, you can hear the audio.
  • [studio] Adjusted the internal instance-count in the Terraform Settings to support Studio.
  • [studio] Fixed display issues to enable resize of bottom widgets.
  • [studio] Fixed display of status panel going over two lines.
  • [studio] The Audio autofollow state on/off is now preserved after a refresh of the page.
  • [studio] Audio-follow-video option is now kept when switching scenes.
  • [studio] After modifying transition and video-mixer values, if the user reloads the page without saving the scene, the values are updated to the scene ones.
  • [studio] Fixed the Audio Mixer going in silent mode when selecting the default scene after switching the value in the cluster settings.
  • [studio] Set the value of the Audio-Follow-Video option to false by default.
  • [studio] Fixed a bug where the game data would freeze during a Studio transition.
  • [studio] The video-mixer primary source is now read properly when creating a new scene while the video mixer option is not selected in the configuration.
  • [studio] Updated the streaming strategy to a stable low-latency stream.
  • [studio] Studio always has a scene selected when starting.
  • [ingest] Ingest stream is now independent of its place in the source order.
  • [ingest] Fixed Ingest performance problem when no Audio/Video is streamed.
  • [ingest] Improved OBS Video compatibility for Color Format (NV12, I420, I444, RGB), Color Space (601 or 709), and Color Range (Partial or Full).
  • [ue4-plugin] Fixed reversed Audio On/Off status in the settings section of the Genvid UE4 editor.
  • [ue4-plugin] Fixed Genvid Editor Tab auto refresh when a change is made from Cluster-UI.
  • [unity] You can now specify which version of Unity to use when building the plugin and sample.
  • [unity] Unity plugins are now compatible with the latest Unity 2019 LTS.
  • [unity] Fixed a problem that caused an error to be logged despite the SubmitGameData function being successful.
  • [unity-plugin] Fixed some issues with the Genvid Window UI under Unity 2019.3+.
  • [unity-plugin] Fixed Unity Editor slowdown when Genvid Bastion is stopped while the Genvid Window tab is open.
  • [unity-plugin] Reload settings now updates settings changes in the Unity plugin without having to select another setting.
  • [cube] When using Twitch, Consul uses a configuration key to set the leaf and web endpoint.
  • [twitch] Updated our Twitch API support to the new version by adding the parents option.
  • [tick] Updated instructions for dealing with a lack of resources on the internal worker. See the 1.23.0 upgrade notes for more information.
  • [loadtester] Completed a major rewrite of the Load Tester sample and renamed it loadtester. See the Load Tester section for information on the updates.
  • [loadtester] Removed the load_test module as well as the test instance type. Use the public instance, instead.
  • [consul-template] Updated consul-template to version 0.24.1

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.

Studio scenes configurations unusable if not selected at creation.

When creating a new scene, we recommend keeping all options checked when saving it. If a scene is created in Studio with no saved configurations, this makes the audio sliders for Source-1 and the video mixer unusable. This will be fixes in a future release.

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)

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.

Genvid AMI setup limitation when no default region is available.

If the default region for your AMI is missing or not working for your current Terraform configuration, you can run aws configure and update the default region for the active OU with a working region.

Twitch needs to be hosted in an SSL authenticated site on a local cluster.

New changes in Twitch require that embedded Twitch streams are now hosted in an SSL-authenticated site. Our local cluster does not offer SSL by default, but you can implement it yourself.

Large NTP time offsets will prevent the stream from playing

As a workaround make sure that the game machine is configured to update its clock automatically. Please refer to : AWS configuration section, for local configurations replace the AWS IP address with

Azure resource group creation fails with Python 3.5

If your Python version is 3.5.x, the Azure resource group cannot be created automatically. To create the resource group manually, go to the Azure portal and set the environment variable AZURE_RESOURCE_GROUP to the name of the resource group you are creating.