Genvid Forum

Genvid Technologies

Genvid SDK 1.20.0

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

Current Functionalities

Here is a summary of our current functionalities. See 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.
  • Video streaming to Twitch.
  • Multiple audiovisual and data streams coming from multiple
  • 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 source 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.
  • Dynamic composition graph (defined in services.nomad.tmpl file).

More to Come

Additionally, we are working on a full new feature pipeline to be released as
soon as each is ready:

  • Remote management services for sharing your clusters with others.
  • SSL support for external APIs.
  • ACL support on Management APIs.
  • Hardware encoding.
  • Instant replay.
  • Better cluster-configuration management.
  • Many more improvements and features exposed in our UI (including
    the plugins).
  • Offline data-stream recording and playback.
  • Offline broadcast-session editing.
  • SDK Manager to help handling multiple SDK installations.

Major Changes in This Version

Added Notification API HTTP Endpoint

The command API now exposes a new endpoint ( POST /notifications )
allowing the broadcaster to send notifications to all users without needing to
send them from the game. This lets you perform actions such as controlling the
notifications from an admin website, for example.

New Branding of Genvid SDK

We launched a new set of branding elements and incorporated them into the
Genvid SDK. This update doesn’t affect the SDK in any functional way. Enjoy
the new look!

Upgraded NodeJS to 8.12.0 LTS

The Genvid SDK installer now bundles the NodeJS 8.12.0 LTS release. This
resolves some compatibility issues several samples had with earlier versions
of NodeJS. The SDK is not yet compatible with NodeJS 10.13.0 LTS.

Upgraded HashiCorp Suite (Consul 1.4.4, Nomad 0.8.7, Vault 1.1.2, Terraform


We upgraded all 4 products of the HashiCorp Suite used in the Genvid SDK. This
includes the latest features and security fixes as of April 2019.

New Vault Management Interface

You can now manage your cluster Vaults directly from the Cluster Status page.
This new interface lets you perform normal Vault operations, such as re-
initializing, resetting, applying policies, etc.

New Genvid Web SDK module

We changed the way you can import the Javascript API. We now provide two
different ways of importing the modules for each library:

  • A minified UMD Javascript file.
  • A compressed node package file.

Please refer to the upgrade notes from 1.19.0 to 1.20.0 for more information.

Local Cluster No Longer Configured During Bastion Setup

Creating a local cluster is now an option when running the genvid-bastion install command–not the default behavior. See Initialize the local cluster
for more information.

Studio-UI Broadcast Panel Deprecated

We deprecated the Broacast panel in Studio-UI and will remove it in a future
release. You can still use the On Air button, which is in the bottom-left
corner of Studio-UI. If you currently have a Broadcast panel in your
dashboard, you can remove it by clicking the Edit button of the dashboard.

Toolbox Now Supports Named Profiles

The Genvid Toolbox now supports custom named profiles to make managing
multiple environments easier. Once created, you can change the environment
variables GENVID_PROFILE and GENVID_PROFILES_PATH from their default values
("" and “~/.genvid/profile”) to point to the custom profile you want to use.


If you change the value of GENVID_PROFILE, the named profile must exist in the
folder set by GENVID_PROFILES_PATHS. Otherwise, an exception will be raised.

The GenvidClient Interface Now Supports Reconnection to Leaf

The GenvidClient interface now exposes an onDisconnect callback that is
triggered when the client’s websocket closes.

The interface also exposes a reconnect function. It receives new stream
info, a new leaf URI, and a new token as parameters, then establishes a new
websocket connection to the provided URI.

Minor Changes and Other Fixes

  • [sdk] Now supporting IPv6.
  • [sdk] Added missing early parameter validations from SDK functions
    to avoid crash.
  • [sdk] Fixed some memory leaks when Genvid_Terminate() is called.
  • [sdk] Fixed a crash when Genvid_Terminate() is called.
  • [sdk] Fixed tags on genvid.sdk.frame* metrics.
  • [web] The genvid module no longer depends on genvid-math.
  • [web] The WebGL clearColor value is now expected to be an array of
  • [web] Added support to event twitchextoncontext. The handler of
    this event has an extra parameter with the new context and array
    of modified fields.
  • [web] GenvidClient now exposes an OnDisconnect callback, triggered
    when its websocket closes.
  • [web] GenvidClient now exposes the ability to reconnect to a leaf.
  • [web] Fixed volume state inconsistencies with Standalone, YouTube,
    and Twitch video player.
  • [web] Fixed inconsistent mute state behavior in overlay for
    Tutorial and UE4 samples.
  • [web] Twitch player overlay no longer pauses during the first
    seconds after the stream starts to play.
  • [web] When the video resumes playing after being paused, it will
    resume at the most recent video time.
  • [bins] Binsd is now started by default on the Bastion and Cluster
    instead of with the Studio Sample.
  • [studio] Disabled auto-cut checkbox when no scenes are created.
  • [studio] Disabled Audio Mixer panel when audio stream is disabled.
  • [studio] Disabled On Air button for standalone mode.
  • [studio] Changed scenes display from dropdown to unfold list.
  • [studio] Added indication of which scene is currently streamed.
  • [studio] Moved save and delete buttons to selected scene.
  • [studio] Added undo feature to selected scene. Resets scene to
    last saved settings.
  • [studio] When auto-cut selected, saving changes will cut to the
    current streaming scene.
  • [studio] Added warning message for uncut saved changes on
    streaming scene.
  • [studio] Added value fields to showcase current streaming audio
  • [studio] Avoid to freeze the monitor when we select source view.
  • [studio] Solved an issue preventing the video layout sliders to
    update their range.
  • [studio] Temporarily disabled the access to Still-Image video
    layout until the feature is completed.
  • [studio] Added a fixed panel to display On Air status and the
    information related to the Cut action.
  • [studio] Fixed a Play in Editor issue that prevented it from
    streaming on the website.
  • [ingest] Reduced chances of Ingest crashing from clicking
    start/stop in OBS.
  • [leafd] genvid.leafd.connection.current is now correctly updated
    as a gauge.
  • [composed] Fixed a rare crash in ComposeD due to concurrent access
    on sessions list.
  • [rootd] Fixed an issue where Rootd couldn’t listen to it’s binding
    address after a failure.
  • [terraform] Fixed the module definition so that the userdata
    doesn’t change when the number of workers instances is greater
    than one. Note that server instances will still be recreated if
    server_instance_count is modified.
  • [terraform] Fixed a bug where the Linux servers where no longer
    using Consul as a primary DNS resolver after reboot.
  • [terraform] Forced VPC Terraform Module to version 1.66.0 as our
    modules are not compatible with version 2.x
  • [terraform] Users no longer need to change the
    iam_policy_auto_create Terraform variable to “1” so the AWS
    policies pass when creating the cluster.
  • [toolbox] genvid-bastion status will now show the version of the
    bastion and cluster instance.
  • [toolbox] Fixed genvid-sdk setup to look for the SDK images in
    the correct key path.
  • [toolbox] Added a new command genvid-sdk clean-images-sdk for
    cleaning old SDK images.
  • [toolbox] New subcommand genvid-sdk version displays the version
    of the cluster instance.
  • [toolbox] Added a new genvid-sdk update-images command which
    lets you update the images configuration on a cluster based on an
    already populated S3 bucket.
  • [toolbox] The genvid-sdk upload-images and
    genvid.toolbox.DockerTool.update_image now have an optional
    --basedir argument to set the directory the files are stored in.
    We also added the method genvid.toolbox.SDK.update_archive which
    renames a ZIP file to match the regular expression
    genvid.toolbox.DockerTool.RE_IMAGE_IMAGEID. We updated all
    samples for the new functionality.
  • [toolbox] When DOCKER_MACHINE_NAME is not set,
    genvid.toolbox.DockerTool will no longer try to use default
    for setting the environment. Instead, it uses the default client
    connection. This should allow the system to build using [Docker
    for Windows][3].
  • [toolbox] Added a new BastionTool in the Genvid toolbox to help
    manage a local Bastion.
  • [toolbox] genvid.toolbox.sdk.get_config now also returns the
  • [toolbox] genvid-bastion start can now also start non-autostart
    jobs if passed as an argument.
  • [toolbox] Added genvid.toolbox.SDK.load_config_template to parse
    a configuration file through consul-template (like most of our
    samples scripts do).
  • [toolbox] SDK version number is now displayed at the bottom of
    Bastion-UI and Cluster-UI.
  • [toolbox] In Cluster-UI, we added a link to the associated Bastion
    at the bottom-left corner.
  • [toolbox] Bastion-UI and Cluster-UI are upgraded to Angular 7.
  • [toolbox] In Bastion-UI, we have a new layout for the Terraform-
    settings editor along with labels that display the type of value
    (local, global, or default).
  • [toolbox] API schemas are now located in genvidtools/libs for both
    Bastion-api and Cluster-api to share.
  • [toolbox] Swagger UI is implemented in Bastion-UI for Bastion-API
  • [toolbox] Fixed a bug where genvid-ami setup would create an AMI
    using a region obtained from Terraform variables, but then try to
    access it using the AWS configuration of the environment.
  • [toolbox] Terraform module is initialized when a clone cluster is
  • [toolbox] Added support for loading user profiles using the new
    environment variables GENVID_PROFILE and GENVID_PROFILES_PATH.
  • [toolbox] genvid-local-services and genvid-systemd-services
    can now set the Consul node ID through the --node-id parameter.
  • [toolbox] genvid-bastion install now accepts --node-id and
    --node-name to set the Bastion Consul Agent node name and ID.
  • [toolbox] Fixed a bug which caused genvid-clusters terraform- plan to return an exit code of 1 on success.
  • [toolbox] Fixed an issue where an existing Vault token would fail
    to be reused.
  • [toolbox] Added 3 new methods to BastionTool:
    update_terraform_repositories, initialize_backends, and
  • [toolbox] The command genvid-sdk load-config-sdk now updates the
    binaries path for the local cluster.
  • [toolbox] You can now specify the number of allocations included
    in the bug report when using genvid-bugreport broadcast.
  • [toolbox] genvid-sdk setup will now correctly update the
    binairies of an existing local cluster.
  • [toolbox] Fixed a bug where S3 bucket key-prefixes could contain a
    duplicated / depending on their format.
  • [toolbox] Fixed a bug where genvid-sdk setup would return before
    the local cluster is ready to be used.
  • [toolbox] Fixed a race-condition where we would try to set a
    policy in Vault before it is fully initialized.
  • [toolbox] Fixed a bug where some jobs wouldn’t stop properly in
    certain circumstances.
  • [ami] Changed the VAULT_ADDR value from
    http://vault.service.consul to
  • [ami] We now ensure the Windows DNS is correctly set after reboot.
  • [ami] We now flush the DNS cache regularly on Windows to resolve
    discovery of dynamic addresses faster.
  • [ami] Set Windows Negative DNS Cache to 0 on the genvidtech-
    wingame AMI.
  • [genvid-ami] Added a new --ami-version argument to the setup
    command. This option should only be used when explicitly stated in
    the documentation or by expert users.
  • [wingame-ami] The game AMI now supports instance types without a
    Z:\ drive. This makes it easier to use newer instance types like
    the G3.
  • [cluster-api] The CLUSTER_ID environment variable now propagates
    properly to each job.
  • [gvencode] Fixed the memory footprint to no longer grow
  • [gvencode][composed] Fix missing symbol names in stack trace on
  • [ue4] Added Unreal Engine v4.21 compatibility to the UE4 plugin.
  • [ue4] Added a manifest file functionality to Unreal samples.
  • [ue4] The UE4 Cube sample can now be forced to build with Visual
    Studio 2015 or 2017.
  • [ue4] Fixed regular lag spikes when playing in the Unreal Editor
    with a cluster selected.
  • [ue4] Corrected cubes rotation direction.
  • [unity] Fixed Genvid terminate issue related to events/commands.
  • [unity] Fixed website matrix conversion code which prevented
    proper clicking of the cubes.
  • [unity] Changed D3D11 Fullscreen Mode to Fullscreen Window to fix
    sample freezes.
  • [unity] Added a command line argument when booting a Unity
    application to activate the Genvid SDK.
  • [unity] Modified the ProjectSettings.asset file from the sample
    project to be compatible with Unity 2018 for the resolution when
    used in the cloud.
  • [unity] Added a new refresh button in the Genvid window for the
    Genvid.dll to fix a package install issue.
  • [unity] Added a button to display the Unity editor logs in the
    Genvid window.
  • [unity] Unity prefab and sample updated to use new function in the
    C Sharp wrapper to filter the Genvid status between error,
    warning, and success.
  • [unity] Better handling of faulty web requests while using the
    Genvid window.
  • [unity] Fixed the manual activation of the Genvid SDK inside the
    Genvid Unity prefab.
  • [unity] Fixed a 10 second freeze when doing a start/stop in the
    Unity editor.
  • [unity] Fixed bug where Unity would forget cluster selection in
    Genvid Editor window.
  • [unity] Fixed a crash that occurred when switching between
    clusters in the Genvid Editor window.
  • [unity] Fixed an issue related to DLL handling while opening the
    Genvid window during runtime.
  • [samples] Added annotation samples in UE4 and Unity that display
    their results on the website.
  • [docker-machine] Docker Machine upgraded from v0.13.0 to v0.16.1.
  • [hashi-ui] Hashi-UI upgraded to v1.0.0.
  • [consul-template] Consul Template software upgraded from v0.19.4
    to v0.20.0.
  • [nomad] Nomad-UI link has been added to Bastion UI and Cluster UI.
  • [bastion] The local cluster is no longer created by default. You
    will need to run genvid-sdk setup to create it.
  • [consul] We now set the parameter disable_host_node_id in
    Consul configuration, which lets the Consul Agent have a more
    stable node ID based on its hostname.
  • [consul] Leaf Websocket endpoint is now configurable (static)
    through Consul at genvid/services/leaf/websocketURLSuffix.

[3]: <

Known Bugs

Twitch Extension Developer Rig not working.

The Twitch Extension Developer Rig doesn’t provide any real player or video
stream to synchronize the data. For this reason, our web client isn’t able to
play back any data.

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

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

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

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

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.