Genvid SDK 1.3.0

Welcome to Genvid Technologies SDK 1.3.0. While this release is not yet ready for production deployment, it is robust enough today to allow developers to start developing a full Genvid Streaming Experience into their existing projects.

We are hard at work, and a version of our SDK ready for production deployable builds is coming soon. We expect future releases will allow for a smooth transition. In the meantime, we recommend you start your integration today using our local development environment.

Current functionalities

We currently deliver core functionality which allows you to run your game and stream it to YouTube, along with extra game events and messaging to make it a true Genvid Streaming Experience.

  • D3D11 video capture
  • WASAPI audio capture
  • Video encoding (H264 + AAC)
  • Video streaming to YouTube
  • Streaming of additional arbitrary game events and notifications
  • Scalable event messaging system
  • Automatic synchronization between video and game data streams
  • Native and Web SDK for easy integration
  • Sample tutorial project
  • Sample Unreal Engine 4 project
  • Exhaustive documentation
  • Local deployment tools and scripts
  • Cloud deployment tools and scripts (still in beta)
  • Unity engine integration with the Genvid SDK (still in beta)

More to come

Additionally, we are working on a full, new feature pipeline to be released after the initial launch:

  • A bastion host to manage your clusters directly on the cloud
  • More secure handling of secret parameters
  • User authentication and validation
  • More video format support
  • Hardware encoding
  • Multi datacenter support
  • Multiple broadcast session management
  • Multiple audiovisual and data streams coming from the same or multiple instances
  • Support for audio/video streams coming from external sources
  • Instant replay
  • Live video editing and basic composition effects
  • Offline recording and playback of data streams
  • Offline broadcast session editing

Major changes in this version

New Experimental Genvid UI

This release introduce a new web interface with a web-based API, including a Python wrapper. This will allow you to configure, manage and monitor your cluster from anywhere.

Changes in project file format

The project files have a slightly different format. The image and binary elements have been replaced with a single config element which is used to populate the key-value store. For more details, see the upgrade section.

Access to raw data in the Web API

In the Web API, the IDataStreamFrame and IDataNotification have been modified to give access to a rawdata member of type ArrayBuffer. This data is meant to circumvent shortcomings when the source data is encoded as UTF-8, which ended up garbled due to the fact that browsers use UTF-16 for their internal representations of strings. The new rawdata can be converted to a string by calling either genvid.UTF8ToString() or genvid.UTF16ToString(), depending on the source encoding.

While the old data member is still available, it is considered deprecated and will be removed in a later version.

Invalid video dimensions will now get clipped or padded

Previously, setting inconsistent width and height in the config file would lead to no video being streamed. The Native SDK is now more robust, but while video should now always stream, the final outcome will result in either a cropped video or black padding to the right and bottom of the image. When such a situation happens, a warning message will get logged because WebGL data will no longer properly align with the video feed.

This should allow editor windows in both Unreal Engine and Unity to at least show some video data, albeit with quite important shortcomings.

Minor changes and other fixes

  • [unity] Rework the website and fix some leaks with the getParameterUTF8() function.
  • [events] Fix a race condition in events system loading.
  • [samples] The samples no longer build the local web site before creating the Docker image.

Known bugs

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

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 should not happen in a production environment. The best workaround is to not allow Windows to go to sleep when you are running the service, or simply to restart the service with a local.py reinstall (unfortunately, local.py restart is not sufficient).

The YouTube stream isn’t properly reset after a manual restart

If the services are stopped and restarted shortly after, the YouTube streaming service will consider it as part of the same streaming session. Although a desirable effect most of the time, this could lead to showing up the previous session due to the long latency between the services and the actual view. A future version will provide a proper way to request a new stream, but until then, you can either reset your stream key from the YouTube dashboard or simply wait a little longer (a few minutes should be enough) before restarting the service.

Audio captures microphone, or loops infinitely

Since we capture audio with a loopback device, every sound going through the machine running the game will get captured. This not only includes system alerts or microphone input, but it also includes your web browser. When viewing your game stream using the same machine which is running the game, the game will also capture its own audio stream with ~10s of latency, yielding some echo with progressively worse sound quality (since it is compressed every time it is streamed). The recommended workaround is to disable audio altogether (genvid.encode.input.silent = true in your config file), or to use a separate machine to observe the website. These issues are moot when the game is deployed in a cloud infrastructure.

Audio is out of sync

The audio might be out of sync by a slight margin. We intend to fix this in an upcoming release. In the meantime, you can add delay to the video by setting a video delay in your config file; the default value is genvid.encode.output.videodelay = "1250ms" (the format is a string ending with ms).

AWS servers are not working properly after a shutdown

If you shut down the servers, they lose their public IP addresses and the system fails to take the new addresses into account. You must reinstall the servers by doing a cloud.py reinstall which takes a very long time. We are currently working on a solution that will be available on the official release of the cloud support.

Video capture is not supported in Unity editor

If you are running the stack and are attempting to start the application inside the Unity editor, you might encounter some issues. We recommend for now to run the stack only when your application is built as an executable file.

Small hang can be noticed when losing Unity application focus early

If you are running your Unity application with the stack and decide to proceed to a different window during the splash screen, you are bound to get a small hang several seconds later. This hang disappears when moving the mouse. This hang doesn’t affect the video, audio and data capture. We recommend to stay focused on the window around ten seconds after the application is launched to avoid this issue.