> ## Documentation Index
> Fetch the complete documentation index at: https://docs.liv.tv/llms.txt
> Use this file to discover all available pages before exploring further.

# QualityOption

> Define named quality presets for video recording and streaming with different resolution, bitrate, and framerate settings.

## What Problem Does This Solve?

When building apps with video capture, you need to offer users quality options that balance visual fidelity with performance and file size. Different use cases need different settings—recording gameplay for upload needs higher quality than live streaming, and mobile devices have different constraints than desktop.

`QualityOption` lets you define named presets (like "High", "Medium", "Low") where each preset has separate configurations for recording vs. streaming.

## When to Use QualityOption

Use `QualityOption` when:

* You want to give users selectable quality presets (Low/Medium/High)
* Recording and streaming need different settings (recording at higher quality, streaming at lower bitrate)
* You're building a quality settings menu in your app
* Different platforms need different quality tiers

Skip this if you're hardcoding a single quality level for all users.

***

## Quick Example

```csharp theme={null}
// Define a "High" quality preset
var resolution = new CameraResolutionDescriptor(1920, 1080);

var highQuality = new QualityOption(
    name: "High",
    isDefault: true,
    cameraTrackDescriptor: new CameraTrackDescriptor(
        resolution, 
        bitrate: 8 << 20,  // 8 Mbps for recording
        framerate: 60
    ),
    streamingCameraTrackDescriptor: new CameraTrackDescriptor(
        resolution,
        bitrate: 5 << 20,  // 5 Mbps for streaming
        framerate: 30
    )
);
```

This creates a "High" preset that records at 8 Mbps/60fps but streams at 5 Mbps/30fps.

***

## How It Works

Each `QualityOption` contains:

1. **Name** — Display label shown to users ("High", "Medium", "Low")
2. **Recording settings** — Resolution, bitrate, framerate for saved videos
3. **Streaming settings** — Usually lower bitrate/framerate for live streaming
4. **Default flag** — Marks which option is selected by default

You typically create multiple `QualityOption` instances and add them to a `LckQualityConfig` asset.

***

## Common Patterns

### Three-tier quality system

```csharp theme={null}
var options = new List<QualityOption>
{
    new QualityOption("Low", false, 
        new CameraTrackDescriptor(new CameraResolutionDescriptor(1280, 720), 3 << 20, 30),
        new CameraTrackDescriptor(new CameraResolutionDescriptor(1280, 720), 2 << 20, 30)
    ),
    new QualityOption("Medium", true,  // default
        new CameraTrackDescriptor(new CameraResolutionDescriptor(1920, 1080), 5 << 20, 30),
        new CameraTrackDescriptor(new CameraResolutionDescriptor(1920, 1080), 3 << 20, 30)
    ),
    new QualityOption("High", false,
        new CameraTrackDescriptor(new CameraResolutionDescriptor(1920, 1080), 8 << 20, 60),
        new CameraTrackDescriptor(new CameraResolutionDescriptor(1920, 1080), 5 << 20, 30)
    )
};
```

### Record-only mode (no streaming)

```csharp theme={null}
var recordTrack = new CameraTrackDescriptor(
    new CameraResolutionDescriptor(1920, 1080), 
    10 << 20, 
    60
);

// Use same track for both recording and streaming
var option = new QualityOption("Ultra", true, recordTrack, recordTrack);
```

***

## API Reference

### Constructor

```csharp theme={null}
public QualityOption(
    string name,
    bool isDefault,
    CameraTrackDescriptor cameraTrackDescriptor,
    CameraTrackDescriptor streamingCameraTrackDescriptor
)
```

#### Parameters

* `name` — Display name shown in UI ("High", "Medium", "Low")
* `isDefault` — Set `true` for the default selection
* `cameraTrackDescriptor` — Settings for recording
* `streamingCameraTrackDescriptor` — Settings for live streaming

### Fields

| Field                            | Type                    | Description                           |
| -------------------------------- | ----------------------- | ------------------------------------- |
| `Name`                           | `string`                | Display name of the quality option    |
| `IsDefault`                      | `bool`                  | Whether this is the default selection |
| `RecordingCameraTrackDescriptor` | `CameraTrackDescriptor` | Track settings for recording          |
| `StreamingCameraTrackDescriptor` | `CameraTrackDescriptor` | Track settings for streaming          |

### Obsolete Members

<Warning>
  **Deprecated:** `CameraTrackDescriptor` field is obsolete. Use `RecordingCameraTrackDescriptor` or `StreamingCameraTrackDescriptor` instead.
</Warning>

***

## Related

* [CameraTrackDescriptor](/api-reference/unity/structs/CameraTrackDescriptor) — Define resolution, bitrate, framerate
* [CameraResolutionDescriptor](/api-reference/unity/structs/CameraResolutionDescriptor) — Specify output resolution
* [LckQualityConfig](/api-reference/unity/classes/LckQualityConfig) — Asset that contains quality options
* [QualityOptionOverride](/api-reference/unity/structs/QualityOptionOverride) — Device-specific overrides
