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
// 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:
- Name — Display label shown to users (“High”, “Medium”, “Low”)
- Recording settings — Resolution, bitrate, framerate for saved videos
- Streaming settings — Usually lower bitrate/framerate for live streaming
- 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
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)
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
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
Deprecated: CameraTrackDescriptor field is obsolete. Use RecordingCameraTrackDescriptor or StreamingCameraTrackDescriptor instead.