# How to programmatically select a video track quality on iOS

This article describes how you can use the VideoTrack API, a sub-API of the MediaTrack API, to select a video track quality. If you select a specific quality, you overrule the ABR algorithm.

Implementing this functionality is a common use-case for developers who want to build their own UI to toggle a specific video quality.

## Usage for HESP streams

For HESP streams, set the `targetQualities` of a [`MediaTrack`](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/v11/api-reference/ios/Protocols/MediaTrack).

```swift
let videoTrack = player.videoTracks[0]
videoTrack.targetQualities = [videoTrack.qualities[indexOfRequestedVideoTrackQuality]]
// or
videoTrack.targetQualities = [videoTrack.qualities[0], videoTrack.qualities[1]]
```

## Usage for HLS streams

For HLS streams, the iOS SDK leverages the [ABR API](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/v11/api-reference/ios/Protocols/ABRConfiguration). The underlying AVFoundation stack, which THEOplayer has to use, brings along the technical limitation that you cannot select a specific video quality. Instead, you can set a maximum resolution or bitrate.

```swift
// set preferred peak bitrate
self.theoplayer.abr.preferredPeakBitRate = 200000

// self.theoplayer.abr.preferredPeakBitRate = nil // removes any bitrate limitation

// preferredMaximumResolution supported starting from iOS 11 and above
// self.theoplayer.abr.preferredMaximumResolution = CGSize(width: 1280, height: 720)
// self.theoplayer.abr.preferredMaximumResolution = CGSize.zero // removes any resolution limitation
```

## Related articles

* [How to programmatically detect video track qualities](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/how-to-guides/ios/media-tracks/detect-video-track-qualities.md)
* [How to programmatically detect video track quality changes](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/how-to-guides/ios/media-tracks/detect-video-track-quality-changes.md)
* [How to reduce data usage on mobile devices](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/how-to-guides/ios/media-tracks/reduce-data-usage.md)
* [How to build a chromeless UI](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/how-to-guides/ios/ui/build-chromeless-ui.md)
