<!--
{
  "availability" : [
    "tvOS: -",
    "visionOS: -"
  ],
  "documentType" : "symbol",
  "framework" : "AVKit",
  "identifier" : "/documentation/AVKit/AVInterfaceTimeControllable",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "AVKit"
    ],
    "preciseIdentifier" : "c:objc(pl)AVInterfaceTimeControllable"
  },
  "title" : "AVInterfaceTimeControllable"
}
-->

# AVInterfaceTimeControllable

Provides time control and navigation capabilities for media content.

```
@protocol AVInterfaceTimeControllable <NSObject>
```

## Topics

### Instance Properties

[`@property (nonatomic, readwrite) CMTime currentPlaybackPosition;`](/documentation/AVKit/AVInterfaceTimeControllable/currentPlaybackPosition)

The current playback position within the media time, expressed in seconds from the start of the content.
This value should be within the bounds defined by the start and duration properties and represents the exact temporal position of playback. Must be key-value observable.

[`@property (nonatomic, strong, readonly) AVInterfaceTimelineSegment * currentSegment;`](/documentation/AVKit/AVInterfaceTimeControllable/currentSegment)

The segment containing the current playback position. This property automatically updates as playback progresses through different timeline segments.
Use this to determine the current content type (primary vs. secondary) and any special playback characteristics that apply to the current position. Must be key-value observable.

[`@property (nonatomic, copy, readonly, nullable) NSArray<NSValue *> * seekableTimeRanges;`](/documentation/AVKit/AVInterfaceTimeControllable/seekableTimeRanges)

An array of time ranges within the timeline where seeking operations are permitted.
Each range is represented as an NSValue wrapping a CMTimeRange structure, defining portions of the timeline where users can jump to specific time positions during playback.
If nil, the entire content defined by timeRange is considered seekable. When provided, each range must be a subset of the overall timeRange and should not overlap with other seekable ranges.
An empty array means the entire content defined by timeRange is not seekable.
Seekable ranges typically exclude segments where requiresLinearPlayback is YES, such as advertisements, mandatory content, or licensing-restricted portions.
The array should contain ranges in chronological order for optimal performance. Must be key-value observable.

[`@property (nonatomic, copy, readonly) NSArray<AVInterfaceTimelineSegment *> * segments;`](/documentation/AVKit/AVInterfaceTimeControllable/segments)

Segments representing different content types within the timeline. All segments should be contiguous and collectively cover the entire timeline duration without gaps or overlaps.
Each segment defines a specific portion of content (such as main program, advertisements, or bonus material) with its own playback characteristics. Must be key-value observable.

[`@property (nonatomic, readonly) CMTimeRange timeRange;`](/documentation/AVKit/AVInterfaceTimeControllable/timeRange)

The time range representing the total duration and bounds of the media content.
This defines the overall playable timeline, with all segments and seekable ranges falling within this range. Must be key-value observable.

## Relationships

### Inherits From

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

### Inherited By

[`AVInterfaceControllable`](/documentation/AVKit/AVInterfaceControllable)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)