<!--
{
  "availability" : [
    "DriverKit: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "VideoDriverKit",
  "identifier" : "/documentation/VideoDriverKit",
  "metadataVersion" : "0.1.0",
  "role" : "Framework",
  "symbol" : {
    "kind" : "Framework",
    "modules" : [
      "VideoDriverKit"
    ],
    "preciseIdentifier" : "VideoDriverKit"
  },
  "title" : "VideoDriverKit"
}
-->

# VideoDriverKit

Develop drivers for video capture and playback devices.

## Overview

The VideoDriverKit framework supports the development of DriverKit-based video extensions that communicate with <doc://com.apple.documentation/documentation/CoreMedia>. VideoDriverKit handles all of the necessary user client communication between CoreMedia and the driver extension, which eliminates the need to use `IOVideoFamily` kexts and
<doc://com.apple.documentation/documentation/CoreMediaIO/device-abstraction-layer-dal-plug-ins>.

Develop your driver by subclassing [`IOUserVideoDriver`](/documentation/VideoDriverKit/IOUserVideoDriver). Then use the <doc://com.apple.documentation/documentation/SystemExtensions> framework to install and upgrade your driver.

> Note: VideoDriverKit is available on macOS.

## Topics

### Essentials

[`class IOUserVideoObject;`](/documentation/VideoDriverKit/IOUserVideoObject)

The base class for all video objects.

[`class IOUserVideoDriver;`](/documentation/VideoDriverKit/IOUserVideoDriver)

A video driver.

### Video devices

[`class IOUserVideoClockDevice;`](/documentation/VideoDriverKit/IOUserVideoClockDevice)

A clock device.

[`class IOUserVideoDevice;`](/documentation/VideoDriverKit/IOUserVideoDevice)

A video device.

### Video objects

[`class IOUserVideoBox;`](/documentation/VideoDriverKit/IOUserVideoBox)

A container
for other objects.

### Video streams

[`class IOUserVideoStream;`](/documentation/VideoDriverKit/IOUserVideoStream)

A video stream.

### Video controls

[`class IOUserVideoControl;`](/documentation/VideoDriverKit/IOUserVideoControl)

A base class for control objects.

[`class IOUserVideoBooleanControl;`](/documentation/VideoDriverKit/IOUserVideoBooleanControl)

A control object that supports Boolean values.

[`class IOUserVideoStereoPanControl;`](/documentation/VideoDriverKit/IOUserVideoStereoPanControl)

A control object that supports panning between stereo channels.

[`class IOUserVideoSliderControl;`](/documentation/VideoDriverKit/IOUserVideoSliderControl)

A control object that supports a 32-bit unsigned integer value slider.

[`class IOUserVideoDirectionControl;`](/documentation/VideoDriverKit/IOUserVideoDirectionControl)

A control object that supports Boolean values.

[`class IOUserVideoSelectorControl;`](/documentation/VideoDriverKit/IOUserVideoSelectorControl)

A control object that supports a 32-bit unsigned integer selector value.

[`class IOUserVideoLevelControl;`](/documentation/VideoDriverKit/IOUserVideoLevelControl)

A control object that supports a float value level.

### Namespaces

[`namespace VideoDriverKit;`](/documentation/VideoDriverKit/VideoDriverKit)

A namespace that holds supporting types used by VideoDriverKit functions.

### Macros

[`#define DebugMsg(inFormat, args...)`](/documentation/VideoDriverKit/DebugMsg)

[`#define FailIf(inCondition, inAction, inHandler, inMessage)`](/documentation/VideoDriverKit/FailIf)

[`#define FailIfError(inError, inAction, inHandler, inMessage)`](/documentation/VideoDriverKit/FailIfError)

[`#define FailIfNULL(inPointer, inAction, inHandler, inMessage)`](/documentation/VideoDriverKit/FailIfNULL)

[`#define kIOStreamBufferIDInvalid`](/documentation/VideoDriverKit/kIOStreamBufferIDInvalid)

[`#define kIOUserVideoDriverUserClientType`](/documentation/VideoDriverKit/kIOUserVideoDriverUserClientType)

User client type required for connection to the Host.

---

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)