<!--
{
  "availability" : [
    "iOS: 9.0.0 - 27.0.0",
    "iPadOS: 9.0.0 - 27.0.0",
    "macCatalyst: 13.1.0 - 27.0.0",
    "macOS: 11.0.0 - 27.0.0",
    "tvOS: 10.0.0 - 27.0.0",
    "visionOS: 1.0.0 - 27.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "ReplayKit",
  "identifier" : "/documentation/ReplayKit/RPScreenRecorder",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "ReplayKit"
    ],
    "preciseIdentifier" : "c:objc(cs)RPScreenRecorder"
  },
  "title" : "RPScreenRecorder"
}
-->

# RPScreenRecorder

The shared recorder object that provides the ability to record audio and video of your app.

```
class RPScreenRecorder
```

## Overview

Apps on a user’s device can share the recording function, with each app having its own instance of  `RPScreenRecorder`. Your app can record the audio and video inside of the app, along with user commentary through the microphone. You get a reference to the recorder through the [`shared()`](/documentation/ReplayKit/RPScreenRecorder/shared()) function and use it to implement start-and-stop recording functionality. You can present a user interface (view controller) where a user can trim and preview recordings, and share them with other users. Only one app at a time can use the recorder on the user’s device. Your app can’t record video from <doc://com.apple.documentation/documentation/AVFoundation/AVPlayer>.

## Topics

### Accessing the Shared Recorder

[`+  sharedRecorder`](/documentation/ReplayKit/RPScreenRecorder/shared())

Returns an app’s instance of the shared screen recorder.

### Inspecting a Screen Recorder

[`available`](/documentation/ReplayKit/RPScreenRecorder/isAvailable)

A Boolean value that indicates whether the screen recorder is available for recording.

[`recording`](/documentation/ReplayKit/RPScreenRecorder/isRecording)

A Boolean value that indicates whether the app is currently recording.

[`microphoneEnabled`](/documentation/ReplayKit/RPScreenRecorder/isMicrophoneEnabled)

A Boolean value that indicates whether the microphone is currently enabled.

[`cameraEnabled`](/documentation/ReplayKit/RPScreenRecorder/isCameraEnabled)

A Boolean value that indicates whether the camera is currently enabled.

[`cameraPreviewView`](/documentation/ReplayKit/RPScreenRecorder/cameraPreviewView)

A view containing the contents of the front-facing camera.

[`cameraPosition`](/documentation/ReplayKit/RPScreenRecorder/cameraPosition)

The camera position to use.

[`RPCameraPosition`](/documentation/ReplayKit/RPCameraPosition)

The position of the camera being accessed.

[`delegate`](/documentation/ReplayKit/RPScreenRecorder/delegate)

The delegate for the screen recorder.

[`RPScreenRecorderDelegate`](/documentation/ReplayKit/RPScreenRecorderDelegate)

The protocol you implement to receive notifications from the screen recorder.

### Controlling App Recording

[`-  startRecordingWithHandler:`](/documentation/ReplayKit/RPScreenRecorder/startRecording(handler:))

Starts recording the app display.

[`-  stopRecordingWithHandler:`](/documentation/ReplayKit/RPScreenRecorder/stopRecording(handler:))

Stops the current recording.

[`-  stopRecordingWithOutputURL:completionHandler:`](/documentation/ReplayKit/RPScreenRecorder/stopRecording(withOutput:completionHandler:))

Stops the current recording and writes the movie to the specified output URL.

[`-  startCaptureWithHandler:completionHandler:`](/documentation/ReplayKit/RPScreenRecorder/startCapture(handler:completionHandler:))

Starts screen and audio capture.

[`RPSampleBufferType`](/documentation/ReplayKit/RPSampleBufferType)

The type of media clip sample being buffered.

[`-  stopCaptureWithHandler:`](/documentation/ReplayKit/RPScreenRecorder/stopCapture(handler:))

Stops screen capture

[`-  discardRecordingWithHandler:`](/documentation/ReplayKit/RPScreenRecorder/discardRecording(handler:))

Discards the current recording.

[`-  startRecordingWithMicrophoneEnabled:handler:`](/documentation/ReplayKit/RPScreenRecorder/startRecording(withMicrophoneEnabled:handler:))

Starts recording the app’s audio and video.

### Performing Clip Recording

[`-  startClipBufferingWithCompletionHandler:`](/documentation/ReplayKit/RPScreenRecorder/startClipBuffering(completionHandler:))

Starts buffering a clip recording.

[`-  stopClipBufferingWithCompletionHandler:`](/documentation/ReplayKit/RPScreenRecorder/stopClipBuffering(completionHandler:))

Stops buffering a clip recording.

[`-  exportClipToURL:duration:completionHandler:`](/documentation/ReplayKit/RPScreenRecorder/exportClip(to:duration:completionHandler:))

Exports a clip recording to a file.

## Relationships

### Inherits From

[`NSObject-swift.class`](/documentation/ObjectiveC/NSObject-swift.class)

### Conforms To

[`CVarArg`](/documentation/Swift/CVarArg)

[`CustomDebugStringConvertible`](/documentation/Swift/CustomDebugStringConvertible)

[`CustomStringConvertible`](/documentation/Swift/CustomStringConvertible)

[`Equatable`](/documentation/Swift/Equatable)

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

[`Hashable`](/documentation/Swift/Hashable)

---

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)