Package com.google.android.exoplayer2.source

## Class TrackGroup

- java.lang.Object
- - com.google.android.exoplayer2.source.TrackGroup

- All Implemented Interfaces:
    `Bundleable`

      public final class TrackGroup
      extends Object
      implements Bundleable

  An immutable group of tracks available within a media stream. All tracks in a group present the same content, but their formats may differ.

  As an example of how tracks can be grouped, consider an adaptive playback where a main video feed is provided in five resolutions, and an alternative video feed (e.g., a different camera angle in a sports match) is provided in two resolutions. In this case there will be two video track groups, one corresponding to the main video feed containing five tracks, and a second for the alternative video feed containing two tracks.

  Note that audio tracks whose languages differ are not grouped, because content in different languages is not considered to be the same. Conversely, audio tracks in the same language that only differ in properties such as bitrate, sampling rate, channel count and so on can be grouped. This also applies to text tracks.

  Note also that this class only contains information derived from the media itself. Unlike `Tracks.Group`, it does not include runtime information such as the extent to which playback of each track is supported by the device, or which tracks are currently selected.

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface com.google.android.exoplayer2.Bundleable

      `Bundleable.Creator<T extends Bundleable>`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static Bundleable.Creator<TrackGroup>` | `CREATOR` | Object that can restore `TrackGroup` from a `Bundle`.
    `String` | `id` | An identifier for the track group.
    `int` | `length` | The number of tracks in the group.
    `@com.google.android.exoplayer2.C.TrackType int` | `type` | The type of tracks in the group.

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `TrackGroup​(Format... formats)` | Constructs a track group containing the provided `formats`.
    `TrackGroup​(String id, Format... formats)` | Constructs a track group with the provided `id` and `formats`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `TrackGroup` | `copyWithId​(String id)` | Returns a copy of this track group with the specified `id`.
    `boolean` | `equals​(Object obj)` |
    `Format` | `getFormat​(int index)` | Returns the format of the track at a given index.
    `int` | `hashCode()` |
    `int` | `indexOf​(Format format)` | Returns the index of the track with the given format in the group.
    `Bundle` | `toBundle()` | Returns a `Bundle` representing the information stored in this object.

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### length

          public final int length

      The number of tracks in the group.

    - #### id

          public final String id

      An identifier for the track group.

    - #### type

          public final @com.google.android.exoplayer2.C.TrackType int type

      The type of tracks in the group.

    - #### CREATOR

          public static final Bundleable.Creator<TrackGroup> CREATOR

      Object that can restore `TrackGroup` from a `Bundle`.

  - ### Constructor Detail

    - #### TrackGroup

          public TrackGroup​(Format... formats)

      Constructs a track group containing the provided `formats`.
      Parameters:
        `formats` - The list of `Formats`. Must not be empty.

    - #### TrackGroup

          public TrackGroup​(String id,
                            Format... formats)

      Constructs a track group with the provided `id` and `formats`.
      Parameters:
        `id` - The identifier of the track group. May be an empty string.
        `formats` - The list of `Formats`. Must not be empty.

  - ### Method Detail

    - #### copyWithId

          @CheckResult
          public TrackGroup copyWithId​(String id)

      Returns a copy of this track group with the specified `id`.
      Parameters:
        `id` - The identifier for the copy of the track group.
      Returns:
        The copied track group.

    - #### getFormat

          public Format getFormat​(int index)

      Returns the format of the track at a given index.
      Parameters:
        `index` - The index of the track.
      Returns:
        The track's format.

    - #### indexOf

          public int indexOf​(Format format)

      Returns the index of the track with the given format in the group. The format is located by identity so, for example, `group.indexOf(group.getFormat(index)) == index` even if multiple tracks have formats that contain the same values.
      Parameters:
        `format` - The format.
      Returns:
        The index of the track, or `C.INDEX_UNSET` if no such track exists.

    - #### hashCode

          public int hashCode()

      Overrides:
        `hashCode` in class `Object`

    - #### equals

          public boolean equals​(@Nullable
                                Object obj)

      Overrides:
        `equals` in class `Object`

    - #### toBundle

          public Bundle toBundle()

      Description copied from interface: `Bundleable`
      Returns a `Bundle` representing the information stored in this object.
      Specified by:
        `toBundle` in interface `Bundleable`