Skip to main content

What is a Manifest?

In the world of streaming video, a manifest is a JSON file that provides two main things:

  1. Information on a streaming video. Such as: streamName, encodings, available formats, and any metadata.
  2. A list of all of the streams available for a particular video. Specifically, these are streams with different resolutions and bitrates for the same video.

Manifests, Bitrates, and Adaptive Streaming

The stream variants included in a video manifest are essential for adaptive streaming. Leveraging the stream variants, a video application is able to apply specific streams based on real-time conditons. For example, if a user is experiencing a slow network connection the application can select a stream with a lower bitrate so that video playback can continue, albeit at a lower quality. Once that user's network connection improves, the application can upgrade to a higher bitrate and provide video playback with greater video quality.

What is a manifest url?

A manifest url is a url that points to the manifest JSON file.

Manifest Url: Basic Structure

The basic structure of the url starts with your complete baseUrl, which is system dependent. This is set under the manifestHost field in LGBX configs (more on LGBX below).


{yourProtocol}://{yourDomain}

// For example:
http://manifesthost

Live General Broadcaster eXtreme (known as LGBX) is a manifest service that (1) forms the manifest url using the configured manifestHost and (2) exposes the /live/{key}.json endpoint.


{yourProtocol}://{yourDomain}/live/{key}.json

// For example:
https://manifesthost/live/{key}.json

How is a manifest url generated by LGBX when a broadcast starts?

  • When a broadcast begins, LGBX has an API that calls out to an integration service -- for most customers this will be Live Services Integration (LSI).

  • The Request (LGBX → LSI):

    • LGBX sends the privateKey (aka streamKey) to determine if this particular privateKey is allowed to start streaming.
  • The Response (LSI → LGBX):

    • Scenario 1: The response from LSI returns a publicKey which is used for forming the manifestUrl.
    • If a publicKey is NOT returned there are two things that can happen (based on a configuration boolean called publicUuidDisabled):
      • Scenario 2: If publicUuidDisabled is true, then the publicKey will be duplicated to be used as the publicKey for playback in the manifestUrl.
      • Scenario 3: If publicUuidDisabled is false, then a random UUID is assigned as the streams publicKey by LGBX.
    • NOTE: In all of the three scenarios, when the broadcast is confirmed to be running (transcode begins) the manifestUrl is delivered back to the LSI from LGBX.

Live Services Integration (LSI) -- What does this do?

LSI provides three key features:

  • It associates an external (customer-generated) userID with an internal privateKey and an internal publicKey.
  • Provides webhooks/notifications for stream events such as: start/stop, broadcast authentication, and viewer authentication
  • Provides a list of currently running streams.

In some circumstances, a customer may be utilizing a custom integration service rather than LSI in order to accomodate additional functionality. For instance, the Umbrella application includes a simplified integration service called admin-api.

Manifest Url: keyTypes

Now that we have the basic structure for a manifest url, next is determining which keyType to use.

At , there are 4 keyTypes that can be used to generate a manifest url. If you know the keyType you are using, you can access the manifest using a query string parameter.

keyTypeDescriptionManifest Request
publicKey💫 Preferred method. Most direct way to access the data. This is used by viewers.http://{manifesthost}/live/{key}.json?lookupType=publickey
privateKeyPrimarily for “admin” reasons. This is used by broadcasters. This term is sometimes used interchangeably with streamKey.http://{manifesthost}/live/{key}.json?lookupType=privatekey
userSlug*Only available if the integration system returned this value to LGBX.http://{manifesthost}/live/{key}.json?lookupType=slug
userId*Only available if the integration system returned this value to LGBX.http://{manifesthost}/live/{key}.json?lookupType=puserid