Genvid SDK 1.12.0

Welcome to Genvid SDK 1.12.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. Please contact us if you have any issues.

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

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

Major improvements in our UIs

We made many improvements in our UIs. Among them, you will find that you can now find the same jobs and logs API in the Bastion API service. Along with showing the services running in the Bastion Environment, you can now add your own jobs.

We also added a new Configuration section in the Cluster API, which lets you directly edit your configuration keys without resorting to the command line or Consul-UI.

Finally, our Studio can now save and restore dashboards you create so they can used by others.

New Genvid Unity Package

We now provide a binary version of our plugin and include it in our Genvid Unity Package. This package includes all the plugins, libraries, and scripts necessary for integrating Genvid into your game and includes Unity Editor tools to help your development with Genvid.

New UE4 Genvid Module

This version is more faithful to the current Genvid SDK design and sets the stage for future features in the SDK. It is backward-compatible with the previous version but all old classes are now deprecated.

See the upgrade notes for more information.

Minor changes and other fixes

Genvid Streaming API and Services

  • Added new streaming settings:
    • Extra delay in the settings screen for the standalone player.
    • Composition monitor resolution and bitrates (audio and video).
  • Clean up audio device names in the SDK log.
  • Fixed a potential lock-condition when closing a stream that could stop the streaming.
  • Fixed the SDK Health Check missing its deadline once in a while, creating a false warning.
  • Validate a video-source resource before using it. This applies to both the video.source.idxgiswapchain and video.source.id3d11texture2d. This also fixes a resource leak when there was an error.
  • Added an overload to SubmitGameData in the C# wrapper, which allows sending byte array instead of a String.
  • Added package.json to the commonjs and node distribution for easier integration with NPM.
  • Fixed a memory leak using the standalone player with Google Chrome.
  • The audio mixer in composition can now handle missing audio frames.
  • Fixed a desynchronization happening when audio and video streams get destroyed and recreated.
  • Studio now restores initial values to video mixer when restarted.
  • Fixed using a number value in the key of a mapping schema in Events. Previously, such usage would be seen as invalid and result in disconnecting the viewer websocket.
  • Ensure that our internal connections answer all connections but refuse them if busy. This prevents filling up the connections queue, resulting in false positives in the health check of the service, as well as a denial of the connection when it should be available.
  • Fixed a disconnection in the Ingest sample which was disconnecting the streamer after 10 seconds.
  • Correctly applies the digital delay to the source, without compensating for the missing frames.
  • Fixed a regression where the video dissolve and fade-in/fade-out transition were applied in reverse.
  • Fixed an audio/video offset happening during long broadcast session.

Genvid Toolbox API and UI

  • Added two new parameters for genvid-bastion install command:
    • --loadconfig or -l to update the job and logs configuration in the bastion.
    • --update-global-tfvars or -u to update the global settings with their default values.
  • Fixed the edit dialog-names in Cluster-UI.
  • Fixed a bug where the start/stop buttons in Cluster-UI were not active during a state refresh.
  • We now wait for the services to start correctly during a genvid-bastion install before setting the global variables. This fixes a bug where the global variables were overridden if the services were slow to start.
  • Always unseal the vault on services start. Fixes a condition where the genvid-bastion install command wasn’t able to restart the services correctly because the vault was sealed.
  • Upgraded py-docker dependency package from 2.0 to 3.1. This could break some scripts that are using the genvid.toolbox.DockerTool class. See the list of breaking changes.
  • Compressed our Docker images, reducing the upload time to the servers. You can take advantage of this by using the compress parameter of the genvid.toolbox.DockerTool.update_image call and updating your template accordingly.
  • Fixed the additional / in the ClusterAPI.get_base_url(). This caused some POST methods to not be applied correctly on the server.
  • The Bastion-API is now run with a static port by default, pointing to 8092. You can change this value by using the GENVID_BASTION_BINDING_PORT environment variable.
  • Show a warning in Bastion-UI and Cluster-UI if the data is modified on the server before saving.
  • Added a new start-all and stop-all REST API to start/stop all the jobs marked with the autostart flag. The scripts and the plugins now use this API consistently.
  • Updated the AMI to TightVNC 2.8.8. This fixes a bug in the installer, allowing us to set the initial password during our generation of the image.

Samples and Engine Plugins

  • All websites now use compressed Docker images for the cloud environment. We simplified and updated the templates accordingly.
  • Removed unused jade node package in the web server code.
Unreal Engine 4
  • Fixed a video-stream freeze in the plugin during the map loading.
  • Forced Typescript to version 2.5.2 in both sample websites.
  • Modified the update Nomad template with a different parameter for the AWS3 sync to upload the game when the timestamp is changed instead of the file size.
  • Fixed a timing issue during the video destroy-stream process in the prefabs.
  • Minor fix in the documentation related to a command not available anymore.
  • Dump Unity Editor log file after unity build.
  • Fixed a compatibility issue with an older supported version of Unity (5.6) related to the CommandBuffer placed on the camera which caused the screen to be gray when changing scene or camera.
  • Added proper validation of parameters for the Python script load- operation.
  • Changed scene 2 to use the same color and sound for cubes/spheres based on their order.
  • Added warnings hinting about having to use D3D11 if the video stream failed to initialize.
  • Added additional validation for our events in case an object is null.
  • Fixed an issue where an event callback could cause a crash when stuck on an error inside the C Sharp script.

Known bugs

We weren’t able to fix some bugs in time for this release, but we intend to fix them shortly.

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). The workaround is creating VPN connections to the Bastion machine so that 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.

Service cannot discover the statsd service

Unless you are using the GENVID_STATSD_URL variable, the statsd service must be available before starting it. This is an oversight on our side and will be fixed in the next version.

Standalone player with Firefox

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

Genvid Studio stops working when all streams are destroyed

Destroying and re-creating the audio/video stream while using Genvid Studio for an application that you are streaming with the Genvid SDK causes your audio/video stream to stop working until the stack is restarted.

Genvid Studio UI layout is not saved between sessions

The layout saved is associated with the IP and port of the current Genvid Studio instance. We are working on a future solution that will persist the layouts between sessions.

The YouTube stream might stop after running UT4 for some time

We have observed the YouTube stream stopping after running the UT4 sample for several hours. We are actively investigating this issue.