Genvid SDK 1.27.0¶
Welcome to Genvid SDK 1.27.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 Major Fixes and Changes below for the list of new features in this release.
- Automatic synchronization between video and game-data streams.
- Video streaming to YouTube and Twitch.
- JavaScript SDK for embedded webpage.
- Multiple distributed sources of A/V and Data.
- Streaming additional arbitrary game events and notifications.
- Scalable event messaging system.
- Windows C++ API with a C# wrapper.
- Video encoding (H264 + AAC).
- Unity3D integration (Game and Management).
- Unreal Engine integration (Game and Management).
- D3D11 or raw frame video capture.
- WASAPI audio capture.
- Tools and scripts for managing your local and remote clusters, with example scripts for AWS and Azure.
- Live video editing and basic composition effects (beta).
- RTMP Ingest server (beta).
- REST API to control the services (beta).
- Metrics feed (beta).
- Load-testing library.
- Multiple integration samples.
- Extensive documentation.
Major Fixes and Changes¶
Windows Server 20H2 Update¶
Microsoft recently increased the number of devices that are approaching end of service to update automatically to Windows Server, version 20H2. This update caused some issues with versions 1.26 and older of the Genvid SDK. To correct this, we included a patch in 1.27 which is compatible with both updated and un-updated devices.
For more information about this update, visit the Microsoft page here.
Preparations for Terraform 0.14¶
In preparation for updating to Terraform 0.14 (planned for the Genvid SDK 1.28 release), we significantly cleaned up the SDK code. This Upgrade Notes for 1.28 will be cover the details of the Terraform update.
Minor Changes and Other Fixes¶
- [documentation] Improved Python classes
documentation by adding documentation on
genvid.toolbox.Backup
,genvid.toolbox.ConsulBackup
,genvid.toolbox.TerraformBackup
,genvid.toolbox.TerraformProvider
,genvid.toolbox.VaultBackup
, andgenvid.toolbox.VersionBackup
. - [sdk] Added broadcast errors report to the encoder’s health check.
- [sdk] Fixed an issue where
frontend.gcl.sent
metrics were not sent during the SDK initialization. - [sdk] Fixed an issue where audio capture does not output frames at the desired FPS.
- [toolbox] Added an exception when the s3 images bucket-configuration is missing.
- [toolbox] Added log rotation settings to Consul/Vault/Nomad running on Windows.
- [toolbox] Removed parameter
stdout
fromgenvid.toolbox.LocalService
methodprint_log
. The output and error logs are now written in the same file in the log directory. - [toolbox] Deprecated version parameter in TerraformProvider.
- [gvencode] Fixed an issue where gvencode would fail to stream when the sync encounters an encoder failure.
- [bastion-api] Improved UI by replacing the textbox with a combobox to input the filename while creating new logs, allowing you to either select an option from the dropdown list or enter a custom name.
- [bastion-api] Fixed an issue where global Terraform settings were passed as input variables to a Terraform module even when those variables are unknown to the module.
- [bastion-api] Improved error message when loading a profile fails by exposing the origin of the error.
- [bastion-api] Improved UI by assigning a fixed minimum height to the property boxes on the Terraform settings page so the layout remains uniform even after a label is added at the bottom.
- [bastion-api] Deprecated
Provider.Meta
field in Bastion API. - [bastion-api] Moved
Provider.Meta.Alias
field toProvider.Alias
in Bastion API. - [bastion-api] Deprecated
Provider.Meta.Version
field in Bastion API. - [aws] Removed unused variable
cidr
from Terraform moduleminimal_cluster
. - [aws] Removed unused variable
game_az
from Terraform moduleminimal_setup_ami
. - [aws] Removed unused variable
region
from Terraform modulebasic_cluster
and submodulecluster/sample
. - [aws] Removed unused variable
user
from Terraform submodulegenvid/aws
. - [aws] Removed unused variable
validation_method
from Terraform modulesminimal_cluster_alb_ssl
andbasic_cluster_alb_ssl
. - [aws] Renamed
ami_prefix
variable in AWS clusters togame_ami_prefix
. - [aws] Added
server_ami_prefix
variable to all AWS clusters. - [azure] Removed variable
trusted_security_groups
fromazurerm_basic_cluster_alb_ssl
andazurerm_basic_cluster
modules - [azure] Added variable
toolbox_location
toazurerm_basic_cluster
module. - [azure] Added
server_image_prefix
variable to all Azure clusters. - [terraform] Changed the default value for the
subdomain_name
to null on AWS. For more information, see basic/basic_cluster_alb_ssl and basic/minimal_cluster_alb_ssl. - [terraform] Changed the default value for the game
AMI from
genvidtech
todefault
in AWSbasic_cluster_alb_ssl
andminimal_cluster_alb_ssl
to match Toolbox default behavior. - [aws, azure] Added new tags genvid:terraform-module-name and genvid:terraform-module-version to all clusters.
- [bastion-ui] Improved UI on Terraform Configuration page by displaying the correct button under Job Control column without showing the transition of button state on page reload.
- [bastion-ui] Fixed an issue on Terraform
Configuration page where the status of a cluster was displayed as
DOWN
instead ofBUSY
while the module import was running on that cluster. - [bastion-ui] Improved UI for the custom_tags variable in Terraform settings.
- [bastion-ui] Fixed an issue where a misleading warning message was displayed when validation of the Bastion ID triggered an error.
- [bastion-ui] Improved UI by adding a warning for min & max character limit for Bastion ID and Cluster ID.
- [consul] Upgraded Consul server and client from 1.8.4 to 1.9.3.
- [eventsd] Fixed possible read/write issues in eventsd on a NATS reconnection that could potentially create a race condition.
- [sdk, composed, gvencode] Fixed an issue where the audio/video streaming would not work if Windows sleep time resolution period was too high.
- [sdk, composed, gvencode, gcl] Improved metrics network-usage by packing them into a buffer before sending them.
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
totrue
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:
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:
- Opoen the Azure UI.
- Upload your image manually.
- 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.
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 for more information on Azure naming conventions.
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.