<!--
{
  "availability" : [
    "iOS: 4.0.0 -",
    "iPadOS: 4.0.0 -",
    "macCatalyst: 13.1.0 -",
    "macOS: 10.7.0 -",
    "tvOS: 9.0.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 6.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "CoreMedia",
  "identifier" : "/documentation/CoreMedia/CMSampleBuffer",
  "metadataVersion" : "0.1.0",
  "role" : "Class",
  "symbol" : {
    "kind" : "Class",
    "modules" : [
      "Core Media"
    ],
    "preciseIdentifier" : "c:@T@CMSampleBufferRef"
  },
  "title" : "CMSampleBuffer"
}
-->

# CMSampleBuffer

A reference to a buffer of media data.

```
class CMSampleBuffer
```

## Overview

A sample buffer is a Core Foundation object that contains zero or more media samples of a particular type (audio, video, muxed, and so on).

## Topics

### Determining Readiness

[`dataReadiness`](/documentation/CoreMedia/CMSampleBuffer/dataReadiness-swift.property)

A value that indicates the status of the data the sample buffer contains.

[`setDataReadiness(_:)`](/documentation/CoreMedia/CMSampleBuffer/setDataReadiness(_:))

Sets the status of the sample buffer’s data.

[`CMSampleBuffer.DataReadiness`](/documentation/CoreMedia/CMSampleBuffer/DataReadiness-swift.enum)

Constants that indicate the readiness of a sample buffer’s data.

[`makeDataReady()`](/documentation/CoreMedia/CMSampleBuffer/makeDataReady())

Makes the sample buffer’s data ready for use by calling its handler closure.

[`trackDataReadiness(_:)`](/documentation/CoreMedia/CMSampleBuffer/trackDataReadiness(_:))

Associates a sample buffer’s data readiness with that of another sample buffer.

### Invalidating Sample Buffers

[`isValid`](/documentation/CoreMedia/CMSampleBuffer/isValid)

A Boolean value that indicates whether the sample buffer is valid.

[`setInvalidateHandler(_:)`](/documentation/CoreMedia/CMSampleBuffer/setInvalidateHandler(_:))

Sets a closure for the sample buffer to call when it’s invalidated.

[`invalidate()`](/documentation/CoreMedia/CMSampleBuffer/invalidate())

Invalidates a sample buffer by calling its invalidation handler.

### Inspecting Size Information

[`numSamples`](/documentation/CoreMedia/CMSampleBuffer/numSamples)

The number of media samples the buffer contains.

[`sampleSizes()`](/documentation/CoreMedia/CMSampleBuffer/sampleSizes())

Retrieves an array of sample sizes that represents each sample in a sample buffer.

[`sampleSize(at:)`](/documentation/CoreMedia/CMSampleBuffer/sampleSize(at:))

Returns the size of a sample in bytes.

[`totalSampleSize`](/documentation/CoreMedia/CMSampleBuffer/totalSampleSize)

The total size in bytes of sample data in the buffer.

### Inspecting Duration and Timing

[`duration`](/documentation/CoreMedia/CMSampleBuffer/duration)

The total duration of a sample buffer.

[`decodeTimeStamp`](/documentation/CoreMedia/CMSampleBuffer/decodeTimeStamp)

The decode timestamp of the first sample in the buffer.

[`presentationTimeStamp`](/documentation/CoreMedia/CMSampleBuffer/presentationTimeStamp)

The sample presentation timestamp that’s the earliest numerically in the sample buffer.

[`outputDuration`](/documentation/CoreMedia/CMSampleBuffer/outputDuration)

The output duration of the sample buffer.

[`outputDecodeTimeStamp`](/documentation/CoreMedia/CMSampleBuffer/outputDecodeTimeStamp)

The output decode timestamp for a sample buffer.

[`outputPresentationTimeStamp`](/documentation/CoreMedia/CMSampleBuffer/outputPresentationTimeStamp)

The output presentation timestamp of a sample buffer.

[`setOutputPresentationTimeStamp(_:)`](/documentation/CoreMedia/CMSampleBuffer/setOutputPresentationTimeStamp(_:))

Sets an output presentation timestamp to use in place of a calculated value.

[`sampleTimingInfos()`](/documentation/CoreMedia/CMSampleBuffer/sampleTimingInfos())

Retrieves an array of sample timing information structures that represents each sample in a sample buffer.

[`sampleTimingInfo(at:)`](/documentation/CoreMedia/CMSampleBuffer/sampleTimingInfo(at:))

Returns sample timing information for a sample at the specified index.

[`outputSampleTimingInfos()`](/documentation/CoreMedia/CMSampleBuffer/outputSampleTimingInfos())

Retrieves an array of output sample timing information structures that represents each sample in a sample buffer.

### Accessing the Format Description

[`formatDescription`](/documentation/CoreMedia/CMSampleBuffer/formatDescription)

An object that describes the details of the media data.

### Modifying Sample Buffers

[`dataBuffer`](/documentation/CoreMedia/CMSampleBuffer/dataBuffer)

A block buffer that contains the media data.

[`setDataBuffer(_:)`](/documentation/CoreMedia/CMSampleBuffer/setDataBuffer(_:))

Associates a block buffer of media data with a sample buffer.

[`imageBuffer`](/documentation/CoreMedia/CMSampleBuffer/imageBuffer)

An image buffer that contains the media data.

[`withAudioBufferList(blockBufferMemoryAllocator:flags:body:)`](/documentation/CoreMedia/CMSampleBuffer/withAudioBufferList(blockBufferMemoryAllocator:flags:body:))

Calls a closure with an audio buffer list that contains the data from a sample buffer and a block buffer backing the audio buffers.

[`setDataBuffer(fromAudioBufferList:blockBufferMemoryAllocator:flags:)`](/documentation/CoreMedia/CMSampleBuffer/setDataBuffer(fromAudioBufferList:blockBufferMemoryAllocator:flags:))

Creates a block buffer that contains a copy of the data from an audio buffer list, and sets it as the sample buffer’s data.

[`copyPCMData(fromRange:into:)`](/documentation/CoreMedia/CMSampleBuffer/copyPCMData(fromRange:into:))

Copies PCM audio data from a sample buffer into a prepopulated audio buffer list.

[`audioStreamPacketDescriptions()`](/documentation/CoreMedia/CMSampleBuffer/audioStreamPacketDescriptions())

Creates an array of audio stream packet descriptions for the variable bytes per packet or variable frames per packet audio data in a sample buffer.

[`withUnsafeAudioStreamPacketDescriptions(_:)`](/documentation/CoreMedia/CMSampleBuffer/withUnsafeAudioStreamPacketDescriptions(_:))

Calls a closure with an audio stream packet description.

[`singleSampleBuffers()`](/documentation/CoreMedia/CMSampleBuffer/singleSampleBuffers())

Returns all samples in a sample buffer.

[`CMSampleBuffer.SingleSampleBuffers`](/documentation/CoreMedia/CMSampleBuffer/SingleSampleBuffers)

### Managing Attachments

[`CMSampleBuffer.AttachmentKey`](/documentation/CoreMedia/CMSampleBuffer/AttachmentKey)

Keys that identify sample buffer attachments.

[`sampleAttachments`](/documentation/CoreMedia/CMSampleBuffer/sampleAttachments-swift.property)

An array of sample attachments.

[`CMSampleBuffer.SampleAttachmentsArray`](/documentation/CoreMedia/CMSampleBuffer/SampleAttachmentsArray)

[`CMSampleBuffer.PerSampleAttachmentsDictionary`](/documentation/CoreMedia/CMSampleBuffer/PerSampleAttachmentsDictionary)

A structure that defines keys to identify per-sample attachments.

### Accessing the Type Identifier

[`typeID`](/documentation/CoreMedia/CMSampleBuffer/typeID)

Returns the type identifier of sample buffer objects.

### Accessing Tagged Buffers

[`taggedBuffers`](/documentation/CoreMedia/CMSampleBuffer/taggedBuffers)

Returns the tagged buffers associated with this buffer.

### Constants

[`CMSampleBuffer.Error`](/documentation/CoreMedia/CMSampleBuffer/Error)

A structure that defines errors that occur during framework operations.

[`CMSampleBuffer.Flags`](/documentation/CoreMedia/CMSampleBuffer/Flags)

Flags that customize the behavior of framework operations.

[`CMSampleBuffer.NotificationKey`](/documentation/CoreMedia/CMSampleBuffer/NotificationKey)

A key for sample buffer notifications.

### Notifications

[`dataBecameReady`](/documentation/CoreMedia/CMSampleBuffer/dataBecameReady)

A notification the system posts when a sample buffer’s data becomes ready.

[`dataFailed`](/documentation/CoreMedia/CMSampleBuffer/dataFailed)

A notification the system posts when a sample buffer fails to load its data.



---

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)
