Genvid Ingest
The Genvid Ingest shows you how to add an RTMP Ingest server in your project using gvencode, which allows you to work with an external A/V source.
Note that you can only add audio and video streams to the composition. The Ingest server can’t receive data streams or notifications, nor can it send commands or events.
Note
Changing the video resolution while streaming is not supported.
For this example, we will start by setting up the Genvid Studio Service with an instance of the DirectX Cube sample. We will add the second instance with the Ingest server and a local instance of OBS Studio (version 20 or later) connected to it, providing us a second source for a webcam.
Configure the Cluster
Follow the Genvid Studio Service instructions to start all the services.
Verify everything works correctly.
Click Stop All to stop all services.
Load the Ingest configuration:
py ingest.py load
Confirm the Ingest job is present on the Cluster UI.
Click the Start All button to restart the services.
Wait for the Ingest link to turn blue.
Right click the Ingest link and select Copy link address.
You’ll need the link address to configure OBS.
Configure OBS Studio
Download and install OBS Studio.
Configure it and select the scene you want to stream.
Click File > Settings.
Select Stream.
Select “Custom” in the Service field.
Paste the Ingest link in the Server field.
Paste the Stream Key of your streaming service.
It should start with
rtmp://
.Important
If your browser added
unsafe-
to the address, delete it from the URL.Select the following (recommended) settings:
Output (Advanced) |
Video Bitrate |
2000 to 6000 kbps Dependent on your stream quality (resolution and FPS). |
Encoder |
x264 or h264 |
|
Rate Control |
CBR |
|
Profile |
Baseline, Main, High |
|
Audio Bitrate |
128 to 320 Kbps |
|
Audio |
Sample Rate |
44.1khz or 48khz |
Channels |
Mono or Stereo |
|
Video |
Base (Canvas) Resolution |
Same as the game. |
Output (Scaled) Resolution |
Same as the game. |
|
Downscale Filter |
Lanczos (sharpened scaling, 32 samples). |
|
Common FPS Values |
Same FPS as set in Genvid stack (framerate of the video stream = 30 or 60). |
|
Advanced |
Renderer |
Direct3D 11 |
Color Format |
NV12 or I420 |
|
YUV Color Space |
601 or 709 |
|
YUV Color Range |
Partial or Full |
Now you can start streaming.
Note
The Genvid stack is based on a “first come, first serve” principle when starting the jobs. To ensure that the OBS stream is received properly, it is recommended that you start the Ingest job before you start streaming from OBS.
Start Jobs in this order: #. Services #. Studio #. Ingest #. Web #. Open OBS #. Start the game job when you are ready to stream the game.
Important
Don’t start the game until you see the OBS stream in Studio.
Compose the Stream
Go back to Cluster UI
and click the Studio
link. Your stream is now the
second source. See the Studio website for information
on working with your broadcast stream.
Streams Timing
This section covers the timing of audio / video streams when several sources are involved in a production.
The following diagram shows the deployment of a production with a first source that shows the game and a second source that contains the audio and video of a commentator. The second source can be used in PIP, voice-over, or as is. This diagram also shows that a director makes the realization of the broadcast with the Genvid Studio.
![Game deployement diagram](../../_images/ingest_timing-diag.png)
Fig. 64 Diagram of a broadcast deployment with a video game and a commentator
Any processing on a stream results in a delay on the stream. This delay is mainly due to the encoding, decoding, and transmission of streams. The typical delay between the gamer and the director is about 15 frames or 0.5 seconds. The delay between the commentator and the director is about 3 seconds.
You can adjust the delay using the controls in the Sources section of the Studio website.
![Source delay adjustment](../../_images/ingest_source-delay.png)
Fig. 65 Source Delay adjustment control
Script Reference
Ingest sample script
usage: ingest.py [-h] [--loglevel {DEBUG,INFO,WARNING,ERROR}]
[--logformat LOGFORMAT] [-c CLUSTER_ID]
{load,unload} ...
Positional Arguments
- command
Possible choices: load, unload
Named Arguments
- --loglevel
Possible choices: DEBUG, INFO, WARNING, ERROR
Set the script log level
- --logformat
Set the script log format
- -c, --cluster_id
The cluster id. If not set with the command line, uses the environment variable GENVID_CLUSTER_ID if it exists. Otherwise defaults to ‘local’
Default: “local”
Sub-commands
load
Load the specified target definition in the cloud
ingest.py load [-h]
unload
Unload the specified target definition in the cloud
ingest.py unload [-h]