Millicast video streaming

In Review - feature maturity not classified, documentation in progress and likely to change

Overview

Millicast is a third-party streaming solution offered by Dolby.io which is an e2e solution for recording, encoding and showing live video streams in the experience.

Basic setup

Follow the steps here to get a video feed running in-game.

Multi-stream support

This is presented as example usage but is not officially supported by MSquared. Please consider this as highly experimental. We advise you to strongly consider if this is appropriate for your project before implementing more than one Millicast Stream.

Advanced - Implement Millicast In Your Own Blueprint

Millicast Control Config

Your Stream Name and Account Id can be found on Dolby.io

Stream Url should be set to: https://director.millicast.com/api/director/subscribe

Example:

Screen Control

If youโ€™re using BPM_VideoPlayer instead, you may have to check your screen controls and make sure the โ€œMillicastโ€ option is selected.

Stream Config

Note - When streaming, you have to select either vp8 or vp9 codec. h264 is not supported by Unreal.

The main parameters regarding performance are:

Output Tab

Video and Audio Bitrate will determine the amount of data per second which will be transferred to the client.

Note that bitrate numbers are Not an exact science, and the server will internally modulate this number to better fit the connection, so the resulting bitrate can be much higher than that. What we know is that those numbers will still influence the stream in some way. More of this in recommended settings.

Encoder is usually never changed. Has to be noted that using H264 currently has problems with Millicast for Unreal.

Encoder Preset can change the how quick the image gets encoded/decoded in expense of image quality.

Video Tab

Output (Scaled) Resolution is the important one as it is the resolution the client will receive, scaled from the initial input.

Downscale Filter states how precise the scaled image will be when generated. Unless specific needs, a Bicubic should be fine.

Common FPS Values are the target frames per second the server will send to the clients. There is currently no point to go higher than 30 as the game instances we use are capped at 30 FPS. Also to note that this parameter highly influences performance.

The following values are to be taken as an example, and to consider if the hardware to support is down to the level of a G6_Half or lower budget.

Going above performance guidelines can cause lower hardware clients to crash due to Millicast accumulating too much data in RAM.

Having multiple screens in the scene will add little performance loss. Most of Millicast performance cost is given by each data stream.

Other than the supported hardware, will depend on how many streams are intended to be used. Only the most influential parameters are named, the rest is at user choice:

Budget for pixels: as many as a resolution of 1920x1080

Budget for bitrate: 4500 bps

FPS: 30 or lower

Example with a single stream

Output (Scaled) Resolution: 1920x1080

Bitrate: 4200 bps

FPS: 30

Example with two streams (for each stream)

Output (Scaled) Resolution: 1280x720

Bitrate: 2100 bps

FPS: 30

Example with three streams (for each stream)

Output (Scaled) Resolution: 1280x720

Bitrate: 1400 bps

FPS: 24

Monitor Settings From Client

From a non-shipping client build it is possible to print the stats for the current active Millicast streams in the scene by using the command:

M2.Millicast.PrintStreamsStats

which, for each active stream, will print the following info:

FAQ

Q: I want to stream pre-recorded video, should I use millicast?

A: No, please use the lightweight Streaming Video Player instead.

Q: I have added multiple Millicast screens and the performance is poor, what should I do?

A: Performance will decrease with each additional video played in your world. Please re-consider if multiple Millicast Screens is an appropriate solution to your problem.

Last updated