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.

Current platform (v2): don't build this URL yourself

On the current API, the stream detail response returns manifestUrl as a complete URL — pass it to the playback SDK verbatim. The manifestHost / /live/{key}.json construction described below applies to the legacy v1 (LGBX) pipeline only and produces broken URLs against v2. See Manifests for the current contract.

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.

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