Genvid SDK 1.16.0

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

Genvid Studio Improvements

Version 1.16.0 includes a number of improvements to the Genvid Studio user experience and service quality.

  • Studio now supports new Wipe filters and includes a good collection for you to use right away.
  • The new Scene Widget lets you save your scene configurations for quick reuse.
  • We added time interpolator for audio and video transitions
  • There are also a number of improvements in Studio performance and the responsiveness of its controls.

Clusters page is now Terraform page in Bastion UI

All the Terraform configurations are grouped together under Terraform page, including Cluster Terraform configurations. The process of managing your Cluster Terraform configurations remains the same. However, with the improved UI, you can complete a configuration with fewer clicks and can navigate between the configurations more easily.

Leafd metrics

In total, 22 new metrics are now emitted from the leaf. Refer to the metrics documentation for more detailed insights on the new metrics from leafd. Refer to the tick sample to start experimenting with those new metrics.

New Events Page

We changed how the Events page displays captured event-data. Instead of a log of all triggered events, it is now a table which displays a summary of each event. You can also download the summaries in JSON format.

Broadcast diagram sample

The new sample bcast allows you to have an overview of the different jobs of the broadcast in the form of a diagram.

It contains the status of nodes, jobs, services and streams as well as some statistics of the broadcast.

Minor changes and other fixes

  • [web-sdk] Added control over Web SDK logging. See the new configuration under genvidConfig.IGenvidConfig.console.
  • [web-sdk] Used https instead of http to fetch the Twitch Player code. This fixed the usage of Twitch Embed Player over an https web page.
  • [cluster-api] Correctly set the cluster’s Vault address and token on startup based on the information in the bastion’s Vault. Fixed a problem where the secrets were saved in the bastion’s Vault instead of the cluster’s.
  • [cluster-api] Decreased the resource needs for the Nomad job, so more clusters can be managed at the same time from the same machine.
  • [toolbox] Added backup argument to genvid.toolbox.BaseTool.install_file() method, and make it non-static.
  • [toolbox] The environment variables VAULT_TOKEN and VAULT_KEYS now take precedence over the content of the ~/.vault-token and ~/.vault-keys files.
  • [terraform] Added a trusted_security_groups list to our cluster modules for helping with the management of trusted access.
  • [services] Services’ addresses are now garanteed to point to healthy services. It results in more robustness when it comes to service discovery.
  • [services] Leafd now has a new configuration services.leaf.maxConnections that limits the number of connections per leaf. This makes the leaf health check return 429 Too Many Requests, which effectively removes the server from the URL available from Discod.
  • [composed] Reconnect on bulb service if its server stops. This modification improves the robustness of the data stream.
  • [ingest] Decreased the waiting time between two ingests to under a second.
  • [ingest] Added reference clock to frame from ingest. The extra-delay of FileSource filter could adjust this reference clock.
  • [youtube player] Avoid latency drifting when a game generates an irregular stream.
  • [cluster/bastion] Start all jobs now returns with an error if one or more
  • [cluster-ui/bastion-ui] The modal window in Job setting is widened for better readability jobs failed to start.
  • [cluster-ui] The events tabs bug that prevented the events from displaying for cloud deployments has been resolved. The events subscription endpoint /events/results/{counter:[0-9]+} has been repaired.
  • [bastion-ui] Start all jobs now also starts the cluster-api’s jobs.
  • [bastion-ui] In Terraform page, the configurations tabs on the left panel is sorted alphabetically.
  • [bastion-ui] In Terraform All Configs view, scrolling is enabled when there is an extensive list of clusters.
  • [studio] Wipe transitions are now supported by Studio
  • [studio] Added a scene widget. The user can now save and load a video layout or its audio mixer settings.
  • [studio] Added time interpolator in audio and video transitions.
  • [studio] Avoid monitor latency when the game drops video frames.
  • [studio] The behaviour of all the slider controllers, except the ones in Sources panel, are changed to reflect the user input immediately without releasing the mouse or finger.
  • [samples] Fixed the version of @types/bluebird in our web samples to 3.5.20, which is the last version compatible with TypeScript 2.5.2.
  • [rootd] Better CPU and memory usage.
  • [ingest] Exposed extradelay and ntp.server parameters in the Ingest template. This allows to compensate correctly for the encoding delay or clock-drift of the source.

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

Standalone player with Firefox

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.