# The `Manifest`

This directory defines and exports the `Manifest` class, which is a central data structure
in the RxPlayer's code.

A `Manifest` describes a single content:

- which tracks it contains
- which quality it has
- what are its minimum and maximum seekable position
- if it is a live content or a VoD content
- if it has to be updated
- and so on

This structure is used heavily by the rest of the RxPlayer.

## Properties of the `Manifest` structure

The `Manifest` structure is highly hierarchical, it can be resumed as such

```
  +-----------------------------------------+
  | Manifest                                |
  |  +------------------------------------+ |
  |  | Period                             | |
  |  |  +-------------------------------+ | |
  |  |  | Adaptation                    | | |
  |  |  |  +--------------------------+ | | |
  |  |  |  | Representation           | | | |
  |  |  |  |  +---------------------+ | | | |
  |  |  |  |  | RepresentationIndex | | | | |
  |  |  |  |  |  +----------------+ | | | | |
  |  |  |  |  |  | Segment        | | | | | |
  |  |  |  |  |  |                | | | | | |
  |  |  |  |  |  +----------------+ | | | | |
  |  |  |  |  +---------------------+ | | | |
  |  |  |  +--------------------------+ | | |
  |  |  +-------------------------------+ | |
  |  +------------------------------------+ |
  +-----------------------------------------+
```

For example a `Manifest` structure contains multiple methods and properties, one of which
is `periods`, which contains `Period` classes, etc.

Here is the rough concept behind each of those structures:

- `Manifest`: properties about the whole content.
- `Period`: properties concerning only a time-delimited sub-part of a content.
- `Adaptation`: tracks (either audio, video or text) available in a given `Period`.
- `Representation`: Different qualities available in the parent `Adaptation`
- `RepresentationIndex`: Logic allowing to retrieve the list of segments for the parent
  `Representation`. That logic depends on the "transport" used (e.g. Smooth, DASH etc.)
- `Segment` represents a single segment from the linked `Representation`, and has been
  generated by the `RepresentationIndex`.
