---
title: DeviceDiscoveryExtension
framework: DeviceDiscoveryExtension
role: collection
role_heading: Framework
platforms: [iOS 16.0+, iPadOS 16.0+, macOS 15.0+, visionOS 1.0+]
path: devicediscoveryextension
---

# DeviceDiscoveryExtension

Stream media to a third-party device that a user selects in a system menu.

## Overview

Overview Use DeviceDiscoveryExtension (DDE) to discover third-party media receivers to which your app can stream AV content. When a user invokes your app’s media-streaming UI, you can offer a third-party, local-network, or Bluetooth device as a streaming destination in a route picker view (AVRoutePickerView). The figure below illustrates actors in the discovery process. As depicted in the System section, your app’s device discovery extension loads when the view displays.

Once the extension loads: The extension runs in a system process and searches the local network and Bluetooth devices for a specific media receiver. When the extension finds the device, it returns the device to the system, which displays it in the picker view as an available option. The user makes a selection and the system passes the chosen device to the app, which can then stream media to the device. Because DDE runs in a system sandbox, the extension doesn’t need to ask the user for local-network or Bluetooth permissions. The picker view displays discovered third-party devices and protocols in the same system menu as AirPlay, which provides a unified device-selection experience. note: To stream to a third-party device that you don’t manufacture, bundle your app with the device discovery extension that the manufacturer provides as part of its SDK.

## Topics

### Essentials

- [Discovering a third-party media-streaming device](devicediscoveryextension/discovering-a-third-party-media-streaming-device.md)
- [Media Device Discovery Extension](bundleresources/entitlements/com.apple.developer.media-device-discovery-extension.md)

### Extension

- [DDDiscoveryExtension](devicediscoveryextension/dddiscoveryextension.md)
- [DDDiscoverySession](devicediscoveryextension/dddiscoverysession.md)
- [DDDiscoveryExtensionConfigurationProtocol](devicediscoveryextension/dddiscoveryextensionconfigurationprotocol.md)

### Life cycle

- [DDDeviceEvent](devicediscoveryextension/dddeviceevent.md)
- [DDDeviceEvent.EventType](devicediscoveryextension/dddeviceevent/eventtype-swift.enum.md)
- [DDEventTypeToString(_:)](devicediscoveryextension/ddeventtypetostring(_:).md)
- [DDEventHandler](devicediscoveryextension/ddeventhandler.md)

### Device information

- [DDDevice](devicediscoveryextension/dddevice.md)
- [DDDevice.Category](devicediscoveryextension/dddevice/category-swift.enum.md)
- [DDDeviceState](devicediscoveryextension/dddevicestate.md)
- [DDDeviceCategoryToString(_:)](devicediscoveryextension/dddevicecategorytostring(_:).md)
- [DDDeviceStateToString(_:)](devicediscoveryextension/dddevicestatetostring(_:).md)
- [DDDevice.Protocol](devicediscoveryextension/dddevice/protocol-swift.enum.md)
- [DDDeviceProtocolToString(_:)](devicediscoveryextension/dddeviceprotocoltostring(_:).md)
- [DDDeviceProtocolString](devicediscoveryextension/dddeviceprotocolstring.md)
- [DDDeviceMediaPlaybackStateToString(_:)](devicediscoveryextension/dddevicemediaplaybackstatetostring(_:).md)

### Errors

- [DDError](devicediscoveryextension/dderror.md)
- [DDError.Code](devicediscoveryextension/dderror/code.md)
- [DDErrorHandler](devicediscoveryextension/dderrorhandler.md)
- [DDErrorOutType](devicediscoveryextension/dderrorouttype.md)
- [DDErrorDomain](devicediscoveryextension/dderrordomain.md)

### Reference

- [DeviceDiscoveryExtension Enumerations](devicediscoveryextension/devicediscoveryextension-enumerations.md)
