# `Membrane.HTTPAdaptiveStream.Manifest.Track.Config`
[🔗](https://github.com/membraneframework/membrane_http_adaptive_stream_plugin/blob/v0.21.0/lib/membrane_http_adaptive_stream/manifest/track.ex#L13)

Track configuration.

# `encoding_t`

```elixir
@type encoding_t() :: {:audio, String.t()} | {:video, String.t()}
```

Track configuration consists of the following fields:
- `id` - identifies the track, will be serialized and attached to names of manifests, headers and segments
- `track_name` - the name of the track, determines how manifest files will be named
- `content_type` - either audio or video
- `header_extension` - extension of the header file (for example .mp4 for CMAF)
- `segment_extension` - extension of the segment files (for example .m4s for CMAF)
- `segment_duration` - expected duration of segments.
- `partial_segment_duration` - expected duration of each partial segment, nil if not partial segments are expected
- `header_naming_fun` - a function that generates consequent header names for a given track
- `segment_naming_fun` - a function that generates consequent segment names for a given track
- `target_window_duration` - track manifest duration is kept above that time, while the oldest segments
            are removed whenever possible
- `persist?` - determines whether the entire track contents should be available after the streaming finishes
- `mode` - track's mode that dictates type of metadata inserted into playlist's manifest
- `encoding` - keyword of strings representing encoding of content_type
- `resolution` - resolution of video stream
- `max_framerate` - maximal framerate of video stream

# `t`

```elixir
@type t() :: %Membrane.HTTPAdaptiveStream.Manifest.Track.Config{
  content_type: :audio | :video,
  encoding: [encoding_t()] | [],
  header_extension: String.t(),
  header_naming_fun: (Membrane.HTTPAdaptiveStream.Manifest.Track.t(),
                      counter :: non_neg_integer() -&gt;
                        String.t()),
  id: Membrane.HTTPAdaptiveStream.Manifest.Track.id_t(),
  max_framerate: float() | nil,
  mode: :vod | :live,
  partial_naming_fun: (t(), Keyword.t() -&gt; String.t()),
  partial_segment_duration: Membrane.Time.t() | nil,
  persist?: boolean(),
  resolution: {non_neg_integer(), non_neg_integer()} | nil,
  segment_duration: Membrane.Time.t(),
  segment_extension: String.t(),
  segment_naming_fun: (Membrane.HTTPAdaptiveStream.Manifest.Track.t() -&gt;
                         String.t()),
  target_window_duration: Membrane.Time.t() | :infinity,
  track_name: String.t()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
