An object that manages capture activity and coordinates the flow of data from input devices to capture outputs.


To perform a real-time or offline capture, you instantiate an AVCaptureSession object and add appropriate inputs (such as AVCaptureDeviceInput), and outputs (such as AVCaptureMovieFileOutput). The following code fragment illustrates how to configure a capture device to record audio:

AVCaptureSession *captureSession = [[AVCaptureSession alloc] init];
AVCaptureDevice *audioCaptureDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];
NSError *error = nil;
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioCaptureDevice error:&error];
if (audioInput) {
    [captureSession addInput:audioInput];
else {
    // Handle the failure.

You invoke startRunning() to start the flow of data from the inputs to the outputs, and invoke stopRunning() to stop the flow.

You use the sessionPreset property to customize the quality level, bitrate, or other settings for the output. Most common capture configurations are available through session presets; however, some specialized options (such as high frame rate) require directly setting a capture format on an AVCaptureDevice instance.


Managing Inputs and Outputs

var inputs: [Any]!

The capture session’s inputs.

func canAddInput(AVCaptureInput!)

Returns a Boolean value that indicates whether a given input can be added to the session.

func addInput(AVCaptureInput!)

Adds a given input to the session.

func removeInput(AVCaptureInput!)

Removes a given input.

var outputs: [Any]!

The capture session’s outputs.

func canAddOutput(AVCaptureOutput!)

Returns a Boolean value that indicates whether a given output can be added to the session.

func addOutput(AVCaptureOutput!)

Adds a given output to the session.

Managing Running State

func startRunning()

Tells the receiver to start running.

func stopRunning()

Tells the receiver to stop running.

var isRunning: Bool

Indicates whether the receiver is running.

var isInterrupted: Bool

Indicates whether the receiver has been interrupted.

Configuration Change

func beginConfiguration()

Indicates the start of a set of configuration changes to be made atomically.

func commitConfiguration()

Commits a set of configuration changes.

Managing Session Presets

var sessionPreset: String!

A constant value indicating the quality level or bitrate of the output.

func canSetSessionPreset(String!)

Returns a Boolean value that indicates whether the receiver can use the given preset.

Managing Connections

func add(AVCaptureConnection!)

Adds a given capture connection to the session.

func canAdd(AVCaptureConnection!)

Returns a Boolean value that indicates whether a given connection can be added to the receiver.

func addInputWithNoConnections(AVCaptureInput!)

Adds an capture input to the session without forming any connections.

func addOutputWithNoConnections(AVCaptureOutput!)

Adds an capture output to the session without forming any connections.

func remove(AVCaptureConnection!)

Removes a capture connection from the session.

Sharing the Application’s Audio Session

var usesApplicationAudioSession: Bool

Indicates whether the capture session will make use of the app’s shared audio session.

var automaticallyConfiguresApplicationAudioSession: Bool

A Boolean value that indicates whether the capture session automatically changes settings in the app’s shared audio session.

Synchronizing Multiple Inputs and Outputs

var masterClock: CMClock!

A clock object used for output synchronization.

Managing Color Spaces

var automaticallyConfiguresCaptureDeviceForWideColor: Bool

A Boolean value that specifies whether the session should automatically use wide-gamut color where available.



Constants indicating video orientation.

Notification User Info Keys

Keys to retrieve information from a notification from a capture session.


Constants identifying the reason a capture session was interrupted, found in a AVCaptureSessionWasInterrupted user info dictionary.

Video Input Presets

Constants to define capture setting presets using the sessionPreset property.


static let AVCaptureSessionRuntimeError: NSNotification.Name

Posted if an error occurred during a capture session.

static let AVCaptureSessionWasInterrupted: NSNotification.Name

Posted if a capture session is interrupted.

static let AVCaptureSessionInterruptionEnded: NSNotification.Name

Posted if an interruption to a capture session finishes.


Inherits From

Conforms To