What is a Manifest?
In the world of streaming video, a manifest is a JSON file that provides two main things:
- Information on a streaming video. Such as: streamName, encodings, available formats, and any metadata.
- 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(akastreamKey) to determine if this particularprivateKeyis allowed to start streaming.
- LGBX sends the
-
The Response (LSI → LGBX):
- Scenario 1: The response from LSI returns a
publicKeywhich is used for forming the manifestUrl. - If a
publicKeyis NOT returned there are two things that can happen (based on a configuration boolean calledpublicUuidDisabled):- Scenario 2: If
publicUuidDisabledistrue, then thepublicKeywill be duplicated to be used as thepublicKeyfor playback in the manifestUrl. - Scenario 3: If
publicUuidDisabledisfalse, then a random UUID is assigned as the streamspublicKeyby LGBX.
- Scenario 2: If
- 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.
- Scenario 1: The response from LSI returns a
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.
| keyType | Description | Manifest Request |
|---|---|---|
| publicKey | 💫 Preferred method. Most direct way to access the data. This is used by viewers. | http://{manifesthost}/live/{key}.json?lookupType=publickey |
| privateKey | Primarily 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 |