<!--
{
  "availability" : [
    "iOS: 7.1.0 - 14.0.0",
    "iPadOS: 7.1.0 - 14.0.0",
    "macCatalyst: 13.1.0 - 14.0.0",
    "visionOS: 1.0.0 - 1.0.0"
  ],
  "documentType" : "symbol",
  "framework" : "MediaPlayer",
  "identifier" : "/documentation/MediaPlayer/MPPlayableContentDataSource",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Media Player"
    ],
    "preciseIdentifier" : "c:objc(pl)MPPlayableContentDataSource"
  },
  "title" : "MPPlayableContentDataSource"
}
-->

# MPPlayableContentDataSource

The data source providing media metadata to external media players so they can build user interfaces displaying your app’s content.

```
protocol MPPlayableContentDataSource : NSObjectProtocol
```

## Overview

To support external media players, create a class that conforms to the `MPPlayableContentDataSource` protocol. When your app launches, create an instance of this class and assign it to the shared [`dataSource`](/documentation/MediaPlayer/MPPlayableContentManager/dataSource) property. This data source provides media metadata to external media players so that they can build user interfaces displaying your app’s content. It’s best to set this data source as early as possible in your app’s lifecycle, as iOS may start asking for content right away.

> Important:
> This class is only used for CarPlay. Using it requires a special entitlement issued by Apple. Apps without the correct entitlement won’t appear on the CarPlay home screen. See <http://www.apple.com/ios/carplay/> for more information.

## Topics

### Retrieving a media item

[`-  contentItemAtIndexPath:`](/documentation/MediaPlayer/MPPlayableContentDataSource/contentItem(at:))

Retrieves the media item at the specified index.

[`-  contentItemForIdentifier:completionHandler:`](/documentation/MediaPlayer/MPPlayableContentDataSource/contentItem(forIdentifier:completionHandler:))

Retrieves the content item associated with the provided identifier.

### Working with child nodes

[`-  beginLoadingChildItemsAtIndexPath:completionHandler:`](/documentation/MediaPlayer/MPPlayableContentDataSource/beginLoadingChildItems(at:completionHandler:))

Starts to load the children of the indicated index.

[`-  childItemsDisplayPlaybackProgressAtIndexPath:`](/documentation/MediaPlayer/MPPlayableContentDataSource/childItemsDisplayPlaybackProgress(at:))

Returns a Boolean value indicating whether the provided content supports playback progress.

[`-  numberOfChildItemsAtIndexPath:`](/documentation/MediaPlayer/MPPlayableContentDataSource/numberOfChildItems(at:))

Provides the number of child nodes for the indicated node.

## Relationships

### Inherits From

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

---

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)