<!--
{
  "availability" : [
    "iOS: 27.0.0 -",
    "iPadOS: 27.0.0 -",
    "macCatalyst: 27.0.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "AVSystemRouting",
  "identifier" : "/documentation/AVSystemRouting/AVSystemRouteSession-5i6j6/startWithCompletionHandler:",
  "metadataVersion" : "0.1.0",
  "role" : "Instance Method",
  "symbol" : {
    "kind" : "Instance Method",
    "modules" : [
      "AVSystemRouting"
    ],
    "preciseIdentifier" : "c:objc(cs)AVSystemRouteSession(im)startWithCompletionHandler:"
  },
  "title" : "startWithCompletionHandler:"
}
-->

# startWithCompletionHandler:

Starts the session and initiates media playback on the remote device.

```
- (void) startWithCompletionHandler:(void (^)(NSError *launchError, AVSystemRouteMediaSession *mediaSession)) completionHandler;
```

## Parameters

`completionHandler`

A completion handler called when the launch operation completes.
The handler receives two parameters:
- `launchError`: An error object if the launch failed, or `nil`
on success.
- `mediaSession`: A media session object for communicating with
the remote device.
Access its [`dataChannel`](/documentation/AVSystemRouting/AVSystemRouteMediaSession-4mo0j/dataChannel) property to send and receive
data between your app and the remote application. Access its [`playbackControl`](/documentation/AVSystemRouting/AVSystemRouteMediaSession-4mo0j/playbackControl) property to send and receive playback commands between your app and the remote application. For `AVSystemRouteLaunchMode/player`, [`dataChannel`](/documentation/AVSystemRouting/AVSystemRouteMediaSession-4mo0j/dataChannel) is `nil`.

## Discussion

Call this method to begin the playback session after adding it to an [`AVSystemRoute`](/documentation/AVSystemRouting/AVSystemRoute-9kkj3). The
session uses the URL and launch mode specified during initialization to start playback on
the remote device.

When using `AVSystemRouteLaunchMode/application`, your app must declare supported protocol
identifiers in the `MDESupportedProtocols` key in your `Info.plist` file. These
identifiers enable the system to establish communication between your app and its counterpart
on the remote device.

After a successful launch with `AVSystemRouteLaunchMode/application`, the returned
[`AVSystemRouteMediaSession`](/documentation/AVSystemRouting/AVSystemRouteMediaSession-4mo0j) provides access to a [`dataChannel`](/documentation/AVSystemRouting/AVSystemRouteMediaSession-4mo0j/dataChannel) and a [`playbackControl`](/documentation/AVSystemRouting/AVSystemRouteMediaSession-4mo0j/playbackControl).
Use these objects to send playback commands, state updates, or custom messages between your
app and the remote application.

Report playback metadata to `MPNowPlayingInfoCenter` to ensure the system displays accurate
information about the current media across a person’s devices.

> Important: Call ``doc://com.apple.avsystemrouting/documentation/AVSystemRouting/AVSystemRouteSession-5i6j6/stop`` when playback ends to properly clean up the remote session.

> Note: This method operates asynchronously. The completion handler may be called on a
> background queue, so dispatch to the main queue if you need to update UI.

---

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)