Genvid SDK 1.20.1

Welcome to Genvid SDK 1.20.1. This is a bug fix release. See the previous release notes for more information on the 1.20.0 release.

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

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.

Minor changes and other fixes

  • [api] Augmented the amount of information included in the HTTPs repsonses of our APIs.
  • [api] Added 3 new metrics to the command API.
  • [bastion-ui] Spinning loading icon has been replaced by an error message when trying to access a cluster that doesn’t exist.
  • [bastion-ui] Fixed refresh rate for switching between clusters in quick succession.
  • [cluster] Added an error message to let the user know that the cluster doesn’t exist.
  • [cluster] Added message to notify user about bad connection. The system will try to subscribe to the event again after 10 seconds.
  • [composed] Improve ComposeD running stability.
  • [consul] You can now specify a custom gvencode docker image file to load using Consul key genvid/encode/gvencode-image.
  • [consul] You can now specify a static Leaf port using Consul key genvid/leaf/port.
  • [curl] Fixed a SIGSEGV error that occurs a crash in composed.
  • [genvid-ami] genvid-ami setup will now use the ‘ami_version’ Terraform variable value by default instead of the version of the toolbox.
  • [gvencode] Fixed the metrics “genvid.gvencode-compose.framesizesent” to return returne proper value.
  • [ingest] Streams running along side ingest will now be able to recuperate when their process relaunches.
  • [ingest] Stopping OBS streams no longer freezes GVencode.
  • [leafd] genvid.leafd.connection.current is now correctly updated as a gauge.
  • [sdk] Fixed issues with some annotations never being sent due to dependencies with the timecode.
  • [sdk] Fixed streaming issues for Unity/Unreal editor when performing start/stop multiple times.
  • [sdk] Fixed an issue during the terminate process that was causing notifications and events to not work properly in editor mode for Unity and Unreal.
  • [sdk] Bastion/Cluster UIs logs will no longer show a panic stack trace when getting the log allocation fail.
  • [sdk] Improved task management during uninstallation.
  • [sdk] Improved exception error message if the bastion’s bucket is missing.
  • [sdk] Settings affected by jobs now revert to their default values when initiating an unload.
  • [sdk] Fixed Audio/Video problems due to some Data Streams timecodes that are from the past.
  • [sdk] Fixed the Processing Start of streams.
  • [sdk] Fixed a memory leak when the video context changes.
  • [services] The internal token manager is now cleaning up its expired tokens, avoiding a slow but steady memory leak in the rootd process.
  • [services] Now, all Go services use the nearest instance of a service to connect to.
  • [studio] Fixed Studio source delay that occured during a loss of synchronizaton.
  • [studio] Fixed GVencode crashes when transitioning between sources in Studio.
  • [studio] Studio composition has been improved by running some tasks in parallel.
  • [studio] Removed save button when switching to monitor.
  • [studio] Program and Preview windows in Studio no longer flicker.
  • [studio] Rapid cutting between scenes will no longer crash gvencode.
  • [studio] The scene’s live stream indicator now displays properly after a page refresh.
  • [studio] Only one ‘cut’ command is sent to the backend after changing scenes in live composition mode.
  • [toolbox] AWSTool.update_s3_images will no longer raise an exception about bucket quota if the bucket to be used already exists.
  • [toolbox] Changed the default timeout value of BaseTool.kill_process_tree to 15 seconds (up from 5).
  • [toolbox] Modified the behavior of kill_process_tree to recursively kill the children of the root process.
  • [toolbox] BaseTool.rmdir default value for onerror was changed to a method which will retry to remove the file for at least 1 minute before giving up.
  • [toolbox] Runtime.run_nomad_jobs now wait for all Nomad jobs to terminate before returning (or log an error after 15 seconds).

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

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.

A blocked transition can’t be reapplied in Studio.

When a transition is requested in Studio while another transition is already in progress, GVEncode blocks the newly requested transition to prevent undefined behaviour. However, Studio is not aware of blocked transitions and modifies its state as if the transition happened. Trying to reapply that same transition will then not work, since Studio thinks it is already in that state.

If you encounter this issue, we recommend cutting to another transition, then cutting again to the previously blocked transition.