Genvid SDK 1.0.0

Welcome to first public release of the Genvid Technologies SDK. 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 version of our SDK ready for production deployable builds are coming soon. We expect future releases will allow for a smooth transition. In the meantime, we recommend you start your integration today.

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

More to come

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

  • User authentication and validation
  • More secure handling of secret parameters
  • Support for load balancing
  • Hardware encoding
  • More video format support
  • Multi datacenter support
  • Multiple broadcast sessions management
  • Multiple audiovisual and data streams coming from the same or multiple instances
  • External audio/video streams, coming from external sources
  • Instant replay
  • Live video edition and basic composition effects
  • Offline recording and playback of data streams
  • Offline broadcast session editing
  • Unity engine integration with the Genvid SDK

Major changes in this version

Use of a proper installer

We’ve switched from a Zip archive to a proper installer.

Unification of the local script

In prevision of the cloud support, ut4.py and tutorial.py were replaced with a single script, local.py that handle both. See the Quick Tour Guide section to learn more about it.

New options for logs

With the upgrade to Nomad 0.5.1, we now have new options for following logs and getting only their tails. The nomad-ui (now called Hashi UI) interface is now able to properly check the files in the job.

Annotations and notifications support

This is the first version of the Genvid SDK providing support for annotations (punctual game events) and notifications (immediate message passing).

Commands channel

This is the first version of the Genvid SDK providing support for commands. A command can be sent from an application to the game through this channel. A new admin page is available in the tutorial sample to demonstrate this feature.

Audio support

This is the first release with audio capture and streaming. While it is off by default, it can be activated by setting genvid.encode.input.silent = false in your config file. Keep in mind that UE4 silences audio when the application is in background.

Deprecated Genvid_Connect()/Genvid_Disconnect()

Due to internal design changes, we have removed the Genvid_Connect() and Genvid_Disconnect() calls from the Native SDK. Connection to the Genvid Services is now done in Genvid_Initialize().

Changes to the Genvid_setParameter*()/Genvid_getParameter*() routines

The setParameteri() was renamed to setParameterInt(), the setParameterf() to setParameterFloat(), and setParameterp() to setParameterPointer(). The same changes were made to the getParameter*() counterparts. A new getParameterUTF8() routine was created to retrieve values as string. The various getParameter*() routines can now retrieve system values from the Consul key:value store by specifying "genvid.kv" as the stream id.

Cloud deployment support in beta

This version contains a beta version of our support for deployment on AWS. Note that support for this is available as a complement package Genvid SDK Cloud Solution, at the same location as this current SDK.

Bugs fixed in this version

Nomad-ui is now able to display logs and other files.

Thanks to the upgrade to Nomad 0.5.1, nomad-ui (now Hashi UI) can now correctly display the content of the allocation directory.

Spaces are now allowed in the binary paths

Due to a strict validation rule in Nomad, we couldn’t support spaces when specifying the path of the executables used in jobs. They fixed it, so thanks a lot to the wonderful team behind it! Now, don’t forget to put the arguments at the right place!

Fixed huge memory consumption in Native SDK

When the Native SDK would lose connection with services, it would queue up video frames and fill up virtual memory space very quickly, leading to an unresponsive system. The new behavior limits the total RAM usage, but might lead to dropped frames.

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 shouldn’t happen in production environment. The best workaround you could have for that 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 (about a minute 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 failed 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.