Genvid Forum

Genvid Technologies

Genvid SDK 1.26.0

Genvid SDK 1.26.0

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

Minor Changes and Other Fixes

  • [documentation] Added missing metrics, description details and new unit column.
  • [documentation] Corrected the output example for the Services endpoint.
  • [documentation] Added metrics in the GCL table of the documentation.
  • [documentation] Improved metrics documentation for the SDK services.
  • [sdk] Renamed 2 metrics sent by GVEncode to correct typos:
    • compostionssent is now compositionsent.
    • compostionssentsize is now compositionsizesent.
  • [sdk] Fixed issue where the metrics delayedframe and delayedframesize sent incorrect values.
  • [sdk] Improved error messages by converting error code to human readable errors.
  • [sdk] Removed the Stream Enabled option from the Cluster-UI settings.
  • [sdk] Improved SDK log readability about stream and annotation format.
  • [sdk] Fixed an issue where retrieving a key in Consul failed when a parsing error occurs.
  • [sdk] Updated audio stream granularity to be automatically set to the sampling rate when WASAPI is enabled.
  • [sdk] Fixed missing logs report when the DirectX 11 swapchain or texture returned an error.
  • [sdk] Fixed an issue where composeD and the native SDK would reconfigure their NATS address for no reason.
  • [gvencode] Fixed an issue when GVEncode would crash on initialization.
  • [gvencode] Fixed an issue where the audio buffer occasionally reported an incorrect time in the logs.
  • [gvencode] Fixed an issue in composition mode where sending audio data before video data results in Audio/Video desync.
  • [gvencode] Fixed a bug causing a freeze in the game data at loading time when using picture-in-picture or chromakey.
  • [gvencode] Fixed a bug causing invalid composition data when in picture-in-picture or chroma key.
  • [composed] Fixed an issue where composeD would send data frames while no appropriate A/V stream was present.
  • [composed] Fixed an issue where the data would be permanently out of sync after changing a source delay.
  • [composed] Fixed an issue where composeD would crash on startup with JSON errors.
  • [composed] Fixed an issue where sync and composition streams were present in annotation causing parsing errors.
  • [rootd] Added metrics for the rootD service.
  • [rootd] Changed the Session: read error:read tcp : i/o timeout from an error to a warning.
  • [rootd] Added a filter to prevent invalid entries from being added to the data cache.
  • [rootd] Added better error handling for communication with composeD. (More specifically, disconnecting on protocol errors and ensuring there is only have one session allowed at a time.)
  • [rootd] Modified rootD to disconnect a leaf that becomes unresponsive.
  • [rootd] Changed metrics for StreamFormat messages tagged with type=notifications to type=format. (This only affects StreamFormat messages signalling the end of a stream.)
  • [rootd/leafd] Fixed an issue causing rootD/leafD to potentially crash when the annotations cache contained invalid data.
  • [rootd/leafd] Fixed a race condition that could lead to connection problems between composeD, rootD, and leafD.
  • [leaf/web] Changed the WebSocket authentication process between the webclient and the server. The authentication information is now passed through the WebSocket URL and any error is returned through the WebSocket control message, closing the WebSocket at the same time.
  • [leafd] Optimized the leaf CPU usage by encoding less when sending messages.
  • [studio] Fixed an issue where the default wipe transition was applied instead of the one in the scene when cutting between two scenes that both a custom wipe transition.
  • [studio] Converted Studio to be part of the services jobs and removed the Studio Sample.
  • [studio] Fixed an issue at initialization where the Studio audio mixer state wasn’t representing the actual composition.
  • [studio] Fixed an issue where the streamed scene didn’t match the one in program after reloading the page.
  • [studio] Fixed an issue where Studio would generate transition errors on startup and when modifying composition values.
  • [ue4] Added Unreal Engine 4.26.1 Genvid plugin support.
  • [unity-plugin] Fixed compilation errors in Unity when building a plugin with platforms other than Windows.
  • [unity editor plugin] Fixed an issue where doing a repaint in the editor GUI threw an exception.
  • [ut4-sample] Fixed a bug where setting up the environment for building Unreal Tournament 4 would fail due to the the plugin symlink pointing on an invalid location.
  • [cube sample] Fixed an issue where the cube halos would no longer be synchronized after refreshing the web client page with two cube sample sources streaming.
  • [cube sample] Fixed an issue where the admin reset button was only resetting the position but not the direction, rotation, and speed of the cubes.
  • [loadtester] Fixed a build issue with the loadtester sample.
  • [remotegui] Added data streams information along with audio and video streams in remoteGUI.
  • [bastion-api] Added a retry mechanism to reconnect the cluster API to its cluster when the IPs change. (For example, when the cluster is updated.)
  • [bastion-api] Removed the cidr variable from AWS clusters.
  • [bastion-api] Added the variable subnet_cidr_block_size for setting the size of the CIDR blocks used in subnets.
  • [bastion-api] Fixed a subnet collision bug when changing the number of availability zones in AWS.
  • [bastion-api] Updated importing Terraform modules into Bastion to automatically populate the input variable bastionid with that bastion server’s name.
  • [bastion-ui] Fixed UI for map variables in the Terraform settings.
  • [bastion-ui] Disabled the command buttons ( Plan Apply , Destroy , Init , etc.) for cloned clusters on the Terraform Commands page. This prevents users from using those
    commands before the cluster finishes initializing.
  • [bastion-ui] Added a warning message to inform users when the command buttons on the Terraform Commands page are disabled while a cluster initializes.
  • [bastion-ui] Removed the dropdown menu for selecting the type of variable for maps/lists in the Terraform Settings UI. The variable type field now only accepts strings.
  • [bastion-ui] Updated the max limit for cluster names to 64 characters for cluster creation.
  • [bastion-ui] Removed the YouTube-specific VideoID field from the Cluster UI stream settings and labelled encode.stream.channel with the selected streaming-service terminology. (See the YouTube documentation for more information.)
  • [bastion-api, consul-api] Fixed race condition in consul-template integration.
  • [cluster-api] Added a new API GET /v1/settings/schema <api_settings> to fetch the Genvid Settings schema for future extension.
  • [toolbox] Added a new region parameter for the genvid-sdk upload* and samples upload-images commands.
  • [toolbox] Updated genvid.toolbox.SDK.load_config to return the configuration after loading.
  • [toolbox] Added a dryrun parameter to both genvid.toolbox.SDK.load_config and genvid-sdk load-config that prevents automatically setting the configuration after loading it.
  • [toolbox] Fixed a bug causing genvid-sdk load-config <file> to not load on Python 3.5.
  • [aws] Renamed the Name tag to genvid:cluster-name. You need to update your filters to reflect this. (See the upgrade notes
    for more information.
  • [aws] Removed NAME from AWS resources.
  • [aws] Updated tags for AWS resources with genvid:cluster-name and genvid:creator-service-id for identification.
  • [aws] Removed index offset from AWS numbered resources. They now start counting from 0 instead of 1.
  • [aws] Updated clusters to support names up to 256 characters.
  • [aws] Added variable reusable_delegation_sets_id in
    minimal_cluster_alb_ssl. This variable allows users to specify the reusable delegation set they wish to use. If none is provided, none are sent to AWS.
    You can send the reusable delegation set ID using the new variable reusable_delegation_sets_id in minimal_alb_ssl.
  • [azure] Added a generic name to all resources.
  • [azure] Updated tags for AWS resources with genvid:cluster-name and genvid:creator-service-id for identification.
  • [azure] Removed index offset from AWS numbered resources. They now start counting from 0 instead of 1.
  • [azure] Clusters now support names up to 256 characters.
  • [azure] Updated the name of the resource group in Azure to always be either the value of resource_group_name variable (if it is filled in by user) or it will be bastionid-clustername.
  • [terraform] Added the new custom_tags setting for all clusters to let users add custom tags to their cluster resources.
  • [terraform] Removed Terraform variables Stage and Namespace.

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

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.

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.

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.

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:

System Message: WARNING/2 (releases/release-1.26.0.rst, line 419)

Cannot analyze code. No Pygments lexer found for “none”.

.. code-block:: none

   The requested size for resource 'XXXX-game-1' is currently not available in location 'XXXX'

As a workaround, 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.

Streaming to an iOS device with the Standalone player is currently not functional.

Streaming to an iOS device (iPhones and iPads) with the Standalone player is
currently not functional. This issue will be fixed in a future release.

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.

Links for a local cluster are disabled in RemoteGUI interface.

When using RemoteGUI for a local cluster, opening a tab by clicking a link
from the Composition, Encoding, or SDK GUI buttons disables the link
(indicated by it turning from blue to red). The link will be re-enabled when
you close the corresponding tab.

When changing Availability Zones in Azure, resources need to be destroyed and rebuilt.

When changing AZs in Azure, deleting the public IP might fail due to it not
being detached from the virtual machine. This is a bug in the Terraform
provider. See the issue on the Hashicorp Github for more information.

As a workaround, manually detach the offending public IPs from the virtual
machines in the Azure portal.

Toolbox is not fully compatible with Python 3.9.x.

The Genvid Toolbox is not fully compatible with Python 3.9.x at this time. To
avoid problems using our toolbox, we recommend you downgrade Python to version
3.8.x.

genvid-sdk upload-images-sdk command fails to upload the Docker image on Azure Cloud.

Some Docker images can’t be uploaded to Azure Cloud using the genvid-sdk upload-images-sdk command due to large sizes. (You will get an SSL error and
a Max retries exceeded message.)

As a workaround:

  1. Opoen the Azure UI.
  2. Upload your image manually.
  3. Run genvid-sdk upload-images-sdk again.

Performance issue when using the Chroma Key Filter.

When using the Chroma Key Filter, we recommend using a c5.4xlarge or better
for the encoding machine. Less powerful instances may force the system to
accumulate some frames in memory, leading to out-of-memory conditions.

The amount of frames accumulating depends on many factors–the encoding
parameters, the source FPS, the amount of variation between the source images
content, the richness of their content, etc. For more information on
monitoring the memory usage of GVEncode, see the Hashicorp
[documentation][4].

[4]: <https://learn.hashicorp.com/tutorials/nomad/web-ui-workload-
info?in=nomad/web-ui#inspect-an-allocation>

Required to manually remove the subdomain NS record when updating the subdomain on an existing AWS cluster.

When creating an AWS cluster using basic_cluster_alb_ssl or
minimal_cluster_alb_ssl, the domain and subdomain are provided. When
updating an existing cluster’s subdomain, the route53 NS record for the
previous subdomain needs to be removed manually from the main domain. This is
due to how the NS record is handled within our Terraform.

Unable to delete subnets in cluster basic_cluster_alb_ssl using AWS.

When changing subnet_cidr_block_size in basic_cluster_alb_ssl, decreasing
the number of AZs, or reordering existing AZs, the cluster will get stuck
trying to delete the subnets.

Reapplying the configuration won’t resolve the issue.

Workaround: delete and recreate the cluster.

Bastion cluster Settings page modal window not closing.

In the Bastion Settings page for a cluster, the Properties modal
window for custom tags doesn’t close when you click outside of it.

As a workaround, click on Properties again to close the modal window.

Limitations

Loading configurations in the incorrect order can overwrite values.

Whether you’re using SSL on a cloud or a local cluster, if you load
youtube.sample.hcl before loading the web sample, the web sample will
overwrite the value associated with the embed_ssl from the web.hcl file.

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.

Studio can’t 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.

Sending input from multiple Studio windows to one control is not recommended
until we resolve the issue.

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 SDK clamps framerates under 1.0.

To prevent issues, we raised the lower limit for the framerate to 1.0 for any
stream. The SDK will clamp the value to 1.0 FPS if it’s less than 1.0.

Default value for an Azure resource group name may be too long.

If no values are provided for the variable resource_group_name, the value is
set to a combination of {bastionid}-{clustername}. This can yield names
longer than 64 characters, which is the maximum number of characters allowed
for an Azure resource group name.

To avoid this problem, always provide a value of 64 characters or less for the
variable resource_group_name.

See the [Azure Github][5] for more information on Azure naming conventions.

[5]: <https://github.com/toddkitta/azure-
content/blob/master/articles/guidance/guidance-naming-conventions.md>

AWS clusters subnet collision error.

If you reduce the subnet_cidr_block_size and increase the number of AZs for
an AWS cluster at the same time, it causes a subnet collision error.

If you encounter this issue, reapply the configuration to resolve it.

No new tags on Azure disk when updating a cluster.

When applying new tags to Azure clusters, tags will not be applied to disk
unless the virtual machine instance that owns the disk gets recreated during
the apply process.

As a workaround, delete and recreate the cluster to resolve the issue.

Cluster names are limited to 64 characters.

Cluster names are limited to 64 characters due to limitations with the file
system in Windows. Things like the system’s username and cluster name factor
into the max number of characters of the file directory.

While it is technically possible to go above 64 characters, the results can be
unpredictable.