Genvid SDK 1.24.0

Welcome to Genvid SDK 1.24.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 support@genvidtech.com 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.

  • 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 and Changes

Cloud Deployments - Azure

We improved support for Azure deployment by adding the genvid-azure-image command to import base images more quickly when creating cloud environments.

We changed the Linux distribution of the server image from Ubuntu 16.04 to Debian 10 to match the AWS server image distribution family, be more up to date, and for improved performance.

Cloud Deployments - AWS

We added support for G4 machines and Windows 2019 for AWS cluster deployment.

You can now define the subnets corresponding to the availability zones (AZs) you want to deploy to and the different components of your clusters will be spread to these AZs accordingly. Destination AZs are now defined by the new variables subnet_ids and azs. force_azs is no longer used. This change also brings more uniformity between our cluster variables and outputs.

We upgraded the provided wingame image from Windows Server 2012 R2 to Windows Server Datacenter 2019. We also disabled Windows Defender and Windows Firewall by default on it for improved performance.

RemoteGUI (beta)

The new RemoteGUI provides live, visual information about the encoding pipeline. It will help you troubleshoot and identify more precisely where bottlenecks are when issues occur in the live stream composition.

Unity Prefab Changes

The editor and SDK parts of the Unity plugin are now exported in 2 separate plugins.

Minor Changes and Other Fixes

  • [unity-plugin] SubmitNotification is now part of GenvidSession. Related methods are now marked as deprecated in GenvidStreams.
  • [unity-plugin] Fixed a bug where SubmitGameData would always return false even without an error.
  • [unity-plugin] Added overloads to SubmitGameData, SubmitAnnotation, and SubmitNotification for convenience and homogeneity. (They all have matching overloads now.)
  • [unity-plugin] All overloads of SubmitGameData, SubmitAnnotation, and SubmitNotification now consistenly handle null by returning false early and displaying an error log.
  • [ingest] Added supported color formats and color spaces in the documentation.
  • [ingest] Fixed a crash happening upon disconnection of the RTMP source in the Ingest sample.
  • [ingest, gvencode] Fixed audio stream resampling issue when audio source is not stereo.
  • [ingest, gvencode] Fixed an issue where stopping and starting OBS caused an audio/video desynchronization.
  • [ingest, gvencode] Fixed an Audio/Video desynchronization issue when the Internet connection has problems (lag, drop, throttle).
  • [composed] Fixed an issue where game data wouldn’t display after starting a cluster.
  • [composed, gvencode] Optimized the composition data bandwidth.
  • [toolbox] Added a command to create images in current Azure subscription. This allows for faster creation of clusters in Azure.
  • [toolbox] Updated documentation for upload-images-sdk
  • [toolbox] The linux server now restarts dhclient to apply configurations and ensure Vault access.
  • [toolbox] genvid-azure-image now requires Python 3.8 to run.
  • [studio] Limited studio components to one type per dashboard.
  • [studio] Removed the “”+Broadcast(Deprecated)”” panel from Studio dashboard.
  • [studio] Removed components settings in scene creation.
  • [studio] Validated dashboard IDs in Studio. They must start with an alphanumeric character to be saved properly.
  • [studio] Applying an overshoot interpolator on a cover transition will no longer show a black frame in the overshot section.
  • [studio] Fixed crash when switching from monitor to dashboard if the user doesn’t start the playback.
  • [studio] Fixed issue where the system restarts multiple times after a failure.
  • [studio] Fixed browser slowdown due to concurrent readers.
  • [studio] Optimized Studio UI performance.
  • [studio] Studio’s default scene is now displayed when Studio opens in a cluster for the first time.
  • [azure] The new genvid-azure-image command allows to import base Linux and Windows images directly from Genvidtech Azure blob storage, as well as preparing the Windows game image.
  • [azure] Modified the default values of the resource group and shared image gallery for Azure.
  • [azure] Updated documentation to specify that Python 3.8 is required for using the SDK with Azure.
  • [azure] Updated documentation for shared_gallery_image_version when working with genvid-azure-image.
  • [web sample] Replaced request and request-promise library by axios.
  • [web sample] Added SSL support for all streaming services.
  • [web sample] Added the generate-ssl.py script to generate self-signed certificates for local clusters.
  • [web sample] Fixed browser console errors in samples.
  • [web sample] Annotations are displayed properly when changing cube’s color.
  • [web sample] Improved support of SSL for any embedded service.
  • [web sample] Fixed the cache issue that triggered the ‘No Composition Data found’ warning in the console.
  • [web api] Converted the genvidClient.IDataFrame.timeCode into milliseconds.
  • [nomad] Updated Nomad version to 0.12.
  • [directx cube sample] Changed documentation describing cube DirectX build.
  • [ue4] Fixed deprecated property warning in Unreal sample build.
  • [ue4 cube sample] Fixed script exception when a bad version argument is used on ue4.py build.
  • [ue4 cube sample] Fixed an occasional cooking failure when the GenvidEditor has an HTTP request in process.
  • [ut4 sample] Fixed an issue preventing the UT4 sample from running on AWS instances.
  • [web sample] Added the missing /health entry point for Twitch support in the Cube and Unreal Tournament web samples.
  • [terraform] Added consistent usage of terraform workdir folder to download modules when Init and ImportModule are invoked.
  • [ut4] Support for SSL streaming on cloud alb_ssl cluster.
  • [genvid-ami] URL for vb-audio driver is now using https and use an official link.
  • [installer] Added Git installation to the installer since it is now required to download the required standard Terraform modules.
  • [bastion-ui] Fixed issue with scrolling in the Terraform config page when there are many clusters.
  • [tick] Updated Chronograf version to 1.3.9.0.
  • [tick] Sorted keys for exported dashboards to make them easier to merge.
  • [rootd] Fixed an issue so the system now resumes sending data if rootd crashes and reboots.

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 doesn’t properly restart after a reset.

When broadcasting via the YouTube Live Streaming Service, your stream might not start correctly or will show up as the previous session after starting all the jobs on your cluster or if you stop and quickly restart them. Although the latter might be desirable, we don’t recommend continuing while in that state as it can create delays in the stream.

As a workaround, you can either reset your stream key from the YouTube dashboard or follow these instructions:

  1. Stop gvencode or the services job.

  2. Wait at least 2 minutes.

    Alternatively, verify the stream ended via the YouTube Studio dashboard (https://www.youtube.com/live_dashboard).

  3. Restart the services.

We will add a way to manage these cases in a future version of the SDK.

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

Custom log files must be unique for a cluster.

Custom log files on a cluster must all have unique names if the value is anything other than stdout or stderr. (For example, two jobs cannot have the name 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 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.

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 when loading the web sample.

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 pool.ntp.org.

See the AWS configuration section for more information.

Azure deployments require Python 3.8.

The Python toolset we provide for Azure deployments requires Python 3.8. However, the default version of Python installed with the SDK is 3.5. If you intend to deploy on Azure, you need to manually install Python 3.8.

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 genvid-azure-image commands can take too long and trigger timeout.

When using the new genvid-azure-image create-images command, you may encounter Terraform timeouts in Azure either on creating shared-image versions or on creating the image_blob in the storage_blob. To resolve the issue, run the same command again.

CIDR conflict error following an upgrade or changing the AZ settings for a cluster.

After upgrading to 1.24.0 or after changing the number of availability zones in the AZ settings, you may get the error InvalidSubnet.Conflict: The CIDR '' conflicts with another subnet after using Plan apply -> Apply. Doing another Plan apply -> Apply will resolve the issue.

Possible error when accessing cluster settings following an upgrade.

After upgrading to 1.24.0, accessing cluster Settings page for the first time may result in the error Error missing required argument. The argument subnet is required but no definition found. If this happens, run the command genvid-bastion restart to resolve the issue.

Git is now Required to download Terraform modules.

Git is now part of our installer. You need to install ‘’Git for Windows’’ as proposed if required and ensure it is set in your PATH Environment Variable.

Opening Studio on a cluster for the first time won’t show the ‘default’ scene.

The ‘default’ scene won’t show correctly the first time you open Studio on a cluster. Refreshing the page will resolve the issue.

Bastion UI: Confirmation box for delete operation closes before selecting an option.

After performing an operation successfully (such as add or update) you see a success message box for a few seconds. If you immediately click on a ‘Delete’ button (‘x’ or trashcan icon) on that page then you may see a confirmation box that closes automatically when the existing success message closes.

To avoid this, wait for the success message to close first and then try to delete the item. If you do see this issue, wait for a few seconds then try to delete the item again.

Bastion UI: Settings page of a new cluster occasionally inaccessible after importing a module.

Sometimes the settings page of a new cluster is not accessible after importing a module. Once the bug is triggered, the settings page will remain inaccessible until a new cluster is created.

genvid-azure create-images command fails when storage account is mentioned.

Creating images for Azure will fail if storage account option is mentioned in the genvid-azure create-images command while using the -s or –storage-account option.