# 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`.
